前面我们讲了如何使用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