PDA

Ver la Versión Completa : clientdataset no me guarda la informacion en DB


gianfranco_tont
24-02-2012, 22:04:11
Hola foro estoy trabajando con clientdataset en dbgrid: explico: el dbgrid atado al datasource, el datasource al clientdataset, el clientdatase al provider y finalmente el provider al adoquery. por alguna razon cualdo le doy al buton2 (Guardar) no me guarda la informacion que tengo el grid a la base de dato.


unit Unitajuste2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls, ComCtrls, DB, Provider, DBClient, ADODB,
Buttons, pngimage, ExtCtrls;

type
TFormajuste2 = class(TForm)
PageControl1: TPageControl;
Edit1: TEdit;
Edit2: TEdit;
DBGrid1: TDBGrid;
ADOQuery1: TADOQuery;
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
DataSetProvider1: TDataSetProvider;
ADOQuery1ajue_num: TIntegerField;
ADOQuery1reng_num: TIntegerField;
ADOQuery1art_desc: TMemoField;
ADOQuery1tipo: TStringField;
ADOQuery1co_art: TStringField;
ADOQuery1total_art: TFMTBCDField;
ADOQuery1uni_compra: TStringField;
ADOQuery1stotal_art: TFMTBCDField;
ADOQuery1suni_compr: TStringField;
ADOQuery1co_alma: TStringField;
ADOQuery1cost_unit_om: TFMTBCDField;
ADOQuery1cost_unit: TFMTBCDField;
ADOQuery1feccom: TDateTimeField;
ADOQuery1numcom: TIntegerField;
ADOQuery1uni_venta: TStringField;
ADOQuery1suni_venta: TStringField;
ADOQuery1cos_pro_un: TFMTBCDField;
ADOQuery1ult_cos_om: TFMTBCDField;
ADOQuery1cos_pro_om: TFMTBCDField;
ADOQuery1rowguid: TGuidField;
ADOQuery1total_uni: TFMTBCDField;
ADOQuery1nro_lote: TStringField;
ADOQuery1fec_lote: TDateTimeField;
ADOQuery1pendiente2: TFMTBCDField;
ADOQuery1tipo_doc2: TStringField;
ADOQuery1reng_doc2: TIntegerField;
ADOQuery1num_doc2: TIntegerField;
ADOQuery1aux01: TFMTBCDField;
ADOQuery1aux02: TStringField;
ADOQuery1mo_cant: TFMTBCDField;
ADOQuery1gf_cant: TFMTBCDField;
ADOQuery1mo_cant_om: TFMTBCDField;
ADOQuery1gf_cant_om: TFMTBCDField;
ADOQuery1produccion: TBooleanField;
ClientDataSet1ajue_num: TIntegerField;
ClientDataSet1reng_num: TIntegerField;
ClientDataSet1art_desc: TMemoField;
ClientDataSet1tipo: TStringField;
ClientDataSet1co_art: TStringField;
ClientDataSet1total_art: TFMTBCDField;
ClientDataSet1uni_compra: TStringField;
ClientDataSet1stotal_art: TFMTBCDField;
ClientDataSet1suni_compr: TStringField;
ClientDataSet1co_alma: TStringField;
ClientDataSet1cost_unit_om: TFMTBCDField;
ClientDataSet1cost_unit: TFMTBCDField;
ClientDataSet1feccom: TDateTimeField;
ClientDataSet1numcom: TIntegerField;
ClientDataSet1uni_venta: TStringField;
ClientDataSet1suni_venta: TStringField;
ClientDataSet1cos_pro_un: TFMTBCDField;
ClientDataSet1ult_cos_om: TFMTBCDField;
ClientDataSet1cos_pro_om: TFMTBCDField;
ClientDataSet1rowguid: TGuidField;
ClientDataSet1total_uni: TFMTBCDField;
ClientDataSet1nro_lote: TStringField;
ClientDataSet1fec_lote: TDateTimeField;
ClientDataSet1pendiente2: TFMTBCDField;
ClientDataSet1tipo_doc2: TStringField;
ClientDataSet1reng_doc2: TIntegerField;
ClientDataSet1num_doc2: TIntegerField;
ClientDataSet1aux01: TFMTBCDField;
ClientDataSet1aux02: TStringField;
ClientDataSet1mo_cant: TFMTBCDField;
ClientDataSet1gf_cant: TFMTBCDField;
ClientDataSet1mo_cant_om: TFMTBCDField;
ClientDataSet1gf_cant_om: TFMTBCDField;
ClientDataSet1produccion: TBooleanField;
Edit6: TEdit;
Edit5: TEdit;
Image3: TImage;
Label6: TLabel;
SpeedButton3: TSpeedButton;
Image2: TImage;
Label5: TLabel;
SpeedButton2: TSpeedButton;
Image1: TImage;
Label4: TLabel;
SpeedButton1: TSpeedButton;
ADOQuerycodajuste: TADOQuery;
ADOQuerycodajusteajue_num: TIntegerField;
ADOQuerycodajustefecha: TDateTimeField;
ADOQuerycodajustemotivo: TStringField;
ADOQuerycodajustetotal: TFMTBCDField;
ADOQuerycodajusteseriales: TIntegerField;
ADOQuerycodajustefeccom: TDateTimeField;
ADOQuerycodajustenumcom: TIntegerField;
ADOQuerycodajustetasa: TFMTBCDField;
ADOQuerycodajustemoneda: TStringField;
ADOQuerycodajustedis_cen: TMemoField;
ADOQuerycodajustecampo1: TStringField;
ADOQuerycodajustecampo2: TStringField;
ADOQuerycodajustecampo3: TStringField;
ADOQuerycodajustecampo4: TStringField;
ADOQuerycodajustecampo5: TStringField;
ADOQuerycodajustecampo6: TStringField;
ADOQuerycodajustecampo7: TStringField;
ADOQuerycodajustecampo8: TStringField;
ADOQuerycodajusteco_us_in: TStringField;
ADOQuerycodajustefe_us_in: TDateTimeField;
ADOQuerycodajusteco_us_mo: TStringField;
ADOQuerycodajustefe_us_mo: TDateTimeField;
ADOQuerycodajusteco_us_el: TStringField;
ADOQuerycodajustefe_us_el: TDateTimeField;
ADOQuerycodajusterevisado: TStringField;
ADOQuerycodajustetrasnfe: TStringField;
ADOQuerycodajusteco_sucu: TStringField;
ADOQuerycodajusterowguid: TGuidField;
ADOQuerycodajusteanulada: TBooleanField;
ADOQuerycodajusteaux01: TFMTBCDField;
ADOQuerycodajusteaux02: TStringField;
ADOQuerycodajusteproduccion: TBooleanField;
ADOQuerycodajusteimp_num: TIntegerField;
ADOQuerycodajustefact_num: TIntegerField;
ADOQuerycodart: TADOQuery;
ADOQuerycodartco_art: TStringField;
ADOQuerycodartart_des: TStringField;
ADOQuerycodartfecha_reg: TDateTimeField;
ADOQuerycodartmanj_ser: TBooleanField;
ADOQuerycodartco_lin: TStringField;
ADOQuerycodartco_cat: TStringField;
ADOQuerycodartco_subl: TStringField;
ADOQuerycodartco_color: TStringField;
ADOQuerycodartitem: TStringField;
ADOQuerycodartref: TStringField;
ADOQuerycodartmodelo: TStringField;
ADOQuerycodartprocedenci: TStringField;
ADOQuerycodartcomentario: TMemoField;
ADOQuerycodartco_prov: TStringField;
ADOQuerycodartubicacion: TStringField;
ADOQuerycodartuni_venta: TStringField;
ADOQuerycodartuni_compra: TStringField;
ADOQuerycodartuni_relac: TFMTBCDField;
ADOQuerycodartrelac_aut: TIntegerField;
ADOQuerycodartstock_act: TFMTBCDField;
ADOQuerycodartstock_com: TFMTBCDField;
ADOQuerycodartsstock_com: TFMTBCDField;
ADOQuerycodartstock_lle: TFMTBCDField;
ADOQuerycodartsstock_lle: TFMTBCDField;
ADOQuerycodartstock_des: TFMTBCDField;
ADOQuerycodartsstock_des: TFMTBCDField;
ADOQuerycodartsuni_venta: TStringField;
ADOQuerycodartsuni_compr: TStringField;
ADOQuerycodartsuni_relac: TBCDField;
ADOQuerycodartsstock_act: TFMTBCDField;
ADOQuerycodartrelac_comp: TFMTBCDField;
ADOQuerycodartrelac_vent: TFMTBCDField;
ADOQuerycodartpto_pedido: TFMTBCDField;
ADOQuerycodartstock_max: TFMTBCDField;
ADOQuerycodartstock_min: TFMTBCDField;
ADOQuerycodartprec_om: TBooleanField;
ADOQuerycodartprec_vta1: TFMTBCDField;
ADOQuerycodartfec_prec_v: TDateTimeField;
ADOQuerycodartfec_prec_2: TDateTimeField;
ADOQuerycodartprec_vta2: TFMTBCDField;
ADOQuerycodartfec_prec_3: TDateTimeField;
ADOQuerycodartprec_vta3: TFMTBCDField;
ADOQuerycodartfec_prec_4: TDateTimeField;
ADOQuerycodartprec_vta4: TFMTBCDField;
ADOQuerycodartfec_prec_5: TDateTimeField;
ADOQuerycodartprec_vta5: TFMTBCDField;
ADOQuerycodartprec_agr1: TFMTBCDField;
ADOQuerycodartprec_agr2: TFMTBCDField;
ADOQuerycodartprec_agr3: TFMTBCDField;
ADOQuerycodartprec_agr4: TFMTBCDField;
ADOQuerycodartprec_agr5: TFMTBCDField;
ADOQuerycodartcan_agr: TFMTBCDField;
ADOQuerycodartfec_des_p5: TDateTimeField;
ADOQuerycodartfec_has_p5: TDateTimeField;
ADOQuerycodartco_imp: TStringField;
ADOQuerycodartmargen_max: TBCDField;
ADOQuerycodartult_cos_un: TFMTBCDField;
ADOQuerycodartfec_ult_co: TDateTimeField;
ADOQuerycodartcos_pro_un: TFMTBCDField;
ADOQuerycodartfec_cos_pr: TDateTimeField;
ADOQuerycodartcos_merc: TFMTBCDField;
ADOQuerycodartfec_cos_me: TDateTimeField;
ADOQuerycodartcos_prov: TFMTBCDField;
ADOQuerycodartfec_cos_p2: TDateTimeField;
ADOQuerycodartult_cos_do: TFMTBCDField;
ADOQuerycodartfec_cos_do: TDateTimeField;
ADOQuerycodartcos_un_an: TFMTBCDField;
ADOQuerycodartfec_cos_an: TDateTimeField;
ADOQuerycodartult_cos_om: TFMTBCDField;
ADOQuerycodartfec_ult_om: TDateTimeField;
ADOQuerycodartcos_pro_om: TFMTBCDField;
ADOQuerycodartfec_pro_om: TDateTimeField;
ADOQuerycodarttipo_cos: TStringField;
ADOQuerycodartmont_comi: TBCDField;
ADOQuerycodartporc_cos: TBCDField;
ADOQuerycodartmont_cos: TBCDField;
ADOQuerycodartporc_gas: TBCDField;
ADOQuerycodartmont_gas: TBCDField;
ADOQuerycodartf_cost: TDateTimeField;
ADOQuerycodartfisico: TBooleanField;
ADOQuerycodartpunt_cli: TBCDField;
ADOQuerycodartpunt_pro: TBCDField;
ADOQuerycodartdias_repos: TIntegerField;
ADOQuerycodarttipo: TStringField;
ADOQuerycodartalm_prin: TStringField;
ADOQuerycodartanulado: TBooleanField;
ADOQuerycodarttipo_imp: TStringField;
ADOQuerycodartdis_cen: TMemoField;
ADOQuerycodartmon_ilc: TFMTBCDField;
ADOQuerycodartcapacidad: TBCDField;
ADOQuerycodartgrado_al: TBCDField;
ADOQuerycodarttipo_licor: TStringField;
ADOQuerycodartcompuesto: TBooleanField;
ADOQuerycodartpicture: TBlobField;
ADOQuerycodartcodigo1: TStringField;
ADOQuerycodartcodigo2: TStringField;
ADOQuerycodartcodigo3: TStringField;
ADOQuerycodartcodigo4: TStringField;
ADOQuerycodartcodigo5: TStringField;
ADOQuerycodartcodigo6: TStringField;
ADOQuerycodartcodigo7: TStringField;
ADOQuerycodartcodigo8: TStringField;
ADOQuerycodartco_us_in: TStringField;
ADOQuerycodartfe_us_in: TDateTimeField;
ADOQuerycodartco_us_mo: TStringField;
ADOQuerycodartfe_us_mo: TDateTimeField;
ADOQuerycodartco_us_el: TStringField;
ADOQuerycodartfe_us_el: TDateTimeField;
ADOQuerycodartrevisado: TStringField;
ADOQuerycodarttrasnfe: TStringField;
ADOQuerycodartco_sucu: TStringField;
ADOQuerycodartrowguid: TGuidField;
ADOQuerycodarttuni_venta: TStringField;
ADOQuerycodartequi_uni1: TFMTBCDField;
ADOQuerycodartequi_uni2: TFMTBCDField;
ADOQuerycodartequi_uni3: TFMTBCDField;
ADOQuerycodartlote: TBooleanField;
ADOQuerycodartserialp: TStringField;
ADOQuerycodartvalido: TBooleanField;
ADOQuerycodartatributo1: TBooleanField;
ADOQuerycodartvatributo1: TStringField;
ADOQuerycodartatributo2: TBooleanField;
ADOQuerycodartvatributo2: TStringField;
ADOQuerycodartatributo3: TBooleanField;
ADOQuerycodartvatributo3: TStringField;
ADOQuerycodartatributo4: TBooleanField;
ADOQuerycodartvatributo4: TStringField;
ADOQuerycodartatributo5: TBooleanField;
ADOQuerycodartvatributo5: TStringField;
ADOQuerycodartatributo6: TBooleanField;
ADOQuerycodartvatributo6: TStringField;
ADOQuerycodartgarantia: TStringField;
ADOQuerycodartpeso: TFMTBCDField;
ADOQuerycodartpie: TFMTBCDField;
ADOQuerycodartmargen1: TBCDField;
ADOQuerycodartmargen2: TBCDField;
ADOQuerycodartmargen3: TBCDField;
ADOQuerycodartmargen4: TBCDField;
ADOQuerycodartmargen5: TBCDField;
ADOQuerycodartrow_id: TBytesField;
ADOQuerycodartimagen1: TStringField;
ADOQuerycodartimagen2: TStringField;
ADOQuerycodarti_art_des: TStringField;
ADOQuerycodartuni_emp: TStringField;
ADOQuerycodartrel_emp: TFMTBCDField;
ADOQuerycodartmovil: TBooleanField;
ADOQuerycodarttot_costo: TFMTBCDField;
ClientDataSet1total: TFloatField;
procedure DBGrid1EditButtonClick(Sender: TObject);
procedure DBGrid1KeyPress(Sender: TObject; var Key: Char);
procedure ClientDataSet1CalcFields(DataSet: TDataSet);
procedure ClientDataSet1NewRecord(DataSet: TDataSet);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Formajuste2: TFormajuste2;
Lin: Integer;

