Generic SQL Error
24/11/2005
0
eu estou com um probleminha aqui e não estou conseguindo resolver...é o seguinte...eu tenho uma consulta onde eu utilizo um dbgrid, uma edit, uma query e um dtsource...eu criei uma procedure que é a seguinte...
...o tamanho do campo itensdesc na tabela itens é definido como 60...e qdo eu executo este comando e o lenght do edit1 é 59 a aplicação me retorna o seguinte erro :
´Generic SQL Error´
´arithmetic exception, numeric overflow, or string truncation´
como eu posso resolver este problema
PS : estou usando Interbase e bde para conectá-lo
Desde já agradeço
Lucianoiron
Posts
25/11/2005
Marcio.theis
with Query do begin close; sql.clear; sql.add(´select * from itens´); if edit1.text <> ´´ then sql.add(´where (upper(itensdesc) like ´´¬´ + uppercase(edit1.text) + ´¬´´´); open; end;
25/11/2005
Emerson Nascimento
porque?
porque o edit tem 59 posições... mais os 2 caracteres ´¬´ que você colocou na passagem do parâmetro: total de 61 caracteres, estourando a capacidade do campo, que é de 60.
sugiro que você faça uma pequena alteração na passagem do parâmetro:
with Query do begin close; sql.clear; sql.add(´select * from itens ´); if edit1.text <> ´´ then begin sql.add(´ where upper(itensdesc) like :param´); localizar := uppercase(edit1.text)+´¬´; if length(localizar) < 60 then localizar := ´¬´+localizar; Params[0].asstring := copy(localizar,1,60); end; open; end;
25/11/2005
Lucianoiron
25/11/2005
Lucianoiron
25/11/2005
Marcio.theis
with Query do begin close; sql.clear; sql.add(´select * from itens´); if edit1.text <> ´´ then begin sql.add(´where (upper(itensdesc) like :Param´); Parameters.ParamByName(´Descricao´).Value:=´¬´+uppercase(edit1.text)+´¬´; end; open; end;
25/11/2005
Lucianoiron
25/11/2005
Emerson Nascimento
quando você cria parâmetros, o dataset deve varrer sua lista de TFields ou o seu banco de dados à procura do campo referenciado no parâmetro, para poder saber o tipo do campo, o tamanho, etc, afim de poder montar a instrução correta para o banco de dados (a instrução é ´montada´ pelo dataset e só depois enviada ao banco da dados). aí está o problema: nesse caso, ele encontrou um campo com tamanho 60 e percebeu que você está passando um valor maior que 60...
mas essa é uma característica do dataset, não do SGBD (como você mesmo pôde perceber).
quando você passa a intrução como o [b:fa8795f570]/]/]@t[/b:fa8795f570] sugeriu, não há parâmetros. a instrução não precisa ser ´montada´ pelo dataset. ela será passada da forma que foi digitada e, como o banco de dados não possui aquela, digamos, limitação, a instrução é executada sem problema.
Clique aqui para fazer login e interagir na Comunidade :)