Fórum TDBXReader e NULL #419603
09/07/2012
0
Estou com um probleminha aqui que nao sei se é um BUG do TDBXREADER ou alguma falha minha:
Tenho uma consulta que retorna o seguinte:
ID IDPAC
24 NULL
26 NULL
27 4994
28 NULL
29 NULL
Mas quando executo essa consulta usando um TDBXReader, os resultados que ele me traz sao os seguintes:
ID IDPAC
24 NULL
26 NULL
27 4994
28 4994
29 4994
É como se ele não limpasse o buffer a cada campo lido, então, no proximo campo, se determinado valor for nulo ele mantem o valor lido anteriormente.
Estou lendo os dados dessa forma:
While DBXREADER.NEXT BEGIN id := dbxreader.Value[idagenda].AsString idpac := dbxreader.Value[idpac].asint32); END
Alguem tem ideia do que pode ser isso?
Cleidson Silva
Curtir tópico
+ 0Posts
09/07/2012
Cleidson Silva
Se eu fizer um teste do tipo:
dbxreader.Value[idpac].isnull
Ele retorna true para esses dois ultimos registros.
Eu sei que posso resolver isso facilmente se colocar na instrucao sql algo do tipo:
select coalesce(idpac,0)
Mas isso é algo sério, que pode gerar resultados desastrosos em uma consulta.
Gostei + 0
09/07/2012
Marco Salles
idpac := dbxreader.Value[idpac].asinteger);
estou falando isto porque estou com um problema issoluvel na multiplocação de dois valores do tipo int64 e o resultado
fica negativo quando os valores utilizados estão dentro da faixa permitido para este Type
[]sds
Gostei + 0
09/07/2012
Cleidson Silva
Já tentei isso mas o erro persiste.
Tentei inclusive, executar e chegar o resultado no proprio server e o resultado continua o mesmo. Estou achando que isso pode ser um BUG do DBEXPRESS.
Só funciona direito quando retorno a consulta através de uma TSQLQUERY.
Mas ainda não sei como executar uma SQLQUERY no cliente, usando a conexao ao banco que está no servidor.
Alguma dica quanto a isso?
Gostei + 0
09/07/2012
Deivison Melo
Digamos que vc faz uma instrução sql e deseja ordenar os valores consultados, mas o campo que armazena os valores
númericos é um campo alphanúmerico então sua ordenação ficaria:
Instrução SQL:
select codigo from pedidos
order by codigo
1
10
2
20
3
30
ao invés de
1
2
3
10
20
30
Isso devido ao campo código ter seu tipo varchar(nvarchar) ao invés de ser um number ou integer (int no seu caso). Pois quando guardamos os valores númericos em campos alphanumericos e mandamos ordenar eles ficaram ordenados dessa forma. O que estou achando que ocorreu com seu código, quando falo isso estou me referindo ao âmbito de sistema e não de banco. Vc deveria utilizar tratar como número e não como cadeia de caracteres (como o amigo acima já sugeriu).
Bom, espero ter ajudado, qualquer coisa estou por aqui!
Gostei + 0
09/07/2012
Cleidson Silva
Como eu disse acima, mesmo tratando como asInteger dá na o mesmo erro.
Só da certo se uso um TSQLQUERY ao inves do DBXREADER.
Gostei + 0
09/07/2012
Deivison Melo
Gostei + 0
09/07/2012
Cleidson Silva
Não é o coalesce que é catastrófico.
Eu disse no sentido de usar o coalesce para resolver esse problema aqui e deixar outras consultas por conta do dbxreader, correndo o risco dele retornar esses dados inválidos como está fazendo agora.
Imagine se ele trouxer um valor qualquer pra cada vez que tiver um valor null num campo.
Gostei + 0
09/07/2012
Deivison Melo
Gostei + 0
09/07/2012
Cleidson Silva
Gostei + 0
09/07/2012
Deivison Melo
Qualquer coisa estou por aqui! Para me chamar basta perguntar no forum!!
Abração!!
Gostei + 0
11/07/2012
Marco Salles
dá para fazer isto ?? coisa simples
Gostei + 0
11/07/2012
Deivison Melo
Faça isso que a pessoa que conseguir mais rápido disponibilidade para ajudar, tenha certeza que vai ajudar!
Gostei + 0
11/07/2012
Cleidson Silva
Está ai o exemplo:
https://dl.dropbox.com/u/24767444/DBXREADER2.zip
Gostei + 0
11/07/2012
Cauê Nishijima
Abraços
Cauê Nishijima
Gostei + 0
12/07/2012
Marco Salles
Recebeu ???
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)