Generic SQL Error

24/11/2005

0

Olá pessoal tudo bem com vcs?...
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...

with Query do begin close; sql.clear; sql.add(´select * from itens ´); if edit1.text <> ´´ then begin sql.add(´ where (upper(itensdesc) like :param)´); Params[0].asstring:=´¬´+uppercase(edit1.text)+´¬´; end; open; end;


...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

Lucianoiron

Responder

Posts

25/11/2005

Marcio.theis

Tente o seguinte:

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;



Responder

25/11/2005

Emerson Nascimento

esse erro acontece se você preencher pelo menos 59 posições do edit.
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;



Responder

25/11/2005

Lucianoiron

/]/]@t e emerson.en valeu pelas respostas....eu modifiquei o código a partir da dica do /]/]@t e funcionou perfeitamente...valeu ae moçada


Responder

25/11/2005

Lucianoiron

depois de ter alterado o código eu estive pensando...tem lógica isso?...funcionar sem problemas não usando o parametro e dar pau quando uso o parametro...depois da aleteração eu posso digitar mais que 60 caracteres na edit que ele não da pau se algumar santa alma puder me explicar isso eu agradeço ou sera que existe alguma forma de aumentar a a capacidade do parametro eu tentei setar a propriedade size do param com 70 por exemplo e não funcionou...isso está me entrigando hehehehehehe :roll: :roll: :? :? :P :P


Responder

25/11/2005

Marcio.theis

Passando parâmetros tente desta forma:

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;



Responder

25/11/2005

Lucianoiron

cara infelizmente não funcionou...mas eu agradeço mesmo assim...valeu


Responder

25/11/2005

Emerson Nascimento

tentando explicar sua intriga...

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.


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar