PDA

Ver la Versión Completa : Indicar Parámetro de otro DataSource en tiempo de ejecución


gluglu
22-05-2006, 14:40:55
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
Select * from TABLA2
where TABLA2_CAMPO1 = :TABLA1_CAMPO1Claro 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:
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
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
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 !