Fórum Erro de acesso a query vazia #339843
03/04/2007
0
Quero pegar o valor do subselect, mas da erro..
Exemplo de select
select C.CODIGO, C.CAMPO1, C.CAMPO2, (select CAMPO_SUB from TABELA2 where CODIGO = C.CODIGO) as CAMPO_SUB from TABELA1 C
o sql é esse, é simples...
Uso DBExpress do Delphi 2006 (update2) no windows 2003 server ou windows xp. Não importa..da erro em todos.
Erro:
´access violation at 0x00000000: read of address 0x00000000. Process Stoped´
estou pegando o campo desta maneira, o erro da examente nessa linha, quando eu vou pegar o valor q teria q vir na query...no D2005 funciona, mesmo se a query estiver vazia...
var wStr : string . . . wStr := trim(Qry.FieldByName(CCam.Cam).AsString); . . . .
Era isso..se alguem puder me ajudar eu agradeço...
abraços
[/code]
Alansvieceli
Curtir tópico
+ 0Posts
03/04/2007
Briciosm
mas dá uma olhada:
- Vê se o subselect não está retornando mais de um resultado. Se tiver dá erro....
- Tenta colocar tabela2.codigo = ......
- Outra coisa interessante é verificar se o erro é na query ou quando tu passa o valor para a variável.
Se o erro dá na variável, faz um teste antes então para ver se é ´´ ou null antes de armazenar na variável.
Ok?
Gostei + 0
04/04/2007
Alansvieceli
- Vê se o subselect não está retornando mais de um resultado. Se tiver dá erro....
A query não está retornando nada. Peguei o SQL da query e executei diretamente no banco de dados através do wsql e não foi retornado nenhum registro.
- Tenta colocar tabela2.codigo = ......
Vou tentar.
- Outra coisa interessante é verificar se o erro é na query ou quando tu passa o valor para a variável. Se o erro dá na variável, faz um teste antes então para ver se é ´´ ou null antes de armazenar na variável.
Estou testando se vem null através do isnull e ele diz q não é um valor nulo.
O erro acontece exatamente nessa linha....
wStr := Qry.FieldByName(campo).AsString;
Inclusive, quando eu estou depurando o programa e posiciono o cursor do mouse sobre AsString, para ver o resultado, acontece essa exceção maluca.
Isso tá me parecendo bug do Delphi2006, visto q no Delphi2005 funcionava. :cry:
Gostei + 0
05/04/2007
Marcelo
Voce pode tentar da seguinte maneira:
SELECT C.CODIGO, C.CAMPO1, C.CAMPO2, ( SELECT FIRST 1 CAMPO_SUB FROM TABELA2 WHERE CODIGO = C.CODIGO) AS CAMPO_SUB FROM TABELA1 AS C
Espero que ajude!
At+vr...
Gostei + 0
09/04/2007
Alansvieceli
o meu problema não é de SQL...é de migração de D2005 pra D2006 eu acho...pq assim
no D2005 funcionava perfeito esse problema..agora no D2006 não funciona
o erro da exatamente quando eu vou pegar um Valor Nulo no D2006
wStr := Qry.FieldByName(campo).AsString;
no D2005 quando eu fazia isso..vinha ´´, agora da um pau loko...q quando tu passa com a depuração em cima...tranca tudo...
não tem muito aver com SQL...
Gostei + 0
10/04/2007
Joaoshi
A solução foi verificar antes se a query estava vazia.
If Qry.isEmpty then
else
....
Espero ter ajudado.
Gostei + 0
10/04/2007
Arc
wStr := trim(Qry.FieldByName(CCam.Cam).AsString);
não deve ser esse o motivo do erro, mas a query não deveria encontrar o campo [b:fe3b74cf0a]CCam.Cam[/b:fe3b74cf0a] ....
Gostei + 0
13/04/2007
Alansvieceli
Valeu.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)