Função não tá funcionando

08/12/2003

1

Fiz uma função para qdo for imprimir em Modo Texto, a impressora(LX 300) possa reconhecer os caracteres especiais(acentos, cedilhas e etc)
e outra para ajustar valores e strings. Essas duas funcionam mais a q transforma ANSI para ASCII, não. Eis elas:
AnsiToAscii(str:string):string;
var
i:integer;
begin
for i := 1 to length(str) do
case string of str[i] do
´ã´:str[i]:=´a´;
´á´:str[i]:=´a´;//e assim sucessivamente até todos os caracteres especiais
end;
end;
AjustaStr(str:string;tam:integer):string;
begin
while length(str) < tam do
str:=str+´ ´;
if length(str) > tam then
str:=copy(str,1,tam)
result:=str;
end;
a outra semelhante a esta, só que os espaços eu os coloco antes da string e não depois. Na chamada eu faço assim:
var
arq:textfile;
begin
assignfile(arq, ´LPT1´);
rewrite(arq);
writeln(arq, #15);
writeln(arq,+AnsiToAscii(AjustaStr(TabelaStringSerImpressa.Value, tam);
//Normalmente dentro de um While, para imprimir tudo. Desta forma, não funciona. porem ae eu retirar, a função AnsiToAscii, funciona bem, sem nenhum problema, tanto a AjustaStr quanto a AjustaNum. Poem se chamo AnsiToAscii, não imprime o campo ou a string, que a função está cobrindo. O que pode ser? A função está correta,
end;
E aproveitando a boa vontade, como faço para reimprimir numa lista de preços(usando textfile) o nome do grupo a que pertence o produto?
Ex: Quando for listar todos os amortecedores, apareça um tipo de cabeçalho, com o nome do grupo AMORTECEDOR, e todos os amortecedores, qdo terminar e começar, por exemplo, Faróis, que escreva Farol em cima e em baixo todos os faróis e assim por diante.


Responder

Posts

08/12/2003

Nildo

Você errou seu Case.
Arrumei sua função:

function AnsiToAscii(str:string):string;
var
   i:integer;
begin
   for i := 1 to length(str) do
      case str[i] of
         ´ã´, ´á´:str[i]:=´a´; // Fica mais facil assim tambem.
   end;
end;



Responder

11/11/2012

Aline Silva

Boa noite!!!

Estou fazendo uma busca pelo nome do cliente, sendo que minha busca nao faz a busca se o nome do cliente está em maiúscula ou minuscula ou com acento, Ex: se eu tiver 2 cliente com o nome Anderson e ANDERSON, a busca só acha se eu escrever conforme está no banco de dados...
Preciso que eu escreva em maiuscula ou minuscula, ou com acento, e que a busca nao faça essa diferença.
Estava tentando usar a função
function AnsiToAscii ( str: String ): String;
var
i: Integer;
begin
for i := 1 to Length ( str ) do
case str[i] of
á: str[i] := a;
é: str[i] := e;
í: str[i] := i;
ó: str[i] := o;
ú: str[i] := u;
à: str[i] := a;
è: str[i] := e;
ì: str[i] := i;
ò: str[i] := o;
ù: str[i] := u;
â: str[i] := a;
ê: str[i] := e;
î: str[i] := i;
ô: str[i] := o;
û: str[i] := u;
ä: str[i] := a;
ë: str[i] := e;
ï: str[i] := i;
ö: str[i] := o;
ü: str[i] := u;
ã: str[i] := a;
õ: str[i] := o;
ñ: str[i] := n;
ç: str[i] := c;
Á: str[i] := A;
É: str[i] := E;
Í: str[i] := I;
Ó: str[i] := O;
Ú: str[i] := U;
À: str[i] := A;
È: str[i] := E;
Ì: str[i] := I;
Ò: str[i] := O;
Ù: str[i] := U;
Â: str[i] := A;
Ê: str[i] := E;
Î: str[i] := I;
Ô: str[i] := O;
Û: str[i] := U;
Ä: str[i] := A;
Ë: str[i] := E;
Ï: str[i] := I;
Ö: str[i] := O;
Ü: str[i] := U;
Ã: str[i] := A;
Õ: str[i] := O;
Ñ: str[i] := N;
Ç: str[i] := C;
end;
Result := str;
end;


 DMCONSULTA.TBBUSCACLIENTE.Close;
 EditBusca.text := AnsiToAscii(EditBusca.text);
 DMCONSULTA.SQLDATASETBUSCACLIENTE.Params[0].AsString:= % + EditBusca.Text + %;
 DMCONSULTA.TBBUSCACLIENTE.Open;

 If NOT  DMCONSULTA.TBBUSCACLIENTE.IsEmpty then
	DBGMOT.Visible:= TRUE
 else
 begin
	DBGMOT.Visible:= FALSE;
	Application.MessageBox (A busca não resultou em nenhum resultado., Aviso, MB_OK + MB_ICONINFORMATION);
 end;



Porém a função só pela a primeira letra da string e deixa em minusculo, e exclui as outras letras da string...
Se alguém puder me ajudar...
Grata
Responder

12/11/2012

Luiz Menin

Pode colocar o código SQL da consulta? Qual o banco de dados tu estas utilizando: Firebird, Oracle?
Responder

12/11/2012

Aline Silva

Utilizo o banco de dados firebird, e esse é o sql...

SELECT processos.cod_proc, processos.nr_processo,processos.data_audiencia_incial, processos.hora_audiencia_incial,
processos.data_adiamento_incial,processos.concluir_processo,advogado.nome_adv, clientes.nome_cliente
from processos
INNER JOIN advogado
ON processos.cod_adv = advogado.cod_adv
INNER JOIN clientes
ON processos.cod_cliente = clientes.cod_cliente
where clientes.nome_cliente LIKE :NOME
order by clientes.nome_cliente;
Responder
Sem usar função no Delphi, tente dessa forma:

SELECT processos.cod_proc, processos.nr_processo,processos.data_audiencia_incial, processos.hora_audiencia_incial,
processos.data_adiamento_incial,processos.concluir_processo,advogado.nome_adv, clientes.nome_cliente
from processos
INNER JOIN advogado
ON processos.cod_adv = advogado.cod_adv
INNER JOIN clientes
ON processos.cod_cliente = clientes.cod_cliente
where CAST(clientes.nome_cliente AS VARCHAR(50) CHARACTER SET ISO8859_1) COLLATE PT_BR LIKE :NOME
order by clientes.nome_cliente;
Responder

12/11/2012

Aline Silva

vou testar, obrigada!
Responder

12/11/2012

Aline Silva

Funcionou certinho....Obrigadão mesmo :)
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira