TClientDataSet,TDataSetProvider,TADODataSet; 1、TClientDataSet 的ProviderName属性选择TDataSetProvider;TDataSetProvider的DataSet属性选择TAdoDataSet 2、写一个通用的GetDataSet,与UpdateDataSet的函数 function TDBAccessADO.GetDataSet(SQLCommand:string;DataSet:TClientDataSet): Integer; begin try adoconnection1.Connected:=false; adoconnection1.Connected:=true; clientdataset1.Active:=false; clientdataset1.CommandText:=SQLCommand; clientdataset1.Active:=true; DataSet.Data:=ClientDataSet1.Data; clientdataset1.Active:=false; result:=S_OK; except result:=S_False; end; end; function TDBAccessADO.UpdateDataSet(SQLCommand:string;TableName:String; DataSet:TClientDataSet;NotUpField:Array of string): Integer; var ErrorCount:integer; int1,int2:integer; begin if DataSet=nil then begin result:=S_False; exit; end; if DataSet.ChangeCount=0 then begin result:=0; exit; end; try adoconnection1.Connected:=false; adoconnection1.Connected:=true; except result:=S_False; exit; end; //FNotUpdateField int1:=length(NotUpField); if int1<>0 then begin setlength(FNotUpDateField,int1); int2:=0; for int1:=low(NotUpField) to high(notUpField) do begin FNotUpdateField[int2]:=NotUpField[int1]; inc(int2); end; end; try adodataset1.CommandText:=SQLCommand; clientDataset1.Data:=dataset.Delta; DataSetProvider1.ApplyUpdates(clientdataset1.Data,0,errorcount); if errorcount=0 then dataset.MergeChangeLog; result:=errorcount; except result:=S_False; end; end;
1、TClientDataSet 的ProviderName属性选择TDataSetProvider;TDataSetProvider的DataSet属性选择TAdoDataSet
2、写一个通用的GetDataSet,与UpdateDataSet的函数
function TDBAccessADO.GetDataSet(SQLCommand:string;DataSet:TClientDataSet):
Integer;
begin
try
adoconnection1.Connected:=false;
adoconnection1.Connected:=true;
clientdataset1.Active:=false;
clientdataset1.CommandText:=SQLCommand;
clientdataset1.Active:=true;
DataSet.Data:=ClientDataSet1.Data;
clientdataset1.Active:=false;
result:=S_OK;
except
result:=S_False;
end;
end;
function TDBAccessADO.UpdateDataSet(SQLCommand:string;TableName:String;
DataSet:TClientDataSet;NotUpField:Array of string): Integer;
var
ErrorCount:integer;
int1,int2:integer;
begin
if DataSet=nil then
begin
result:=S_False;
exit;
end;
if DataSet.ChangeCount=0 then
begin
result:=0;
exit;
end;
try
adoconnection1.Connected:=false;
adoconnection1.Connected:=true;
except
result:=S_False;
exit;
end; //FNotUpdateField
int1:=length(NotUpField);
if int1<>0 then
begin
setlength(FNotUpDateField,int1);
int2:=0;
for int1:=low(NotUpField) to high(notUpField) do
begin
FNotUpdateField[int2]:=NotUpField[int1];
inc(int2);
end;
end; try
adodataset1.CommandText:=SQLCommand;
clientDataset1.Data:=dataset.Delta;
DataSetProvider1.ApplyUpdates(clientdataset1.Data,0,errorcount);
if errorcount=0 then
dataset.MergeChangeLog;
result:=errorcount;
except
result:=S_False;
end;
end;
〉〉2、写一个通用的GetDataSet,与UpdateDataSet的函数我是把他们放到一个data module中静态配置好getdataset 是把这部分工作提取出来,封装的一个函数
不更新的字段,如果全部更新你输入[]就可以了
begin
try
dsp_tmp.DataSet := dm.qry_tmp;
cds_tmp.Active := False;
cds_tmp.CommandText := SQLCommand;
cds_tmp.Open;
DataSet.Data := cds_tmp.Data;
cds_tmp.Active := False;
dsp_tmp.DataSet := nil;
Result := True;
except
Result := False;
end;
end;按照你说的作了,但是没反应,clientdataset里面是空的,没数据.
begin
//tbl_saleshiph.Open;
//tbl_saleshipd.Open;
qry_saleshiph.Open;
qry_saleshipd.Open;
cds_saleshiph.Open;
cds_saleshipd.Open;
//ds_saleshiph.DataSet.Append;
GetDataSet('select * from TSaleShipH',cds_saleshiph);
GetDataSet('select * from TSaleShipD',cds_saleshipd);
end;这样调用的
adodataset
clientdataset
dataprovider
datasource
dbgridadoconnection连接数据库
adodataset连接adoconnection后commadntext选择一个table然后active设置为true
dataprovider的dataset属性选择adodataset
clientdataset的providername选择dataprovider然后active设置为true
datasource的dataset属性选择clientdataset
datagrid的datasource属性选择datasource