學習李維的datasnap開發一書,其中有一例子如下:
服務器端,定義要輸出的類及方法如下:
type
{$MethodInfo ON}
TEmployeeVO=class(Tcomponent)
private
Femployees: TObjectList<Temployee>;
// function createEmployeeJsonObject(employee:Temployee):string;
// function createEmployeeJsonArray:string;
function createEmployeeJsonObjectJ(employee:Temployee):TJsonobject;
public
function getEmployeeJ(const sName:string):Tjsonobject;
function getAllEmployeesJ:Tjsonarray;
procedure addEmployee(const sName:string;const sEmail:string;const sPhone:string);
end;
{$MethodInfo OFF}
其中getemployeeJ方法的實作如下:
function TEmployeeVO.getEmployeeJ(const sName: string): Tjsonobject;
var
ie:Tlist<Temployee>.TEnumerator;
employee:Temployee;
begin
result:=nil;
ie:=Femployees.GetEnumerator;
while (ie.MoveNext) do
begin
employee:=ie.Current;
if employee.Name=sName then
begin
result:=createEmployeeJsonObjectJ(employee);
break;
end;
end;
end;
function TEmployeeVO.createEmployeeJsonObjectJ(
employee: Temployee): TJsonobject;
var
ajo:Tjsonobject;
begin
ajo:=Tjsonobject.Create;
ajo.AddPair('姓名',employee.Name);
ajo.AddPair('郵箱',employee.Email);
ajo.AddPair('電話',employee.Phone);
result:=ajo;
end;
——————————————————————————————————————————————
客戶端的有新增員工,查詢員工按鈕。新增功能沒報錯,查詢總出錯,代碼如下:
procedure TForm2.Button2Click(Sender: TObject);
var evo:TEmployeeVOClient;
jo:Tjsonobject;
employee:Temployee;
begin
evo:= TEmployeeVOClient.Create(self.SQLConnection1.DBXConnection);
jo:=evo.getEmployeeJ(edit4.Text);
if jo<>nil then
begin
employee:=Temployee.create(jo.Get(0).jsonvalue.value,
jo.Get(1).jsonvalue.value,jo.Get(2).jsonvalue.value);
edit5.Text:=employee.Email;
edit6.Text:=employee.Phone;
freeandnil(jo);
end ;
freeandnil(employee);
evo.Free;
end;
問題:
1.在客戶端運行時,我先不增加員工,直接點查詢員工,程式運行到jo:=evo.getEmployeeJ(edit4.Text);報錯,我想是getEmployeeJ的回傳值為nil導致的,怎么改呢?另外getEmployeeJ回傳的是tjsonobject,相當于指標吧,可是客戶端和服務器不在一個記憶體空間中,給客戶端傳指標有什么意義呢?
2.如果添加員工后再查詢,按f8執行,除錯資訊顯示能取得查詢資料,可執行到end。但是并沒有完,在我按f8時會繼續跳轉到其他系統代碼,最終到了procedure TApplication.Run;這段,反復在如下片段執行:
repeat
try
HandleMessage;
except
HandleException(Self);
end;
until Terminated;
按了很多次,沒耐心了,直接f9才退出。回到主界面,一切正常。
3.這種分層結構的應用,員工資料是存在服務器端吧?可是當我關了client端后,再打開用查詢,顯示報錯,我想是應該不能查詢到資料。難道是client關了以后,服務器端的資料就清空了?
4.我想在執行客戶端增加加員工后,服務器端增加的資料怎么顯示呢?用什么方法?
uj5u.com熱心網友回復:
不懂幫頂
uj5u.com熱心網友回復:
請問到哪里可以找到李維的datasnap開發一書,我也想學習datasnap. 謝bkhxq!uj5u.com熱心網友回復:
把程式代碼打個包我看一下uj5u.com熱心網友回復:
程式打包 上傳資源看看轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/132828.html
標籤:網絡通信/分布式開發
上一篇:有TLabelExt控制元件嗎
