求助:多层动态数据库连接问题?在线等

空中居士 2003-09-14 08:48:47
各位大侠,问题是这样的:
我有数据库A,B;库结构是一样的,在服务器端建了一个数据连接,连接到其中的a 或b。我如何实现在客户端根据用户的选择,动态的在A ,B数据库之间切换。

因为数据库可能还会增加c,d...;客户端程序不能固定指定连接A ,B数据库。
在何处写代码,用什么样的方式能实现这种功能呢?
多谢了!!
...全文
45 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
空中居士 2003-09-20
  • 打赏
  • 举报
回复
谢谢各位,在各位的热情帮助下,这个困惑我多日的问题得到圆满解决。
有好多问题,知道了并不难,可不知道时,就是不知如何下手。
再次谢谢各位。
PrgmLover 2003-09-19
  • 打赏
  • 举报
回复
FrmData.DComConData.Connected:=false; //关时,
关掉连接再调服务端函数,这样肯定是要出错的

procedure TTzglSData.TzglConectData(const sConectStr: WideString);
begin
ADOConnectionData.close;
ADOConnectionData.ConnectionString:= sConectStr;
end;
xuecswl 2003-09-19
  • 打赏
  • 举报
回复
1.根据客户端的选择生产连接字符串,用ShowMessage(Connectionstr)看看连接字符串是否正确.
2.先关闭连接,再更改连接字符串
空中居士 2003-09-19
  • 打赏
  • 举报
回复
Tiejun_Chenfang()
连接字符串本身就是自动产生的,我只不过想改动其连接的数据库部分。也就是Initial Catalog=?
止止
可以不用写函数的,clientdataset有datarequest方法,他的参数可以向后台传递参数,后台的datasetprovider有ondatarequest事件可以接受那个参数,然后根据参数临时构造adoconnection的connectionstring,
当clientdataset较多时,会很麻烦。不如一次指定简单。
Tiejun_Chenfang 2003-09-19
  • 打赏
  • 举报
回复
你修改了后台的连接字符串,但前台并不知道,
用cds重新要一回数据即可
hiflower 2003-09-19
  • 打赏
  • 举报
回复
FrmData.DComConData.AppServer.TzglConectData(MyString);
FrmData.DComConData.Connected:=True;

顺序错了吧,应该先连接,再调用接口方法。

FrmData.DComConData.Connected:=True; FrmData.DComConData.AppServer.TzglConectData(MyString);
ClientDataSet1.Close;
ClientDataSet1.Open;


procedure TTzglSData.TzglConectData(const sConectStr: WideString);
begin
ADOConnectionData.close;
ADOConnectionData.ConnectionString:= sConectStr;
ADOConnectionData.Open;
end;


空中居士 2003-09-19
  • 打赏
  • 举报
回复
PrgmLover(爱国者) 按你的方法,程序不再报错,
但是在更改了连接串后,客户端的数据库并没有切换到新库,显示依然是原来的数据。
如何是好???
Tiejun_Chenfang 2003-09-18
  • 打赏
  • 举报
回复
你的连接字符串是不是谢太多的内容了,你可以让adoconnection在设计期通过connctionstr属性自动产生一次连接,他好像没有你这么多内容把?

你为什么把connctionstr写在前台,在后台构造不行吗?

可以不用写函数的,clientdataset有datarequest方法,他的参数可以向后台传递参数,后台的datasetprovider有ondatarequest事件可以接受那个参数,然后根据参数临时构造adoconnection的connectionstring,在对adoconnection的connectionstring负值前,connected要先为false;
空中居士 2003-09-18
  • 打赏
  • 举报
回复
// 根据选择的项目名称,确定所要连接的数据库

FrmData.DComConData.Connected:=false; //关时,出错信息为

Project prjTzglClinet.exe raised exception class EvariantInvalidOpError with message 'invalid variant operation'.Process stopped. Use Step or Run to continue


FrmData.DComConData.Connected:=True; //开时,出错信息为
对象打开时,操作不被允许

服务端变量类型为:sConectStr Bstr 〔in〕
idilent 2003-09-17
  • 打赏
  • 举报
回复


不让修改连接串是什么意思?能不能把出错信息什么的提供一下?
空中居士 2003-09-17
  • 打赏
  • 举报
回复
各位老大:
谢谢各位,不过好像此路不通,连接服务器后,不让修改连接串;不连接服务端,又说非法操作。

服务端代码:
procedure TTzglSData.TzglConectData(const sConectStr: WideString);
begin
ADOConnectionData.ConnectionString:= sConectStr;
end;

客户端代码
procedure TfrmGcmc.OKBtnClick(Sender: TObject);
var
myString:WideString;
begin
// 根据选择的项目名称,确定所要连接的数据库

FrmData.DComConData.Connected:=false; //开、关都不通

MyString:='Provider=SQLOLEDB.1;Password=111111;Persist Security Info=True;User ID=sa;Initial Catalog=tzgl';
MyString:=MyString+trim(FrmData.cdsGcmc.FieldByName('工程编号').AsString);
MyString:=MyString+';Data Source=ZJX;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=ZJX;Use Encryption for Data=False;Tag with column collation when possible=False';

FrmData.DComConData.AppServer.TzglConectData(MyString);
FrmData.DComConData.Connected:=True;
end;
错在何处
PrgmLover 2003-09-16
  • 打赏
  • 举报
回复
只要你用过一次就知道不难的。
你在应用层建一个Remote DataModal. 在那里输出函数。
打开应用层工程文件 在Delphi的菜单View--type Libery 中选中接口点右键(加函数,设参数),后面的操作不难了,看看就会明白的。
skypeople 2003-09-16
  • 打赏
  • 举报
回复
晕,,,师兄建意你静下心来看书,,,如果李维的那本书就复杂了,,,那你还是先看书再想着写三层吧,,,不然多半是一堆;;

中间层实际上是用DCOM的调用,,你只要在中间的COM结口中加入一个函数并实现它就可以,,前面就可以调用了,,,
在D的IDE中你只要在数据模块上按F12会出现可视化的窗口然后加入一个函数并定义相关的参数就可以了;D会帮你写好所有声明当然你还要实现他;;
最好还是去看一下书,,,
这里不好说清楚;
空中居士 2003-09-16
  • 打赏
  • 举报
回复
其实我不懂的是如何在远程数据模块的接口中添加FUNCTION函数和客户端如何调用!!
我看了李维的分布式多层应用,好像很复杂,
非得如此处理吗,有没有其他方法?
空中居士 2003-09-16
  • 打赏
  • 举报
回复
会者不难,难者不会。
WGYKING 2003-09-15
  • 打赏
  • 举报
回复
这应该不难吧?
  • 打赏
  • 举报
回复
:0
空中居士 2003-09-14
  • 打赏
  • 举报
回复
哈哈,idilent(准备去刷碗) 你说的真不错,不亏是高手。
idilent 2003-09-14
  • 打赏
  • 举报
回复
让 lxpbuaa(桂枝香在故国晚秋)写一个发给你。哈哈
空中居士 2003-09-14
  • 打赏
  • 举报
回复
请问如何写呀? 能说的再详细吗?
加载更多回复(1)

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