Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Indicar Parámetro de otro DataSource en tiempo de ejecución (https://www.clubdelphi.com/foros/showthread.php?t=31921)

gluglu 22-05-2006 14:40:55

Indicar Parámetro de otro DataSource en tiempo de ejecución
 
Hola compañeros,

Tengo mi sentencia Select SQL de un IBDataSet determinado sobre una tabla de Interbase 7.5

En dicha sentencia se incluye como parámetro un dato de otro DataSource
Código Delphi [-]
Select * from TABLA2
where TABLA2_CAMPO1 = :TABLA1_CAMPO1
Claro está que IBDataSet2.DataSource = DataSource1 , que dicho DataSource1 a la vez está asociado a IBDataSet1 mediante DataSource1.DataSet = IBDataSource1

Bien, lo que me pasa es que en tiempo de ejecución necesito modificar el Select SQL de IBDataSet2 para hacer otras cosas.

Mi pregunta es como poder volver a poner en tiempo de ejecución el comando SQL Select correcto para relacionarlo de nuevo con el DataSource1 ?

Si pongo en tiempo de ejecución:
Código Delphi [-]
with IBDataSet2 do begin
  SelectSQL.Clear;
  SelectSQL.Add('Select * from TABLA2');
  SelectSQL.Add('where TABLA2_CAMPO1 = :TABLA1_CAMPO1');
  Prepare;
  Open;
end;
no me funciona correctamente ya que supongo que está esperando un parámetro llamado 'TABLA1_CAMPO1', dentro de la misma sentencia SQL que acabo de poner, no ?

Entiendo yo que no puedo poner
Código Delphi [-]
with IBDataSet2 do begin
  SelectSQL.Clear;
  SelectSQL.Add('Select * from TABLA2');
  SelectSQL.Add('where TABLA2_CAMPO1 = :Txt1');
  ParamByName('Txt1').Value := IBDataSet1.TABLA1_CAMPO1;
  Prepare;
  Open;
end;
porque entonces no estaría enlazado de forma dinámica. Entiendo que de esta manera al modificarse el registro en DataSource1, no actualiza el IBDataSet2. Por lo menos yo lo he probado y no me funciona.

Por último decir que he intentado
Código Delphi [-]
with IBDataSet2 do begin
  SelectSQL.Clear;
  SelectSQL.Add('Select * from TABLA2');
  SelectSQL.Add('where TABLA2_CAMPO1 = '+':'+'TABLA1_CAMPO1');
  Prepare;
  Open;
end;
pero tampoco quiere funcionar.

Gracias por vuestra ayuda.

gluglu 22-05-2006 15:55:54

Después de llevar todo la tarde de ayer y mañana de hoy intentando solucionar el asunto anteriormente mencionado, me doy cuenta que el problema viene dado por el uso de una tabla TEMPORAL de Interbase.

Si la misma tabla que estoy utilizando es 'permanente', todo funciona perfectamente.

Y es más, y además no lo comenté en el hilo inicial que empezé ya que no lo veía como dato que aportara nada, pero el problema me surge sólo en la primera vez al abrir la tabla temporal. Si cierro el form (que es modal), con el cierre de todas las bases de datos, etc., al volver a abrirlo de nuevo, el problema desaparece.

... cosas del Delphi 2006 :o

Si alguien sabe darme alguna indicación de por donde atacar este asunto, se lo estaría muy agradecido.

Saludos !


La franja horaria es GMT +2. Ahora son las 06:38:16.

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