三层mts数据库连接sqlserver发布的一些问题!(100分)

  • 主题发起人 主题发起人 dark_eagle
  • 开始时间 开始时间
D

dark_eagle

Unregistered / Unconfirmed
GUEST, unregistred user!
我在学习做三层mts数据库管理系统.有几个问题我想不明白,希望大家帮忙:
中间层连接sql server7是否一定要用odbc?如果直接用oledb连接,开发完到客户里安装
是不是一定要帮客户装sql server7.安装完之后手工设置?应该不会这样吧!!!
mts中间层可以导出一个客户端和服务器端。但sql server如何设置?因为开发时的server name
和客户的server name 是不同的。
客户端连接中间层用什么好?dcomconnection还是socketconnection?
如果用socketconnection连接,address或computer两项应该如何设置?因为打包之后不能改,
该不会是将客户的服务器改成开发时的客户端的address或computer吧?还是事先先取得客户
的服务器IP地址或机器名?但如果客户换了服务器机器名或IP地址哪就不是不能用了?

哪位有好的做法?给个详细的步骤,感激不尽!

 
who help me?
 
究竟是怎么回事呀,查不到相关的问题?又没有人回答?
 
中间层用ADO连接sqlserver
客户端用Dcomconnection连接中间层
其他问题看李维的书吧
 
我看过了,好像没有说得很清楚!
 
1 你可以独立写个动态配odbc的程序.如果用ADO的话也可以,用这个什么方法的,现
在记不得了,待会我把你找找.

2 把连的服务器(组件)名写死,让用户来输IPaddress或Host,把结果保存在.ini文件中,这样的话
每次连服务器的时候,读一下该.ini文件,如果连接错误则重新输入服务器名,这样就可以连不同机器上的服务器了
procedure linkserver(Sender:TObject;SocketConnection1: TSocketConnection);//自定义函数.
var
servername,dirname:string;
filehandle:integer;
f:textfile;
begin
getdir(0,dirname);
showmessage('服务器名不正确,请输入正确的服务器名');
if inputquery('连接服务器操作','输入服务器名:',servername) then
begin
if fileexists(dirname+'/servername.ini') then
begin
assignfile(f,dirname+'/servername.ini');
rewrite(f);
writeln(f,servername);
closefile(f);
end else
begin
filehandle:=filecreate(dirname+'/servername.ini');
fileclose(filehandle);
assignfile(f,dirname+'/servername.ini');
rewrite(f);
writeln(f,servername);
closefile(f);
end;
socketconnection1.Connected:=false;
socketconnection1.Host:=servername;
socketconnection1.LoginPrompt:=false;
try
socketconnection1.Connected:=true;
except
on E:Exceptiondo
begin
linkserver(sender,socketconnection1);
end;
end;

end else
begin
showmessage('你取消了进入系统');
halt;
end;
end;

procedure TDataModule1.SocketConnection1BeforeConnect(Sender: TObject);
var
servername,dirname:string;
filehandle:integer;
f:textfile;
begin
getdir(0,dirname);
if fileexists(dirname+'/servername.ini') then
begin
assignfile(f,dirname+'/servername.ini');
reset(f);
while not eof(f)do
begin
readln(f,servername);
end;
closefile(f);
if length(trim(servername))<=0 then
if inputquery('连接服务器操作','输入服务器名:',servername) then
begin
assignfile(f,dirname+'/servername.ini');
rewrite(f);
writeln(f,servername);
closefile(f);
end else
begin
showmessage('你取消了进入系统');
halt;
end;
end else
begin
filehandle:=filecreate(dirname+'/servername.ini');
fileclose(filehandle);
if inputquery('连接服务器操作','输入服务器名:',servername) then
begin
assignfile(f,dirname+'/servername.ini');
rewrite(f);
writeln(f,servername);
closefile(f);
end else
begin
showmessage('你取消了进入系统');
halt;
end;
end;
socketconnection1.Connected:=false;
socketconnection1.Host:=servername;
end;

procedure TDataModule1.DataModuleCreate(Sender: TObject);
begin
try
socketconnection1.Connected:=true;
except
on E:Exceptiondo
begin
if e.Message='Operation aborted' then
begin
showmessage('你取消了进入系统');
halt;
end else
begin
linkserver(sender,socketconnection1);
end;
end;
end;
end;

 
ado和sql server有什么关系???莫名其妙!!
 
用ado连接sql server数据库呀,楼上的兄弟不会连这个都不懂吧?
莫名其妙!!!!!!!!!
 
to dark_eagle:
呵呵,又见面了,这个问题我是这样认为的:
用odbc时,你可以在打包的时候在注册表中建odbc链接,很好的,不用手工
或是ado,用它是你可以把链接字符串写到一个*.ini文件中
 
我想用如下方法解决但测试不行(在sql server的query analyzer中可以):
我用adoconnection连接sql7数据库.
按照上述方法使用adocommand.
procedure TForm1.Button2Click(Sender: TObject);
begin
adocommand1.Commandtext:='sp_attach_db aaa,'+#39+'c:/mssql7/data/rsglxt_data.mdf'+#39+','+#39+'c:/mssql7/data/rsglxt_log.ldf'+#39;
end;

程序执行没错但在sql7中没有建立数据库.

如果使用ADOStoredProc则出错:
cannot use empty object or column names,use a single space if necessary.
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOStoredProc1.Parameters[1].Value:='aaa,';
ADOStoredProc1.Parameters[2].Value:=#39+'c:/mssql7/data/rsglxt_data.mdf'+#39+',';
ADOStoredProc1.Parameters[3].Value:=#39+'c:/mssql7/data/rsglxt_log.ldf'+#39;
ADOStoredProc1.Active:=true;
ADOstoredProc1.Prepared;
ADOStoredProc1.ExecProc;
end;

http://www.delphibbs.com/delphibbs/dispq.asp?lid=781436
 
不可能,用ADO+SQL server挺好用的
客户端连接中间层当然用socketconnection,address或computer就用楼上老兄的方法,
挺好的,保存在ini文件中
 
多人接受答案了。
 
后退
顶部