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)
-   -   Asignar como parámetro el nombre de la tabla (https://www.clubdelphi.com/foros/showthread.php?t=19630)

PINO72 20-03-2005 18:21:54

Asignar como parámetro el nombre de la tabla
 
Buenas.
El problema es:

Utilizo dos tablas con la misma estructura y distinto nombre dentro de mi base de datos (Interbase 7.1).
Cuando coloco un IBDataset en el formulario e intento asignar en tiempo de ejecución el nombre de la tabla que quiero utilizar, me dá un error EIBInterbase = 'DYNAMIC SQL ERROR'.

Código:
...
IBDataSet1.SelectSQL.('SELECT * FROM :TABLA');
IBDataSet1.ParamByName('TABLA').AsString:= 'DATOSP'
IbDataSet1.Open;
y el error es 'TOKEN UNKNOWN - LINE 1, CHAR 14 ?'.'

Ya he utilizado parametros para los valores de los campos si ningun problema.
Tambien he utilizado comillas para el nombre de la tabla pero tampoco funciona.

marcoszorrilla 20-03-2005 18:42:44

Prueba esto:
Código Delphi [-]
 procedure TForm1.Button1Click(Sender: TObject);
 var
 MiTabla:String;
 begin
 MiTabla:='Employee';
 IbDataset1.Close;
 IbDataset1.SelectSQL.Clear;
 IbDataset1.SelectSQL.Add('select * from '+ MiTabla);
 IbDataset1.Open;
 end;

Un Saludo.

PINO72 20-03-2005 18:57:05

Gracias por contestar Marcos:
Esta opción no la he utlizado porque me parece poco efectiva.
Ten en cuenta que el IBDataset está cargado con las SQl necesarias para las actualizaciones de los registros (ModifySQL, DeleteSQL, RefreshSQL) y en todas ellas necesito insertar el nombre de la tabla en tiempo de ejecución, evitando la duplicación del formulario para gestionar las dos tablas.

El problema viene en que el nombre de la tabla está ubicado en todas las sentencias SQL de el IBDataset (Como ya sabes).

Lepe 20-03-2005 19:43:38

No entiendo por qué dices que es poco efectiva.

Otra forma, que basicamente es lo mismo, puede ser esto:
Código Delphi [-]
const selecciona = 'select * from %s '
const Modifica = 'update %s from %s where %s'

begin
 IbDataset1.Close;
 IbDataset1.SelectSQL.Clear;
 IbDataset1.SelectSQL.Add(format(selecciona, 'MiTabla'));
 IbDataset1.Open;
end;

De hecho, en modo diseño podrás poner una sql estática para ver campos persistentes o con otra finalidad, pero en ejecución cambiar las SQL por las que tienes en las constantes.

Un saludo

PINO72 20-03-2005 20:00:11

Parametros para nombre de tablas
 
Gracias por contestar:

En la ayuda de Interbase ya he leido que nunca se pueden utilizar parámetros para definir nombres de tablas en las consultas del IBDataset.

Ahora bien, lo de utilizar constantes con formateo lo voy a probar .. no se me había ocurrido .. aunque ya estaba pensando en utlizar alguna función que sustituyera en las strings de las sentencias SQL la ocurrencia *TABLA* por la que me interesara.

como ejemplo:
For x ...
CambiarPor (SelectSQL.Strings[x], '*TABLA*', cNuevoNombreTabla);
end;


La franja horaria es GMT +2. Ahora son las 00:07:38.

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