PDA

Ver la Versión Completa : GetTableNames de dbExpress falla en Delphi 2007 ?


rolandoj
02-09-2013, 15:37:24
Hola a todos,

Estoy intentabdo pasar a dbExpress una herramienta para administrar tablas de Bases de Datos, la cual hice hace años con BDE; pero, cuandi intento ejecutar ek método GetTableNames de dbExpress este me saca un access violation.

Primero los pongo en contexto.

La herramienta que hice con BDE trabaja en general perfectamente bien; se me conecta a múltiples motores de bases de datos, y entre otras muchas cosas me permite importar archivos de texto y copiar tablas entre motores diferentes. Sin embargo, me he topado con un problema : En el BDE no estoy pudiendo trabajar bien con campos BCD; concretamente resulta que en mis nuevas aplicaciones la mayoría de las tablas usan campos DECIMAL(18,2).

Cuando empecé a hacer esas aplicaciones, principalmente por ese detalle, migré a dbExpress y traté de migrar también la herramienta; pero, no pude por lo de GetTableNames. En ese entonces por falta de tiempo no investigué más. Ahora, se me volvió crítico lo de poder pasar información entre tablas de múltiples motores de Bases de Datos; pero, sobre todo de Firebird que es el motor que más uso.

Por lo tanto necesito una de dos cosas : O poder usar GetTableNames con dbExpress o conseguir una herramienta que sea capaz de pasar tablas entre bases de datos; pero con dos condiciones :

1. Que soporte campos DECIMAL(18,2)
2. Que trabaje vía Web

GetTableNames lo estoy usando en Delphi 2007 y las pruebas con Firebird 2.0.3

El segmento de código es :


Function TdmConexiones.LeeNombresDeTablas:String;
Var
TheList: TStringList;
Begin
TheList := Nil;
Try
TheList := TStringList.Create;
MiDB.TableScope := [tsTable];
MiDB.GetTableNames(TheList);
LeeNombresDeTablas := TheList.Text;
Finally
TheList.Free;
End;
End;


Vale anotar que el componente MiDB ya a abierto la conexión a la base de datos y llega a ese punto (verificado con depurador), sin problemas; así que el access violation no es por ahí.

Lei en alguna parte, con otro motor de Base de Datos, que hay que agregarle un parámetro más a GetTableNames porque está sobrecargado y que ese parámetro es el nombre del esquema. Si es eso, cual sería ese parámetro para el caso de Firebird ?

ecfisa
03-09-2013, 19:25:17
Hola rolandoj.

No he usado Delphi 2007, pero encontré esta referencia que tal vez te podría servir: GetTableName not being called in Delphi 2007 (http://www.borlandtalk.com/gettablename-not-being-called-in-delphi-2007-vt112098.html)

Saludos. :)

fjcg02
04-09-2013, 13:36:36
Buenas,
no sé si te valdrá, pero yo en Delphi 7 utilizo esto, que funciona a la perfección.

Un saludo

tablas:= TStringList.Create;
SQLConnection1.Connected:= True;

// tablas de la bbdd
SQLConnection1.GetTableNames(tablas,false);
ListBox1.Items.Assign(tablas);

// tablas del sistema
SQLConnection1.GetTableNames(tablas,true);
ListBox2.Items.Assign(tablas);

// Procedimientos
SQLConnection1.GetProcedureNames(tablas);
ListBox5.Items.Assign(tablas);


tablas.Free;

rolandoj
09-09-2013, 02:17:08
Hola a todos,

Ante todo, una gran disculpa por la demora en contestar. Recientemente cambié de cliente de correo y como no estoy acostumbrado al nuevo no me percaté del aviso de ClubDelphi de que ya habían contestado mi pregunta.

Ahora, fjcg02, tú usas lo mismo que yo. Eso ya lo había probado porque el méyodo está sobrecargado y acepta diversas combinaciones de parámetros; así que probé a ver si trabajab con alguna combinación. De hecho, según el código fuente, False es el default si ese parámetro SystemTables no se especifica (como el ejemplo que puse)

ecfisa, el enlace que pones es a un problema diferente; pero, me dió una idea. Revié y no encontré llamadas a GetTableNames de dbX en los fuentes de Delphi 2007. Las llamadas que existen corresponden a las versiones de GetTableNames en ADO, BDE e IBX. Por qué ?. Es raro. Entonces como recupera el propio dbx los nombres de las tablas y los campos cuando está en modo de diseño ?. Será que GetTableNames tiene errores y están usando otro método. ?

Cambio entonces la pregunta : Alguién ha usado GetTableNames de dbx con Delphi 2007 ?

Bueno, y hay que agregar, si le funcionó, con cual Update de Delphi 2007 ?

Agradezco mucho si alguién puede confirmar esto.