implementation
uses unit1, unitconsultatipoaju, UNITSELECTPROD, UNITLISTAJU;

{$R *.dfm}

procedure TFormajuste2.ClientDataSet1CalcFields(DataSet: TDataSet);
begin
ClientDataSet1.FieldByName('Total').AsFloat:=
ClientDataSet1.FieldByName('cost_unit').AsFloat *
ClientDataSet1.FieldByName('total_art').AsInteger;
end;

procedure TFormajuste2.ClientDataSet1NewRecord(DataSet: TDataSet);
begin
inc(lin);
ClientDataSet1reng_num.asfloat := Lin;//ClientDataSet1.RecordCount;
end;

procedure TFormajuste2.DBGrid1EditButtonClick(Sender: TObject);
begin
if dbgrid1.selectedindex = 0 then
begin
ClientDataSet1reng_num.Value := DBGrid1.DataSource.DataSet.RecordCount;
end;
if Dbgrid1.SelectedIndex = 1 then
begin
Application.CreateForm(TFormconsultatipoaju, Formconsultatipoaju);
if Formconsultatipoaju.ShowModal = mrOk then
begin
if ClientDataSet1.State in [dsEdit, dsInsert] then
else
ClientDataSet1.Edit;
ClientDataSet1tipo.AsString := Formconsultatipoaju.ADOQuery1co_tipo.AsString;
Edit6.Text := Formconsultatipoaju.ADOQuery1des_tipo.AsString;
dbgrid1.selectedIndex := 3;
end;
begin
if Dbgrid1.SelectedIndex = 3 then
begin
Application.CreateForm(TFormselectprod, Formselectprod);
if Formselectprod.ShowModal = mrOk then
begin
if ClientDataSet1.State in [dsEdit, dsInsert] then
else
ClientDataSet1.Edit;
ClientDataSet1cost_unit.AsString := FormSelectProd.ADOQuery1cos_pro_un.AsString;
ClientDataSet1co_art.AsString := Formselectprod.ADOQuery1co_art.AsString;
ClientDataSet1uni_venta.AsString := FormSelectProd.ADOQuery1uni_venta.asstring;
Edit5.Text := FormSelectProd.ADOQuery1art_des.AsString;
if ClientDataSet1tipo.AsString = 'CP' then
dbgrid1.SelectedIndex := 6
else
dbgrid1.SelectedIndex := 4;
end;
end;
end;
end;
end;
procedure TFormajuste2.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
if Dbgrid1.SelectedIndex = 0 then
Dbgrid1.SelectedIndex := 1
else if Dbgrid1.SelectedIndex = 1 then
Dbgrid1.SelectedIndex := 2
else if Dbgrid1.SelectedIndex = 2 then
Dbgrid1.SelectedIndex := 3
else if Dbgrid1.SelectedIndex = 3 then
Dbgrid1.SelectedIndex := 4
else if Dbgrid1.SelectedIndex = 4 then
Dbgrid1.SelectedIndex := 6
else if Dbgrid1.SelectedIndex = 6 then
begin
Dbgrid1.SelectedIndex := 1;
ClientDataSet1.Append;
end;
end;
end;

