主从表 将从表转换成SQL语句,插入可以,修改怎么办!(100)

  • 主题发起人 主题发起人 violetxh
  • 开始时间 开始时间
V

violetxh

Unregistered / Unconfirmed
GUEST, unregistred user!
关于 主从表操作(对象封装) 操作,请高手指正!//下面是部分代码unit MasterData_OP;interface uses Windows,Messages,SysUtils,Variants,Classes,DB,jpeg, DataUnit,Graphics,StrUtils,DBClient, ADODB,Provider; type TMasterData_OP=class(Tobject) private DataM:TDataM; public function GetBH():string; procedure CurrentRec(BH:string;list:Tstringlist); function FindAllPro(FindSQL:string) :OLEVariant; procedure InsertProRec(InsertSQL:string;S_BH:string;var cds:TClientDataSet); procedure UpdateProRec(UpdateSQL:string;S_BH:string;var cds:TClientDataSet); function FindDetail(BH:string):OLEVariant; procedure DeleteProRec(DeleteSQL:string); constructor create; destructor Destroy;override; end;implementation constructor TMasterData_OP.create; begin DataM:=TDataM.Create(nil); end; destructor TMasterData_OP.Destroy ; begin freeandnil(Datam); inherited; end; function TMasterData_OP.GetBH():string; var No :integer; Temp:string; adoq:Tadoquery; begin adoq:=TADOQuery.Create(nil); adoq.Connection:=DataM.con1; adoq.Close; adoq.SQL.Text:='select max(BH) from MS'; adoq.Open; Temp:=Rightstr(adoq.Fields[0].AsString,5); if Temp='' then Temp:='0000'; No:=strtoint(Temp)+1; result:=RightStr('0000'+inttostr(No),5); adoq.Free; end; function TMasterData_OP.FindAllPro(FindSQL:string) :OLEVariant; var adoq:Tadoquery; DSP:TDataSetProvider; begin DSP:=TDataSetProvider.Create(nil); adoq:=TADOQuery.Create(nil); adoq.Connection:=DataM.con1; adoq.Close; adoq.SQL.Text:=FindSQL; adoq.ExecSQL; DSP.DataSet:=adoq; Result:=DSP.Data; freeandnil(DSP); FreeAndNil(adoq); end; procedure TMasterData_OP.InsertProRec(InsertSQL:string;S_BH:string;var cds:TClientDataSet); var adoq_D,adoq:Tadoquery; Dsp:TDataSetProvider; begin adoq:=TADOQuery.Create(nil); adoq_D:=TADOQuery.Create(nil); adoq_D.Connection:=DataM.con1; adoq.Connection:=DataM.con1; DSP:=TDataSetProvider.Create(nil); //Master DataM.con1.BeginTrans; try adoq.Close; adoq.SQL.Text:=InsertSQL; adoq.ExecSQL; //Detail adoq_D.Close; adoq_D.SQL.Text:='select * from DT '; adoq_D.Open; cds.First; while not cds.Eof do begin cds.Edit; cds.FieldByName('BH').AsString:=S_BH; cds.Post; cds.Next; end; Dsp.DataSet:=adoq_D; cds.SetProvider(dsp); cds.ApplyUpdates(-1); DataM.con1.CommitTrans; MessageBox(0, '保存成功!', '提示', MB_OK + MB_ICONINFORMATION); except DataM.con1.RollbackTrans; MessageBox(0, '数据有误,没有保存!', '警告', MB_OK + MB_ICONWARNING); end; FreeAndNil(adoq); FreeAndNil(adoq_D); end; procedure TMasterData_OP.UpdateProRec(UpdateSQL:string;S_BH:string;var cds:TClientDataSet); var adoq_D,adoq:Tadoquery; Dsp:TDataSetProvider; begin adoq:=TADOQuery.Create(nil); adoq_D:=TADOQuery.Create(nil); adoq_D.Connection:=DataM.con1; adoq.Connection:=DataM.con1; DSP:=TDataSetProvider.Create(nil); //Master DataM.con1.BeginTrans; try adoq.Close; adoq.SQL.Text:=UpdateSQL; adoq.ExecSQL; //Detail adoq_D.Close; adoq_D.SQL.Text:='select * from DT '; adoq_D.Open; cds.First; while not cds.Eof do begin cds.Edit; cds.FieldByName('BH').AsString:=S_BH; cds.Post; cds.Next; end; Dsp.DataSet:=adoq_D; cds.SetProvider(dsp); cds.ApplyUpdates(-1); DataM.con1.CommitTrans; MessageBox(0, '修改成功!', '提示', MB_OK + MB_ICONINFORMATION); except DataM.con1.RollbackTrans; MessageBox(0, '数据有误,没有保存!', '警告', MB_OK + MB_ICONWARNING); end; FreeAndNil(adoq); FreeAndNil(adoq_D); end;//需要源码的请留下邮箱我一一发出!
 
学习学习~~
 
UP . . . 007vivi@163.com ths.
 
学习 louqing_2@163.com
 
辛苦辛苦!一定要注意休息。另外,也注意不要让各个邮件系统劳累,能省就省点。
 
学习了,xiaoxingliang1@163.com
 
大家可以到盒子上去下载http://www.2ccc.com/article.asp?articleid=5324
 
没看,感觉比较垃极,类里面居然有MSGBOX,这样的类估计应用不广。
 
TO:我爱PASCAL你好!加“MSGBOX”只是为了让其他人看得更清楚一点,再次声明一下“这只是一个示例程序”主要看技术性的东西!另外我在测试时发现网络忙时会出现数据丢失现象(从表通过ClientDataSet传递的数据)我想能否将从表格中读出转换成Insert 语句传递!
 
不是很懂,观望。
 
怎么没有人回答?高手们都不屑回答吗?
 
请楼主发一份给我,多谢!skandy10220@163.com
 
大家可以到盒子上去下载http://www.2ccc.com/article.asp?articleid=5324
 
后退
顶部