Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Query en FB devuelve cero registros (https://www.clubdelphi.com/foros/showthread.php?t=89058)

Angel.Matilla 18-09-2015 18:24:38

Query en FB devuelve cero registros
 
Buenas. A ver si alguien me puede ayudar. Estoy tarabjabdo con C++ 6.

Tengo un tabla en FB que cargo a partir de un ListView con este bucle:
Código:

Query1->Close();
Query1->SQL->Text = "INSERT INTO Emision (Referencia, Fecha, RefInt, PerPago, Importe, Recibos) VALUES (:Referencia, :Fecha, :RefInt, -1, :Importe, :Recibos)";

Query2->Close();
Query2->SQL->Text = "SELECT * FROM Recibos WHERE CodPrv = :CodPrv AND Referencia = :Referencia AND RefInt = :RefInt";

for (nItem = 0; nItem < Lista->Items->Count; nItem ++)
{
    if (!Lista->Items->Item[nItem]->Checked)
          continue;

    Query2->Close();
    Query2->ParamByName("CodPrv")->AsInteger    = ProvTit;
    Query2->ParamByName("Referencia")->AsString = Lista->Items->Item[nItem]->SubItems->Strings[5];
    Query2->ParamByName("RefInt")->AsString    = Lista->Items->Item[nItem]->SubItems->Strings[6];
    Query2->Open();

    Query1->Close();
    Query1->ParamByName("Referencia")->AsString = Lista->Items->Item[nItem]->SubItems->Strings[5];
    Query1->ParamByName("Fecha")->AsDateTime    = fGenRec->F_cargo->Date;
    Query1->ParamByName("RefInt")->AsString    = cRefInt;
    Query1->ParamByName("Importe")->AsFloat    = fPersona->Auxiliar->FieldByName("Importe")->AsFloat;
    Query1->ParamByName("Recibos")->AsString    = Lista->Items->Item[nItem]->SubItems->Strings[6];
    Query1->ExecSQL();
}

La carga la hace bien ya que una vez que se ejecuta el bucle que recorre el ListView la tabla tiene datos; de hecho si ejecuto este query con IBManager:
Código:

SELECT DISTINCT Referencia FROM Emision WHERE RefInt = :RefInt AND PerPago = -1
me devuelve las filas que debe (9 en la prueba que estoy haciendo). Pero si lo ejecuto desde el programa, exactamente el mismo query sobre la misma tabla, me devuelve cero filas. ¿A alguien se le ocurre por qué?

roman 18-09-2015 18:48:30

Y si cierras el programa y lo vueleves a abrir, ¿se ven los registros?

// Saludos

AgustinOrtu 18-09-2015 18:49:30

Seguramente los parametros

Proba sin parametros
Proba con parametros "hard-coded". Es decir, reemplaza los parametros de la sentencia SQL por valores estaticos dentro del string, para ver que devuelve

Casimiro Notevi 18-09-2015 19:01:35

O te has conectado a otra base de datos :)

Angel.Matilla 19-09-2015 10:04:56

Cita:

Empezado por AgustinOrtu (Mensaje 496938)
Proba sin parametros

Eso no lo he hecho. Tienes razón.
Cita:

Empezado por Casimiro Notevi (Mensaje 496939)
O te has conectado a otra base de datos :)

Si fuera así tampoco cargaría la tabla, cachondo.

Casimiro Notevi 19-09-2015 10:09:10

Cita:

Empezado por Angel.Matilla (Mensaje 496947)
Si fuera así tampoco cargaría la tabla, cachondo.

Estaba pensando en una copia de la base de datos :)

ecfisa 19-09-2015 12:47:01

Hola Angel.Matilla.
Cita:

Empezado por Angel.Matilla (Mensaje 496935)
...
La carga la hace bien ya que una vez que se ejecuta el bucle que recorre el ListView la tabla tiene datos; de hecho si ejecuto este query con IBManager:
Código:

SELECT DISTINCT Referencia FROM Emision WHERE RefInt = :RefInt AND PerPago = -1
me devuelve las filas que debe (9 en la prueba que estoy haciendo). Pero si lo ejecuto desde el programa, exactamente el mismo query sobre la misma tabla, me devuelve cero filas. ¿A alguien se le ocurre por qué?

Tratándose de la misma consulta sobre la misma tabla no tendría que suceder..., te consulto:
  • Para hacer la prueba desde C++ Builder, ¿ usas un nuevo Query para ese fin u otro de los anteriores ?
  • ¿ Podrías poner la copia fiel del código que usas desde C++ Builder ? (incluyendo los tipos de variables si parametrizas)

Saludos :)

Toni 19-09-2015 14:13:48

Hola Angel,

No termino de entender la comparacion que realizas con la consulta que haces en el IBManager, ya que en este consultas la tabla 'Emision' y en el programa esta tabla no la consultas sino que le insertas.. La que consultas es la 'Recibos'.

Aparte de esto yo probaria lo que te comentan de probar con parametros "hard-coded" y ver que sucede y tambien pondria algun codigo para verificar y mostrar que parametros estan llegando al Query2 en cada momento y ver si despues de ejecutar el Query2->Open el resultado de la operacion.

Suele ser el tipico caso de algo que damos por supuesto no se esta cumpliendo (como los parametros). Tambien comprueba si estos objetos Query los utilizas en algun otro sitio y has realizado algun cambio.....de base de datos o asi. :D

PD: Aun queda gente programando en BCB 6.....no estoy solo en el hiper espacio :eek:


La franja horaria es GMT +2. Ahora son las 20:29:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi