posts - 216,  comments - 519,  trackbacks - 0

  前面我们讲了如何使用unidac 在datasnap 的服务端访问数据库,今天大概讲一下客户端如何访问

前面做的服务器?其实这个客户端适合任何datasnap 服务端。

首先我们建一个应用,并加入一个TDatamodule.

加入TSQLConnection 控件,并选择driver 为datasnap

 

 再放置一个TSqlServerMethod,设置 sqlconnection属性。然后打开我们前面做的服务端,就可以在选择服务端的 方法名了。

 

我们现在主窗体里面调用一下这个服务器方法,代码就非常简单了。

procedure TForm1.Button1Click(Sender: TObject);
begin
  dmf.echo_m.Params[0].AsString:=edit1.Text;
  dmf.echo_m.ExecuteMethod;
  memo1.Lines.Add( dmf.echo_m.Params[1].AsString)
end;

运行效果如图

说明调用成功。

现在我们再访问我们的数据库。要访问数据库,一共需要4个控件

 

依次为

  • TSQLConnection —连接 DataSnap 服务器;
  • TsqlServerMethod — 发送请求到服务器;
  • TDataSetProvider — 绑定TClientDataSet到TSqlServerMethod到
  • TClientDataSet-这个就不用介绍了

TClientDataSet–>TDataSetProvider–>TSQLServerMethod–>TSQLConnection

前面的控件引用后面。

 好了,我们在主界面访问一下数据库。

只有一句代码。

procedure TForm1.Button2Click(Sender: TObject);
begin
 dmf.dept_ds.Active:=True;
end;

运行效果如图

下面实现明细表的显示

首先我们把明细表访问的控件再加一遍

 

 为了明细表能够与主表同步,再写一下同步代码

procedure Tdmf.DataSource1DataChange(Sender: TObject; Field: TField);
begin
  Emp_ds.Close;
  Emp_m.ParamByName('DeptNo').AsInteger := Dept_ds.FieldByName('DEPTNO').AsInteger;
  Emp_ds.Open;
end;

回到主界面,重新改一下原来的代码

procedure TForm1.btopenClick(Sender: TObject);
begin
  if not dmf.dept_ds.Active then begin
    dmf.dept_ds.Open;
    dmf.emp_m.ParamByName('DeptNo').AsInteger := dmf.dept_ds.FieldByName('DEPTNO').AsInteger;
    dmf.emp_ds.Open;
    btOpen.Caption := '关闭表';
  end
  else  begin
     dmf.emp_ds.Close;
     dmf.dept_ds.Close;
    btOpen.Caption := '打开表';
  end;
end;

运行

移动主表记录

一切就是这么简单。

具体更详细的操作及实现,可以访问 unidac 官方的文章:https://blog.devart.com/using-dac-products-in-multi-tier-db-application-development.html

 

posted on 2019-01-05 19:15 xalion 阅读(...) 评论(...) 编辑 收藏