三层的问题(100分)

  • 主题发起人 主题发起人 fstao
  • 开始时间 开始时间
F

fstao

Unregistered / Unconfirmed
GUEST, unregistred user!
中间是MIDAS服务器,是用Ado存取后端数据库sql server 7.0,我把中间服务器做成Dll形
式,因此中间服务器是用TADOConnection连接sql server 7.0,加入TADODataSet和
TDataSetProvider,设置好各自的属性,并且编译好,然后注册。
在前端,添加TDCOMConnection和TClientDataSet,也各自设置好属性,在
ClientDataset1的commandText写sql语句:select * from table1,前几天把Active设置
True没有任何问题,可以用TDbgrid显示数据,但现在出现一个错误,我一把Active设置
true时,出现一个错误:
Either BOF or EOF is True,or the current record has been deleted.Requested
operation requires a current record.
其实table1有几条数据啊,为何会出现这个错误呢?请解释。
 
肯定你改动了哪个属性或者数据库的内容,你删掉重建,很方便的,不应该再出错。
查到出错原因告诉大家一声。
 
Restart DBMS
 
后来我把整个win2000系统删掉再安装,就没有问题了。
 
我还要请教三层调用的两个问题:
1、在中间服务器写一个接口:
procedure TTestServer.GetParameter(var vParm: OleVariant);
begin
vParm:='ABC';
end;

我想把中间服务器的vParm:='ABC'回调给客户端,在客户端显示“ABC”,如在客户端写代码:
procedure TForm1.Button2Click(Sender: TObject);
var
parm :OleVariant;
begin
edit1.text:=dcomconnection1.AppServer.GetParameter(parm);
end;

我想Edit1.text显示“ABC”,但这样写就会出错,请问如何在前端编写代码取中间服务器的参数?
2、在中间服务器写一个接口:
procedure TTestServer.ChangeDB(var dbname: OleVariant);
begin
ADOConnection1.Connected:=FALSE;
ADOConnection1.ConnectionString:=
'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog='+dbname+';'+
'Data Source=computer;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;'+
'Workstation ID=COMPUTER';
ADOConnection1.connected:=True;
end;

然后再客户端调用:
procedure TForm1.Button2Click(Sender: TObject);
begin
with datamodule1do
begin
DCOMConnection1.AppServer.ChangeDB('pubs');
clientdataset1.Close;
clientdataset1.CommandText:='select * from sales';
clientdataset1.open;
end;
end;

运行客户端,能在TDBGrid正常显示数据,但我这样改:
procedure TForm1.Button2Click(Sender: TObject);
var
name :OleVariant;
begin
name:='pubs';
with datamodule1do
begin
DCOMConnection1.AppServer.ChangeDB(name);
clientdataset1.Close;
clientdataset1.CommandText:='select * from sales';
clientdataset1.open;
end;
end;

出现错误:Cannot open database requested in login 'DataModule1'.Login fails.
为何用参数设置会出现错误?请问如何改?
 
问题1:
中间服务器接口为:
function TTestServer.GetParameter(var vParm: OleVariant):oleVariant;
begin
vParm:='ABC';
result:=vParm;
end;
问题2:
中间服务器接口为:
procedure TTestServer.ChangeDB(const dbname: widestring);
客户端改为:
procedure TForm1.Button2Click(Sender: TObject);
var
name :string;
begin
name:='pubs';
试试看!
 
接受答案了.
 
这个问题好像是ADO2.6新带来的,我在许多网上都看到这个问题。
解决方法:
用ADO2.5的msado15.dll(日期:2000.1.10) 替换 ADO2.6的msado15.dll(日期:2000.7.27)
"msado15.dll" 在 C:/Program Files/Common Files/SYSTEM/ADO 中可以找到
 
后退
顶部