procedure TFormajuste2.SpeedButton1Click(Sender: TObject);
begin
ClientDataSet1.ApplyUpdates( 0 );
end;

end.


Agradeceria su ayuda

Al González
24-02-2012, 23:18:14
Hola.

Creo que para ir descartando podrías verificar cuál es el valor de la propiedad ClientDataSet1.ChangeCount justo antes de hacer el ApplyUpdates.

gianfranco_tont
24-02-2012, 23:23:02
ya los hice y tampoco

procedure TFormajuste2.SpeedButton1Click(Sender: TObject);
begin
if ClientDataSet1.ChangeCount > 0 then
begin
ClientDataSet1.ApplyUpdates( 0 );
end;
end;

Al González
24-02-2012, 23:45:58
Podrías usar el depurador, colocando un punto de ruptura en la primera sentencia del método SpeedButton1Click.

O algo más rudimentario como:

procedure TFormajuste2.SpeedButton1Click(Sender: TObject);
begin
ShowMessage (IntToStr (ClientDataSet1.ChangeCount));
ClientDataSet1.ApplyUpdates( 0 );
end;

Sólo si ChangeCount es > 0 es que realmente hay algo que enviar a la base de datos. :)

gianfranco_tont
24-02-2012, 23:48:46
el resultado es 1:eek:

