Fórum Erro de acesso a query vazia #339843

03/04/2007

0

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

Alansvieceli

Responder

Posts

03/04/2007

Briciosm

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?


Responder

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:


Responder

Gostei + 0

05/04/2007

Marcelo

Olá.

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
Caso não de certo, tente utilizando:
LEFT OUTER JOIN

Espero que ajude!

At+vr...


Responder

Gostei + 0

09/04/2007

Alansvieceli

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

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


Responder

Gostei + 0

10/04/2007

Joaoshi

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.


Responder

Gostei + 0

10/04/2007

Arc

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


Responder

Gostei + 0

13/04/2007

Alansvieceli

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.


Responder

Gostei + 0

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

Aceitar