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)
-   -   Contar registros en FB (https://www.clubdelphi.com/foros/showthread.php?t=93000)

Angel.Matilla 16-04-2018 11:19:14

Contar registros en FB
 
Yo sigo con mi "batalla" personal para acrtualizar una BB.DD. en FB 2.5. Ahora me ha surgido otro problema con un código que en otros casos me ha funcionado bien y que me tiene perplejo.
Código PHP:

int nRecTot 0;
TIBTable *iTabla = new TIBTable(fMenu);
iTabla->Database Query->Database;
iTabla->Name     "iTabla";

Query->Close();
Query->SQL->Text "SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 AND RDB$RELATION_TYPE = 0 ORDER BY RDB$RELATION_NAME";
Query->Open();

for (; !
Query->EofQuery->Next())
{
     
iTabla->Close();
     
iTabla->TableName Query->FieldByName("RDB$RELATION_NAME")->AsString.Trim();
     
iTabla->Open();
     
iTabla->Last();
     
nRecTot nRecTot iTabla->RecordCount;
}
iTabla->Close();
delete iTabla;

if (
nRecTot == 0)
{
     
// Código para importar datos de otra base de datos


Como veis el código es un tontería: Miro la lista de tablas de la base de datos, abro cada una de las tablas, miro los registros que tiene y lo añado a un contador; lo he suado cientos de veces, pero no sé porqué en este caso ese contador no se actualiza. He comprobado con el depurador que ese iTbala->RecordCount sí da los registros de cada una de las tablas, pero no hace la suma.

He estado mirando si en alguna de las tablas del sistema (RDB$) se guarda el número de registros de cada tabla de la base de datos pero si la hay no he sido capaz de dar con ella.
¿Alguna idea?

Casimiro Notevi 16-04-2018 11:25:08

Lo más simple es algo así:
Código SQL [-]
Select count(*) from tabla

Angel.Matilla 16-04-2018 12:02:49

Cita:

Empezado por Casimiro Notevi (Mensaje 525696)
Lo más simple es algo así: Código SQL [-]Select count(*) from tabla

Sí, lo primero que tenía puesto era así:
Código PHP:

Auxiliar->Close();
Auxiliar->SQL->Text "SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 AND RDB$RELATION_TYPE = 0 ORDER BY RDB$RELATION_NAME";
Auxiliar->Open();

nItem 0;
for (; !
Auxiliar->EofAuxiliar->Next())
{
     
Query->Close();
     
Query->SQL->Text "SELECT COUNT(*) FROM " Auxiliar->FieldByName("RDB$RELATION_NAME")->AsString.Trim();
     
Query->Open();
     
nItem += Query->Fields->FieldByNumber(1)->AsInteger;


Pero ese nItem ¡sigue sin actualizarse!

Angel.Matilla 16-04-2018 12:13:03

Bueno. Debo estar muy espesito porque todo se solucionó definiendo una variable int a nivel del evento. Si cuando uno no está fino... :(

Luis F. Orjuela 17-04-2018 20:37:44

Mira esto que hice hace mucho pero mucho tiempo.....

http://clubdelphi.com/foros/member.php?u=342


La franja horaria es GMT +2. Ahora son las 10:36:48.

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