Al González
24-02-2012, 23:59:14
Muy bien, ya descartaste una causa. :)

Ahora unas preguntas de mayor profundidad:

¿A qué motor de base de datos se conecta ADOQuery1? (algo que ayuda mucho mencionar en cualquier consulta en los foros).

¿Qué valor tiene en el inspector de objetos la propiedad ResolveToDataSet del componente DataSetProvider1?

¿De qué manera estás comprobando que la información realmente no se guarda en la base de datos? (algo que también es importante mencionar de un inicio).

Esperamos tus tres respuestas.

roman
25-02-2012, 00:03:10
Yo añado esta pregunta:

¿Qué valor tienen las propiedades LockType y CursorType del ADOQuery?

// Saludos

gianfranco_tont
25-02-2012, 00:12:13
Muy bien, ya descartaste una causa. :)

Ahora unas preguntas de mayor profundidad:

¿A qué motor de base de datos se conecta ADOQuery1? (algo que ayuda mucho mencionar en cualquier consulta en los foros).

¿Qué valor tiene en el inspector de objetos la propiedad ResolveToDataSet del componente DataSetProvider1?

¿De qué manera estás comprobando que la información realmente no se guarda en la base de datos? (algo que también es importante mencionar de un inicio).

Esperamos tus tres respuestas.

