He estado leyendo varios tutoriales sobre DBExpress pero no acabo de entender cual es la dinámica adecuada para trabajar con estos componentes. Sobre un ejemplo de formulario de edición real voy a explicar mis dudas haber si alguien me puede echar una mano para entenderlos.
En el formulario tengo cuatro conjuntos de componentes DBExpress, compuestos cada uno por TSQLQuery, TDataSetProvider, TClientDataset y TDataSource.
Un conjunto apuntando al registro que quiero editar "Expte" y los otros 3 para rellenar 3 DBLookupComboBox (Tipo,Zona y Estado).
En el onShow del formulario cargo los combos y dependiendo de una variable Modo [ (A) Append y (M) Edit ] edito un registro. Este es el código:
Código Delphi
[-]procedure TAveriasExpteEdit.UniFormShow(Sender: TObject);
begin
CargaTipos;
CargaZonas;
CargaEstados;
cdsExpte.Close;
queryExpte.CommandText := 'select * from AVEAVEDIA where AVEDIA_CODIGO=:codigo';
cdsExpte.Params.ParamByName('codigo').AsInteger := Codigo;
cdsExpte.Open;
case Modo of
'A' : cdsExpte.Append;
'M' : cdsExpte.Edit;
end;
end;
y cargo los datos de los combos:
Código Delphi
[-]procedure TAveriasExpteEdit.CargaTipos;
begin
cdsTipo.Close;
queryTipo.CommandText := 'select AVETIP_CODIGO,AVETIP_DESCRIP,AVETIP_ACTIVO '+
'from AVEAVETIP where AVETIP_ACTIVO=1 order by AVETIP_DESCRIP';
cdsTipo.Open;
end;
Cuestiones:
1. Está bien que las operaciones de apertura y cierre se hagan sobre el ClientDataset?
2. El CommandText y la carga de parametros (cdsExpte.Params.ParamByName('codigo').AsInteger := Codigo;) debe aplicarse sobre el TSQLQuery o sobre el clientDataSet?
3. En definitiva, como de correcto es el código que he puesto arriba?:
Un saludo.