易截截图软件、单文件、免安装、纯绿色、仅160KB

delphi DataSnap巢状主从表实现

服务端:添加ADOConnection,ADOQuery1,ADOQuery2。设置ADOQuery1为主表,ADOQuery2为从表。(通过  ADOQuery2.SQL.Text:= 'select * from 从表 where FKID=:主表PKID'设置)。添加DataSetProvider1和DataSetProvider2分别连接到ADOQuery1和ADOQuery2。
客户端:添加ClientDataSet1,ClientDataSet2。ClientDataSet1连接到DataSetProvider1。双击ClientDataSet1,右键Add All Field。可以看到一个TDataSetField字段。设置ClientDataSet2的DataSetField属性为ClientDataSet1中的TDataSetField列。添加DataCourse1、DataSource2分别连接到ClientDataSet1和ClientDataSet2控件。添加DBGrid1和DBGrid2分别连接到DataCourse1、DataSource2。设置ClientDataSet1.Active:= True;这时发现ClientDataSet2也自动打开。
自增列处理:假如主从表的主外键都是自增列,这时可以在服务端处理主从表关联。在DataSetProvider1中的BeforeUpdateRecord事件中添加如下代码:
procedure TForm1.DataSetProvider1BeforeUpdateRecord(Sender: TObject;
  SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
  UpdateKind: TUpdateKind; var Applied: Boolean);
begin
  if ((UpdateKind = ukInsert) and
  (SourceDS = ADOQuery2)
   {and (DeltaDS.FieldByName('PKID').Value =  Unassigned)}) then
  begin
    if DeltaDS.BOF then
    begin
      qryIdentity.Close;  //qryIdentity.Sql.Text:= 'select @@identity';获取主表自增列的最新值
      qryIdentity.Open;
    end;
    DeltaDS.FieldByName('PKID').NewValue := qryIdentity.Fields[0].Value;//赋给子表的当前行
  end;
end;
this over.


相关文档:

Delphi中用ADO连接数据库

此文适合Delphi新手阅读,特别是连接数据库方面还一懂半懂甚至根本不懂的新手;
     --------------------------但总体显得有点乱-------------------------
     本文章以Delphi 7和SQL Server 2000为例,控件名均为系统默认,如Unit1,DataModule1,Edit1,ADOCommand1,ADODataS ......

delphi中使用透明控件的几种方法

有时需要使用透明控件用于捕获鼠标消息
1.调用Windows2000,xp新的API函数实现这一功能的过程。使用SetLayeredWindowAttributes
2.直接设置控件的alphablend,alphablendvalue,间接调用上述api.
3.使用TStaticText控件
procedure WMCtrlColor(var Message: TWMCtlColor); message WM_CTLCOLOR;
procedure TForm3.WMCtr ......

Delphi 函数大全

名称 类型 说明  
abort 函数 引起放弃的意外处理  
abs 函数 绝对值函数  
addexitproc 函数 将一过程添加到运行时库的结束过程表中  
addr 函数 返回指定对象的地址  
adjustlinebreaks 函数 将给定字符串的行分隔符调整为cr/lf序列  
align 属 ......

unicode与GB2312转换等Delphi函数


{ 函数 : RESULTSTRING = HexToBin(HEXSTRING)
{ 目的 : 把十六进制字符串转换为二进制字符串
{
{===============================================================}
{ 函数 : RESULTINTEGER = HexCharToInt(HEXCHAR)
{ 目的 : 转换一个十六进制字符为整数
{==================================================== ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号