如何在中间服务器上自动登录sql server?(50分)

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

stupid

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用remote data module,server 是MS sql7
但如果把一个Tdatabase放在远程数据模块上就会出错,
放在另一个数据模块上,又看不到databasename.请各位大虾
帮忙了。
 
我用的DELPHI是4.0 Patch 3 Client/Server版。
一直在Remote Data Module中使用,DataBase控件。
Server 是 SQL6.5。
没有问题,你是不是没有用PATCH包?
 
确实如你所说,如果放上TDatabase就会出错,
所以正确的方法是另外new一个普通数据模块
在该普通数据模块上放TDatabase,远程数据模块
用uses去引用该普通数据模块上的TDatabase.
 
写几行代码好吗?
我已经在implementation之后引用了普通数据模块的单元文件
但是在远程数据模块的table的属性列表框中还是看不到
在普通数据模块的database中定义的databasename
难道要写代码设置吗?
 
RemoteDM.Oncreate
begin
table1.databasename:=AnotherDm.database1.databasename;
table1.open;
End
我是这样写的没有问题,实试吧
 
做了一个非常小的例子
这是Remote data module form:
object wangs: Twangs
OldCreateOrder = False
Left = 310
Top = 209
Height = 150
Width = 215
object Query1: TQuery
Active = True
DatabaseName = 'mydatabase'
SQL.Strings = (
'SELECT BmBh, BmMc, BmZg'
'FROM gsbm Gsbm')
Left = 24
Top = 8
end
object Table1: TTable
Active = True
DatabaseName = 'mydatabase'
TableName = 'gscl'
Left = 64
Top = 8
end
object DCOMConnection1: TDCOMConnection
Left = 104
Top = 8
end
object CorbaConnection1: TCorbaConnection
Left = 144
Top = 8
end
object SocketConnection1: TSocketConnection
Left = 24
Top = 56
end
object DataSetProvider1: TDataSetProvider
DataSet = Table1
Left = 72
Top = 56
end
object DataSetProvider2: TDataSetProvider
DataSet = Query1
Left = 120
Top = 56
end
end
这是单元文件:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComServ, ComObj, VCLCom, StdVcl, BdeProv, DataBkr, DBClient, Project2_TLB,
Db, DBTables, MConnect, MidasCon, Provider, SConnect, CorbaCon;
type
Twangs = class(TRemoteDataModule, Iwangs)
Query1: TQuery;
Table1: TTable;
DCOMConnection1: TDCOMConnection;
CorbaConnection1: TCorbaConnection;
SocketConnection1: TSocketConnection;
DataSetProvider1: TDataSetProvider;
DataSetProvider2: TDataSetProvider;
private
{ Private declarations }
public
{ Public declarations }
end;

var
wangs: Twangs;
implementation
uses pdm;
{$R *.DFM}
initialization
TComponentFactory.Create(ComServer, Twangs,
Class_wangs, ciMultiInstance, tmApartment);
end.

这是普通data module的form:
object DataModule3: TDataModule3
OldCreateOrder = False
Left = 436
Top = 111
Height = 150
Width = 215
object Database1: TDatabase
Connected = True
DatabaseName = 'mydatabase'
DriverName = 'MSSQL'
Params.Strings = (
'DATABASE NAME=cores'
'SERVER NAME=msvr'
'OPEN MODE=READ/WRITE'
'SCHEMA CACHE SIZE=8'
'BLOB EDIT LOGGING='
'LANGDRIVER=china'
'SQLQRYMODE='
'SQLPASSTHRU MODE=SHARED AUTOCOMMIT'
'DATE MODE=0'
'SCHEMA CACHE TIME=-1'
'MAX QUERY TIME=300'
'MAX ROWS=-1'
'BATCH COUNT=200'
'ENABLE SCHEMA CACHE=FALSE'
'SCHEMA CACHE DIR='
'HOST NAME=MSVR'
'APPLICATION NAME='
'NATIONAL LANG NAME='
'ENABLE BCD=FALSE'
'TDS PACKET SIZE=4096'
'BLOBS TO CACHE=64'
'BLOB SIZE=32'
'PASSWORD=')
SessionName = 'Default'
Left = 40
Top = 16
end
end
这是其单元文件:
unit pdm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBTables;
type
TDataModule3 = class(TDataModule)
Database1: TDatabase;
private
{ Private declarations }
public
{ Public declarations }
end;

var
DataModule3: TDataModule3;
implementation
{$R *.DFM}
end.
上面的所有东西是自动生成的
在数据集databasename选择是在下拉框内可以直接选择。
我估计你的database控件的databasename是不是没有设置?
我的数据库连SQL 7.0 数据库,数据库名字cores.
希望对你有所帮助。
 
将TDATABASE中的KEEPHANDLE属性=TRUE
 
我在remote data module放TDatabase没问题呀,而且可以自动Login到SQL Server
 
设置TDATABASE的HandleShare属性为True即可
 
正版的Delphi4没有问题!
你是不是在用盗版!
 
这个我做过的
我用集成安全方式安装的sql server 6.5
delphi4 (没有加什么patch)
nt 或 95登录用户密码与sql server's nt相同
毫无问题
 
还有这样的问题?真是天方夜潭了!
 
我用D5,在Remote DataMoudle上直接放Database组件,没有问题。
 
d4,d5都没有问题,
你可以另开一个数据模块,把DATABASE放进去!再USE它
 
对。用D5,在Remote DataMoudle上直接放Database组件,没有问题。
 
database
属性
handleShare =True
 
建立另一个SESSION 即可
参考 台湾 李维 的 <<Delphi 3.0 高级数据库编程>>
 
接受答案了.
 
后退
顶部