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)
-   -   Cómo ejecuto Select en SimpleDataSet (https://www.clubdelphi.com/foros/showthread.php?t=85381)

bulc 10-03-2014 20:34:09

Cómo ejecuto Select en SimpleDataSet
 
He pensado que usar el SimpleDataSet sería más simple, pero de esto nada. Hago uso de este código y no da ni error, ni respuesta alguna
Código Delphi [-]
procedure TPictures1.BitBtn9Click(Sender: TObject);
begin
  SimpleDataSet1.DataSet.Close; //Active:=False;
  SimpleDataSet1.DataSet.CommandText:= 'Select * from WB where NUM = 50'; // 
  SimpleDataSet1.DataSet.CommandType:=ctQuery;
  SimpleDataSet1.DataSet.Open; //Active:=True;
end;
Si se pueden usar parámetros, pues mejor. He buscado por el foro y no he podido aclarar esta duda.
Muchas gracias.
PD: he añadido el Refresh y ya va. Gracias.

ecfisa 10-03-2014 22:23:30

Hola bulc.

Funciona correctamente aplicando Open/Close sobre el TSimpleDataSet en lugar de hacerlo sobre la propiedad DataSet:
Código Delphi [-]
...
  with SimpleDataSet1 do
  begin
    Close; // <-
    DataSet.CommandType:= ctQuery;
    DataSet.CommandText:= 'SELECT * FROM WB WHERE NUM = :PNUM';
    DataSet.ParamByName('PNUM').AsInteger:= StrToInt(Edit1.Text);
    Open; // <-
  end;
...

Saludos :)

bulc 11-03-2014 09:56:31

Gracias por tu contestación
 
Gracias Ecfisa
Había conseguido solucionarlo a base de tantear. Suponía que tenia que ser muy parecido al TIBQuery salvo en comando CommandType. Ahora a ver como me las apaño para hacer un M/Detail.

ecfisa 11-03-2014 19:15:42

Cita:

Empezado por bulc (Mensaje 473587)
...Ahora a ver como me las apaño para hacer un M/Detail.

Hola bulc.

Un ejemplo:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
 // TSimpeDataSet maestro
 with SDSMaster do
  begin
    Connection:= SQLConnection1;
    DataSet.CommandText:= 'SELECT * FROM MAESTRO';
    Open;
  end;
  // TSimpleDataSet detalle
  with SDSDetail do
  begin
    Connection:= SQLConnection1;  
    MasterSource:= dsMaster;
    DataSet.DataSource:= dsMaster;
    DataSet.CommandText:= 'SELECT * FROM DETALLE WHERE ID_MAESTRO = :ID';
    IndexFieldNames:= 'ID_MAESTRO';
    MasterFields:= 'ID';
    Open;
  end;
end;
Es similar a configurar una relacion master/detail en BDE y como todas las propiedades usadas son publicadas, es configurable desde el Object Inspector en tiempo de diseño.

Pero no utilizo dbExpress en mis desarrollos, por lo que te recomiendo que también revises estos enlaces:
Saludos :)

bulc 12-03-2014 20:56:11

He salido del apuro mira como...
 
Tengo tablas Orden, Familia, Especie de pájaros. He enlazado Familia con Orden y Especie con Familia mediante ISQL de Firebird. Luego me he inventado una seudo relación Maestro-Detalle. Uso el evento OnDataChange del DataSource y cada vez que se cambia de registro en Especie se recoge el FNum del CDS de Especie y se pasa al de Familia haciendo un locate. Lo mismo hago con Familia respecto a Orden. Uso componentes InterBase y DataAccess.
ClientDataSet2.Locate('Campo', ValorDePaso, []) No sé si rompo alguna ortodoxia delfina...
sobre el ClientDataSet2 que es el de Familia. No doy más detalles porque va de memoria. Me va bien pero parece un poco de pueblo. Lo que haré será seguir tus consejos. Pero vaya, funcionar, funciona.
Las órdenes no se mueven y las familias tampoco son tantas, así que eso.
Gracias egfisa, por tu valiosa ayuda.
bulc


La franja horaria es GMT +2. Ahora son las 22:25: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