高手请进,关于三层的。。。(100分)

  • 主题发起人 主题发起人 whhzkl
  • 开始时间 开始时间
W

whhzkl

Unregistered / Unconfirmed
GUEST, unregistred user!
菜鸟二问:
1 我在同一台电脑(win2000+d6+midas+sql2000)上开发三层结构时,运行正常,可我将客户端移到另一台98机上时,运行也正常,但当涉及到调用远程模块的方法时,就提示‘服务器运行失败’
详情请见:
http://expert.csdn.net/Expert/topic/2949/2949459.xml?temp=.5817835
由于还没有解决,但时间紧,可我又不愿放弃三层结构, 我决定先将应用程序服务器的方法暂时放到数据库的存储过程中,中间层只起到一个数据模块的作用,不知我的想法是否可行,由此就产生了第二个问题:
2 我在中间层的远程模块里加入了一个AdoStoredProc1+DataSetProvider1, 在客户端的数据模块中加入了TClientDataSet+TDataSource ,在客户端执行以下代码:
Dm.CDSSP_AppendSickMan.Close;
Dm.CDSSP_AppendSickMan.Params[0].AsString := Hospid;
Dm.CDSSP_AppendSickMan.Params[1].AsString := Pntid;
Dm.CDSSP_AppendSickMan.Params[2].AsString := PntName;
Dm.CDSSP_AppendSickMan.FetchParams;
Dm.CDSSP_AppendSickMan.Execute;
Dm.CDSSP_AppendSickMan.Active;
结果第一次执行时有效,可第二次执行时,服务器端执行的还是第一次的参数,就是说客户端的参数没有送到服务器端,为什么???
存储过程:
CREATE PROCEDURE AppendSickMan /* AppendSickMan 先在Content等表里面查找是否有此病人的记录,如无,则添加;*/
@hospid char(12),
@pntid char(8),
@pntname char(8)
AS
if exists(select hospid from content where HospId=@hospid)
return
insert into content (Hospid, PntId, PntName) values( @hospid, @PntId, @PntName)
GO
还有在查询分析器里执行存储过程AppendSickMan时:
execute AppendSickMan '123','456','张天师'
结果正确,
可通过客户端执行时,结果表里'张天师' 变成了'张' ,'天师'丢失了,为什么???
只要大家愿意回答,分不够您说话!


请问
 
没怎么用过参数传递。不如直接用CLIENTDATASET的COMMANDTEXT来传递SQL,然后在执行它。
但是在对应的DataSetProvider上要将属性poallowcommandtext的值设为TRUE
 
請確認你的98下的
"scktsrvr.exe"有沒有執行
 
缺了一些发布文件,例如midas.dll、还有几个dll记不住了,你找一下旧的提问吧。
 
多看看下面的自帶例子吧:
Delphi6/Demos/Midas/AdHoc
 
都是些废话。我在mdias+sql200我现在都不敢有汉字,都会丢失根本就没办法找到解决的方法。
 
必须在赋参数前调用 Dm.CDSSP_AppendSickMan.FetchParams;
给分吧.
 
同意untiltarget,不过我是用CONNECTION的SCHEMA方法从数据库取得存储过程的参数的
 
后退
顶部