关于一个三层结构程序的调试问题?(50分)

  • 主题发起人 主题发起人 sxbug
  • 开始时间 开始时间
S

sxbug

Unregistered / Unconfirmed
GUEST, unregistred user!
中间层我做了一个用于打开数据库的 功能,代码如下:
procedure TCauWuXT_RD.SetDB(const DBN, PWD: WideString);
begin
{ Assign a new Database name }
try
Database1.Close;
//Database1.AliasName := DBN;
if PWD <> '' then
begin
DataBase1.Params.Values['USERNAME']:='CAIWU';
DataBase1.Params.Values['PASSWORD']:=PWD;
DataBase1.LoginPrompt:=False;
DataBase1.DatabaseName:='CAIWU_DAT';
DataBase1.AliasName:='CAIWU_DATA';
Database1.Open;
end;
except
{ If the DB open fails, assume it is because a password is required and
raise a special exception which will cause the client to prompt the
user for a password }
on E: EDBEngineErrordo
if (PWD = '') then
raise Exception.Create('数据库口令有错。') else
raise;
end;
end;
在这里我用database1打开了一个oracle数据库。
在客户端,我在主程序显示窗口时,调用上面的过程,代码如下:
procedure TMainForm.FormShow(Sender: TObject);
var
i:Integer;
DBN:OLEVariant;
PWD:String;
begin
myDM.DCOMConnection_CWXT.Connected:=True;
DBN:=myDM.DCOMConnection_CWXT.AppServer.GetDB;
if VarIsArray(DBN) then
for I:=0 to VarArrayHighBound(DBN,1)do
DBComboBox.Items.Add(DBN);
try
myDM.DCOMConnection_CWXT.AppServer.SetDB(DBComBoBox.text,'CAIWUCHU');
except
on E:Exceptiondo
if E.Message='数据库口令有错。' then
begin
if InputQuery(E.Message,'请输入密码',PWD) then
myDM.DCOMConnection_CWXT.appServer.SetDB(DBComboBox.Text,PWD);
end
else
Raise;
end;
for i:=0 to ActionList.actioncount-1do
TAction(ActionList.Actions).Enabled:=False;
LoginSYS.Enabled:=True;
HelpAbout1.Enabled:=True;
FileExit1.Enabled:=True;

end;

这样我的程序就可以运行了。
现在我的问题是,在调试客户端程序时(不是运行),总是无法激活ClientDataset。每次我激活clientdataset时,中间层能自动启动,但客户端仍然显示:没有打开(登录) alias name: CAIWU_DAT 的数据库 。
那么我又想了一个办法:在中间层的机器上,又创建一个 caiwu_dat 的数据库连接,可还是一样的错误,
我不想改动程序,像这样的程序,如何调试?
 
在设计期间,我想在客户端的dbgrid里面看到数据,该如何做?
首先 直接 将clientdataset的active为true是不行的,因为客户端
在运行时通过一个函数setdb来启动中间层database的。
这么多人做3层结构数据库的,不至于这种问题都没碰到过吧?
 
调试方法:
1在安装的MTS包中->属性->高级->调试(选中在调试器中启动),调试路径:drwtsn32 dllhost.exe /ProcessID:{FB8A0DFE-E7B6-44AA-874E-CC34D005E2D7}
2在Delphi中,Run->Parameters->Host Application(C:/WINNT/system32/dllhost.exe);Parameres:上面红色的字
3Delphi中直接运行;
4运行客户端,激活相应的COM服务,设断点调试。
还要一总方法:装第3方控件:codrrush,放一个控件在上面,就可以把中间层执行的每一步信息都发送出来。
可以查看你的SQL语句是否写对了。
 
我再试一试
 
谢谢ylbee的email了
 

Similar threads

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