Erro de acesso a query vazia
Faço uma seleção simples....q usa um SUBSELECT, essa seleção vem vazia..não retorna nada.
Quero pegar o valor do subselect, mas da erro..
Exemplo de select
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:
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...
Era isso..se alguem puder me ajudar eu agradeço...
abraços
[/code]
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
Curtidas 0
Respostas
Briciosm
03/04/2007
Não sei se vou conseguir te ajudar...
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?
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
Alansvieceli
03/04/2007
- 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
Marcelo
03/04/2007
Olá.
Voce pode tentar da seguinte maneira:Caso não de certo, tente utilizando:
Espero que ajude!
At+vr...
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
LEFT OUTER JOIN
Espero que ajude!
At+vr...
GOSTEI 0
Alansvieceli
03/04/2007
Assim..acho q está meio confuso esse tópico...
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
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...
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
Joaoshi
03/04/2007
Colega, não sei se ajuda, mas tive o mesmo problema no BDS2006 (funcionava no Delphi7).
A solução foi verificar antes se a query estava vazia.
If Qry.isEmpty then
else
....
Espero ter ajudado.
A solução foi verificar antes se a query estava vazia.
If Qry.isEmpty then
else
....
Espero ter ajudado.
GOSTEI 0
Arc
03/04/2007
eu to achando estranho a linha
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] ....
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
Alansvieceli
03/04/2007
A solução temporária já estou testando se a query vazia, mas queria saber mesmo se alguém do fórum sabia de algum bug ou dica sobre esse problema...
Valeu.
Valeu.
GOSTEI 0