Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-03-2005
PINO72 PINO72 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Málaga - España
Posts: 40
Poder: 0
PINO72 Va por buen camino
Question 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.
Responder Con Cita
  #2  
Antiguo 20-03-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 20-03-2005
PINO72 PINO72 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Málaga - España
Posts: 40
Poder: 0
PINO72 Va por buen camino
Unhappy

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).
Responder Con Cita
  #4  
Antiguo 20-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 20-03-2005
PINO72 PINO72 is offline
Miembro
 
Registrado: oct 2004
Ubicación: Málaga - España
Posts: 40
Poder: 0
PINO72 Va por buen camino
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;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 05:09:19.


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
Copyright 1996-2007 Club Delphi