用TCP/IP方式开发三层程序遇到的问题

hllyjdr 2006-05-16 10:33:45
1、服务器端:
ServerRDM上:
1个ADOConnection1:连接一个SQL server数据库
1个ADOQuery1:连接一个数据表
1个DataSetProvider1:DataSetProvider1->DataSet=DOQuery1;

2.客户端:
ClientDMFrm上
1个SocketConnection1;
设置它的ServerName属性为Server.ServerRDM;
设置它的Host属性为本地机器名;
设置它的Connected属性为true,此时自动启动服务器程序;
设置它的LoginPrompt属性为false
1个ClientDataSet1:
设置ClientDataSet1的RemoteServer属性为SocketConnection1;
设置ClientDataSet1的ProviderName属性为DataSetProvider1;
1个DataSource1
设置DataSource1的DataSet属性为ClientDataSet1;

以上是在设计阶段的配置。
在void __fastcall TClientDMFrm::DataModuleCreate(TObject *Sender)
{
ClientDataSet1->Open();
}
当程序执行到ClientDataSet1->Open();时,提示如下错误提示:
---------------------------
Debugger Exception Notification
---------------------------
Project Client.exe raised exception class EOleException with message '
用户 'Administrator' 登录失败。'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

各位帮我分析一下这是什么原因?
...全文
943 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
sbkopoky 2007-02-17
  • 打赏
  • 举报
回复
有一个香港和悦网络电话的源文件 ,有兴趣妨进入我的BLOG看看
linuxghs 2007-01-07
  • 打赏
  • 举报
回复
是三层结构的数据库吧。
truelove7283159 2006-11-21
  • 打赏
  • 举报
回复
up
faretel 2006-11-20
  • 打赏
  • 举报
回复
BCB 自带的Examples\Midas\EmpEdit 目录中有 empsrvr.bpr 和 empedit.bpr 可以参考.
如何将客户端的参数传给服务器还在学习中.
yefu2000 2006-10-31
  • 打赏
  • 举报
回复
mark
jixiaoqiang 2006-10-19
  • 打赏
  • 举报
回复
你问题解决了没有啊? 如果还不行,你试试在服务器端设置你的Adoconn的连接字符串,估计是那里设的有问题。

如何还不行,那就是你的工作模式有问题,你的ClientDataSet所对应的ADOConn是谁?好象没有吧?而他能通过服务器端的ADOConn来连接数据库吗?好像不行吧?你的错误提示好像就是没有连接造成的。
hllyjdr 2006-10-08
  • 打赏
  • 举报
回复
大家的继续讨论我很感动。
看哪位还有没有发言的。
过几天我结帖子。
weill 2006-10-06
  • 打赏
  • 举报
回复
注意起动程序时:
服务器上起动
1、你的服务端
2、scktsrvr.exe

客机起动
1、你的客户端
2、BCB安装目录中找到midas.dll,复制到客户端所在目录,否则无法正常运行。
weill 2006-10-06
  • 打赏
  • 举报
回复
经过一个晚上的资料查找和尝试。
给出本人的当前的结果仅供楼主参考:

以下在BDS2006中的BCB中测试通过。

一、服务器:
1、新建一个普通工程
2、文件-》新建-》其它-》C++Builder文件-》Data Module -》确定
(为了方便,我按含义写成中文了)。
3、在新出的Data Module中放上一个ADODataSet1和一个DataSetProvider1,设定ADODataSet1联上你的SQL服务器,并正确设定其SQL查询语句(玩到这份上,这个就不用教了吧,呵呵)。设定DataSetProvider1关联ADODataSet1。
4、在普通工程的普通窗体上放个按钮,在按钮的代码中写入对ADODataSet1的基本控制(主要是让它是否活动啦)。
5、这样,服务器部分就写完了。嗯,就这么简单。但是,服务器这块并不是写完了就完完,呵呵。
6、起动服务器部分,请注意,一定要用管理员权限的帐户起动它哦……否则报错。在写客户端之前一定要先起动一次哦。
7、这还没完,呵呵,还有一个东东要起动哦,去你的BCB安装目录中找到scktsrvr.exe,并起动它,同样,请使用管理员权限起动它。起动完后还不算完事,请对它进行设定,要求设定它的GUID,对了,这个GUID怎么设呢?呵呵,先空着,先玩下面的,下面的东东里能得到它。
8、服务器部分先就这样了。

