例如做进销存的“进货单”,“销售单”等,C#我知道可把数据库的内容通过DataApter.fill到DataSet中来进行离线操作,然后再一次性提交更改到数据库中。 但在Delphi7中,我只知道用AdoConnectin AdoQuery 与 DataSource进行在线操作。
但现在如果要用Delphi来实现“进货单”之类的,如何实现离线操作。
我baidu有搜索了,但都说得不太明白,帮助文档是英文的又看不太清楚。
有的说是用ClientDataSet,有的说用ADODataSet,到底该用哪个如何实现
(请给一简单的段代码,包含如何把数据库的数据载入DataSet,然后如何修改并提交回数据库)
谢谢!
但现在如果要用Delphi来实现“进货单”之类的,如何实现离线操作。
我baidu有搜索了,但都说得不太明白,帮助文档是英文的又看不太清楚。
有的说是用ClientDataSet,有的说用ADODataSet,到底该用哪个如何实现
(请给一简单的段代码,包含如何把数据库的数据载入DataSet,然后如何修改并提交回数据库)
谢谢!
//获取资料
class function TWebServiceDB.ReadADOData(AData: Variant; var AdoQuery: TADOQuery): Boolean;
var
AR:_Recordset;
AStream:_Stream;
MS1:TMemoryStream;
P:Pointer;
s:string;
begin
Result := False;
if VarIsNull(AData) then
begin
Exit;
end;
try
s:='';
MS1:=TMemoryStream.Create;
try
MS1.Size:=VarArrayHighBound(AData,1)+1;
P:=VarArrayLock(AData);
try
Move(P^,MS1.Memory^,MS1.Size);
finally
VarArrayUnLock(AData);
end;
AData:=VarArrayCreate([0,MS1.Size-1],varByte);
P:=VarArrayLock(AData);
try
Move(MS1.Memory^,P^,MS1.Size);
finally
VarArrayUnLock(AData);
end;
finally
MS1.Free;
end;
AStream:=CoStream.Create;
AStream.Open(EmptyParam,adModeUnknown,adOpenStreamUnspecified, '', '');
AStream.Type_:=adTypeBinary;
AStream.Write(AData);
AR:=_Recordset(CoRecordset.Create);
AStream.Position:=0;
AR.Open(AStream,EmptyParam,adOpenUnspecified, adLockUnspecified, -1);
AdoQuery.Recordset:=ADOInt._Recordset(AR);
except
end;
end;
class function TWebServiceDB.SaveADOData(AData: TADOQuery): Variant;
var
AStream:_Stream;
begin
try
AData.CheckBrowseMode;
AStream:=CoStream.Create;
OLEVariant(AData.Recordset).Save(AStream,adPersistADTG);
AStream.Position:=0;
Result:=AStream.Read(AStream.Size);
except
end;
end;参考这个代码
而SaveADOData(AData: TADOQuery): 参数AData: TADOQuery,那么说明要更新的内容不是在内存表中,而是在AData中了吗?
我对Delphi数据操作这方面了解不多。谢谢!