PDA

Ver la Versión Completa : Contar registros en FB


Angel.Matilla
16-04-2018, 10:19:14
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.
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->Eof; Query->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, 10:25:08
Lo más simple es algo así: Select count(*) from tabla

Angel.Matilla
16-04-2018, 11:02:49
Lo más simple es algo así: Código SQL [-] (http://www.clubdelphi.com/foros/#)Select count(*) from tabla


Sí, lo primero que tenía puesto era así:
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->Eof; Auxiliar->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, 11: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, 19:37:44
Mira esto que hice hace mucho pero mucho tiempo.....

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