二、客户端:
1、建一个正常的工程。
2、在窗体上放上DCOMConnection1、ClientDataSet1、DataSource1、SocketConnection1、DBGrid1各一个。其中DCOMConnection1是临时的,用来得到GUID,呵呵。
3、将DCOMConnection1、ClientDataSet1、DataSource1、DBGrid1关联起来(哪个关联哪个我就不说了,要是这也不知道,智商有问题,呵呵)。
4、在服务器端起动着的情况下,在DCOMConnection1的computername属性中填写主机IP,在现在当然是本机IP了,然后去点Servername属性那个空边的小三角,就能得到你的主机的那玩意儿(不好意思,本人菜,那玩意儿该叫什么,我也不知道我得到的是“ServerPrj.TestRemote”),这时在ServerGUID那个空里就会自动得到GUID(自动填上),如果没有自动填,你的服务器端应该是没起动。
5、将ClientDataSet1和SocketConnection1关联起来。将SocketConnection1的Host设好,将GUID填上刚才得到的GUID,将其Servername填为上面得到的Servername。
6、回过头来设定那个scktsrvr.exe,将里面的GUID填上上面得到的GUID。点应用(Apply)。
7、编译,完事。

又及:如果在XP或windows 2003下,请设定系统防火墙,让scktsrvr.exe通过哦。
希望上面的经验对你有帮助!

希望与你交流相互交流所得!

进一步的研究,比如怎么控制是否让用户联入等我还没学会,呵呵,我想应该要有的,否则,安全上面实在是个问题!
weill 2006-10-05
  • 打赏
  • 举报
回复
严重关注!希望楼主问题解决后能说一下怎么解决的。
以前没做过这类东西,现在正在想这类东西,回头我试试,有什么进展相互交流。
netliuming 2006-09-28
  • 打赏
  • 举报
回复
mark!!!
jixiaoqiang 2006-09-28
  • 打赏
  • 举报
回复
你对原理是不是不了解啊?
好像不是ClientDataSet->Open吧?


要调用服务器端应用程序的自定义一个方法,该方法读取数据库,并返回客户端一个数据包;
客户端调用服务器端的该方法,得到数据包后,把该数据包赋值给ClientDataSet,然后再对ClientDataSet进行操作。
你直接对ClientDataSet操作好像不行吧??我是这么理解的。

我一般都是这么的返回

STDMETHODIMP TMydataImpl::GetRecord(BSTR strsql, TVariant* data)
{
String input;
input=strsql;

try
{

m_DataModule->Query1->Close();
m_DataModule->Query1->SQL->Clear();
m_DataModule->Query1->SQL->Add(input);
m_DataModule->Query1->Open() ; //得到的数据集返回到了DataSetProvider1->Data中

//输出数据 ---这里的数据结果最好是压缩一下,到了客户端再重新解压
*data=m_DataModule->DataSetProvider1->Data;


}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IMydata);
}
return S_OK ;

}
hllyjdr 2006-05-24
  • 打赏
  • 举报
回复
???????
hllyjdr 2006-05-17
  • 打赏
  • 举报
回复
jjwwang(风归叶) :你说的
用服务器上的用户名登录
是不是指的是用数据服务器的windows2000的登录密码登录?
我用 数据服务器的windows2000的登录“用户名”和“密码”登录了,不行。

我用 数据服务器的那台电脑的数据库的“用户名”和“密码”登录了,也不行。

hllyjdr 2006-05-17
  • 打赏
  • 举报
回复

谢谢 jjwwang(风归叶) 的答复!

是混合验证
hllyjdr 2006-05-16
  • 打赏
  • 举报
回复
怎么没人回复?
CACACACACA 2006-05-16
  • 打赏
  • 举报
回复
权限的问题.

用服务器上的用户名登录

另外,你的MSSQLSERVER是混合验证,还是WINDOWS验证.

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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