谁有自己做的三层例子,客户端(delphi)---应用服务器(COM+)---数据库服务器(300分)

  • 主题发起人 主题发起人 大傻
  • 开始时间 开始时间

大傻

Unregistered / Unconfirmed
GUEST, unregistred user!
请包括出错处理。如果有协调对象的三层处理更好。
别叫我看李维的书,多遍了。
请把例子发给我;qiangyong@ynmail.com
 
我做的都是大系统,且是保密的,不能发给你
 
哪儿有这好事!也给我发一份,现在我公司要我做一个类似于SAP的中间层,要知道SAP的中间
层是能控制其他App Server的,而且能对连上来的client作各种处理.delphi怎么去控制
啊? [:(]
 
to antic_ant:
不发没有关系,我只是想弄清楚两个问题,问题解决同样发分。
一、当加入了协调对象后,客户端怎样向协调对象调用的数据模块的TADOQuery传递参数
(比如SQL这样写:select * from Orders where orderId=:orderId)
二、出错在什么地方控制,如何显示成中文的出错信息?
 
1.如果是select语句返回记录集不如在客户端做。最省事。
2.在应用服务器短把错误信息捕捉下来,用string类型的变量传递给应用程序。
 
同意楼上。
 
你好,请教一个问题,我做三层,可是客户端调用找不到中间层的服务器,你是怎么解决的,
就是在不同的机器上,找到服务器,delphi的资料上说是企业版本的要想找到别的机器上的服务器,必须花钱购买,不止到你市如何解决的
 
有没那回事。
 
TO ZZZZAI :
在 DCOMConnection1。COMPUTERNAME 中动态付给计算机名称,默认的为本机
TO 大傻:
可以使用COM +结构 ,中间数据层ADOConnection1,ADOQuery1,DataSetProvider1
以组件的形式,CLIENT 使用DCOMConnection1,ClientDataSet1连接
 
客户端:
var
m_MyTest :OleVariant;
begin

m_MyTest :=DCOMConnection1.AppServer.SetSQLQryAny_A(Trim(Edit1.Text));
with CDSQryAnalyse_Ado
begin
Data :=m_MyTest;
if IsEmpty or (RecordCount < 2) then

.....
end;
服务端:
function TManagerAppServer.SetSQLQryAny_F(const orderId: WideString): OleVariant;
var
sSQL :String;
begin
try
sSQL :='select * from Orders where orderId='''+orderId+'''';
with QryAnalyse_Fdo
begin
Close;
SQL.Clear;
SQL.Text :=sSQL;
Open;
Result :=DSPQryAnalyse_F.Data;
end;
except
messagebox(0,'asldkfjasdlf;','',..);
end;
end;
在 TDateSetProvider的OnUpdateError中可以捕捉错误
 
已发,请查收。如果有BUG,欢迎投诉;有疑问欢迎探讨。
 
to Sachow
给我一份好吗?
mylove__47@sina.com
 
To Sahow:也给我一份好吗?
lhzx@sjzue.edu.cn
 
to Sahow
我也来 !!!
h1yn@sohu.com
 
我来混分
delphi的demo/Midas中有!
 
to Sachow 把代码帖出来,让咱也参考一下呀,我的请大家指教
服务层
procedure TFinDeptPrivTrxDM.dspFinDeptPrivBeforeGetRecords(Sender: TObject;
var OwnerData: OleVariant);
var
FilterStr:string;
begin
FinDeptPriv.Close;
{*********************************************************************************}
{Create date: 2002-09-14 By SYZ begin
}
{OwnerData: [0] - FinDeptID }
{ [1] - ModuleID }
{ [2] - FunctionID }
{*********************************************************************************}
if VarIsArray(OwnerData) then
begin
FilterStr:='';
if OwnerData[0] <> '' then
begin
FilterStr := FilterStr + 'FinDeptID = ''' + OwnerData[0] + '''';
end;
if OwnerData[1] <> '' then
begin
if FilterStr <> '' then
FilterStr := FilterStr + ' AND ';
FilterStr := FilterStr + 'ModuleID = ''' + OwnerData[1] + '''';
end;
if OwnerData[2] <> '' then
begin
if FilterStr <> '' then
FilterStr := FilterStr + ' AND ';
FilterStr := FilterStr + 'FunctionID = ''' + OwnerData[2] + '''';
end;
if FilterStr <> '' then
begin
FinDeptPriv.Filter := FilterStr;
FinDeptPriv.Filtered := True;
end;
end
else
begin
FinDeptPriv.Filter := '';
FinDeptPriv.Filtered := False;
end;

end;

协调层
function TFinDeptPrivTrxQryObj.GetFinDeptPrivByID(SID: OleVariant;
const FinDeptID: WideString;
var Data: OleVariant): WordBool;
var
TrxDM: IFinDeptPrivTrxDM;
Server: string;
Options: TGetRecordOptions;
RecsOut: Integer;
Params: OleVariant;
OwnerData: OleVariant;
begin
if not CheckSID(SID) then
Exit;
Options := [grMetaData, grReset];
Server := reg.GetProviderServer;
try
if Server = '' then
TrxDM := CoFinDeptPrivTrxDM.Create
else
TrxDM := CoFinDeptPrivTrxDM.CreateRemote(Server);
OwnerData := VarArrayOf([FinDeptID,'', '']);
Data := TrxDM.AS_GetRecords('dspFinDeptPriv', -1, RecsOut,
Byte(Options), '', Params, OwnerData);
SetComplete;
Result := True;
except
SetAbort;
raise;
end;
end;
客户端
procedure TFinDeptPrivFrm.FormCreate(Sender: TObject);
begin
PixelsPerInch := Screen.PixelsPerInch;
if gCurUser.ServerName = '' then
begin
FinDepartmentQryObj:=CoFinDepartmentTrxQryObj.Create ;
FinDeptPrivQryObj:=CoFinDeptPrivTrxQryObj.Create ;
SysFunctionQryObj:=CoSysFunctionTrxQryObj.Create ;
FinDeptPrivUpdObj:=CoFinDeptPrivTrxUpdObj.Create ;
end
else
begin
FinDepartmentQryObj:=CoFinDepartmentTrxQryObj.CreateRemote(gCurUser.ServerName);
FinDeptPrivQryObj:=CoFinDeptPrivTrxQryObj.CreateRemote(gCurUser.ServerName);
SysFunctionQryObj:=CoSysFunctionTrxQryObj.CreateRemote(gCurUser.ServerName);
FinDeptPrivUpdObj:=CoFinDeptPrivTrxUpdObj.CreateRemote(gCurUser.ServerName);
end;
cdsSysFunction.GetRemoteData;
cdsFinDepartment.GetRemoteData;
end;
 
To antic_ant:我的程序是三个简单的项目(没有客户端程序,客户端是用ASP来调用的),
程序非常简单,但全贴出来的话还是赚太长,如果不全部贴出来的话大家也看不出个究竟,
所以还是用发的好。
顺便问一下,你的程序实现的是什么功能,大概思路是什么?(你的程序里有大量全局变量
的运作,并且没有注释,我没能看懂)
 
to Sachow
给我一份好吗?
谢了!
ntugn@163.com
 
学习!能发的话拍手叫好!Bookinternet@163.com
 
to Sachow
也给我一份:)
linxian163@163.com
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部