1. El motor de Base de datos es SQL SERVER 2008.
2. False
3. entro en Manager estudio del SQL busco la tabla y le doy un select * from det_ajuste y no me aparece nada en apsoluto.

gianfranco_tont
25-02-2012, 00:13:49
Yo añado esta pregunta:

¿Qué valor tienen las propiedades LockType y CursorType del ADOQuery?

// Saludos
el cursor type esta en ctKeyset
y el locktipe esta en ltOptimistic

Al González
25-02-2012, 00:41:11
Gracias por responder. :)

Me suena a que esté faltando confirmar la transacción.

Es decir, puede que los datos sí sean enviados a la base de datos, pero que falte hacer el "commit". Con ello los nuevos registros existirán también para otras conexiones / programas. Mientras no se confirme la transacción, los demás procesos no pueden ver esos registros.

¿Usas un componente TADOConnection o la propiedad ConnectionString del componente ADOQuery1?

Agrego: Por cierto, ¿en qué versión de Delphi? (otro dato básico)

gianfranco_tont
25-02-2012, 00:48:44
Gracias por responder. :)

Me suena a que esté faltando confirmar la transacción.

Es decir, puede que los datos sí sean enviados a la base de datos, pero que falte hacer el "commit". Con ello los nuevos registros existirán también para otras conexiones / programas. Mientras no se confirme la transacción, los demás procesos no pueden ver esos registros.

¿Usas un componente TADOConnection o la propiedad ConnectionString del componente ADOQuery1?

Agrego: Por cierto, ¿en qué versión de Delphi? (otro dato básico)

Tadoconections y estoy usando delphi 209

Al González
25-02-2012, 00:59:20
OK, tengo mucho tiempo de no usar ADO (para MS SQL Server yo emplearía mejor dbExpress, pero eso podría tratarse en otro tema).

Después de hacer el ApplyUpdates, coloca la sentencia: conexión.CommitTrans; Donde "conexión" sería el objeto TADOConnection que estás usando.

Estando en eso, sería útil revisar qué valor trae la propiedad de tipo Boolean InTransaction de ese objeto conexión, justo después del ApplyUpdates y antes del CommitTrans.