欢迎来到论文网! 识人者智,自知者明,通过生日认识自己! 生日公历:
网站地图 | Tags标签 | RSS
论文网 论文网8200余万篇毕业论文、各种论文格式和论文范文以及9千多种期刊杂志的论文征稿及论文投稿信息,是论文写作、论文投稿和论文发表的论文参考网站,也是科研人员论文检测和发表论文的理想平台。lunwenf@yeah.net。
您当前的位置:首页 > 科技论文 > 计算机论文

基于C++ Builder的多层分布式数据库技术

时间:2015-09-02  作者:班 珂
添加一个连接控件TSocketConnection,该连接控件是使用TCP/IP协议来建立应用程序服务器和客户端的连接,因而适用于企业内部网和Internet。但若采用这种连接方式,在服务器端必须运行ScktSrvr.exe,该文件放在C++ Builder的bin目录里面。如果客户端和服务器之间有防火墙,还必须开放Socket Server所指定的端口,默认是211,客户端还要把MIDAS.DLL文件放在系统目录里面。

 

③、 设置TSocketConnection的Address属性为应用程序服务器的IP地址,并在ServerName属性里选择服务器名,即刚才建立的应用程序服务器。再把其Connected属性设置为真,这时,应用程序就被激活了。

④、 添加一个TClientDataSet、一个TdataSource和一个TDBGrid,其属性分别设为:

TClientDataSet:

RemoteServer SocketConnection1

ProviderName DataSetProvider1

Active ture

TDataSource:

DataSet ClientDataSet1

TDBGrid:

DataSource DataSource1

这样,一个客户端应用程序就完成了,这时,我们就可以在TDBGrid控件上看到表XXXX的内容。

⑶、几个实用小技巧

①、 如何把SQL命令从客户端程序传给应用程序服务器运行

首先在服务器端把DataSetProvider1/Options/poAllowCommandText设为true

其次在客户端的某个执行控件上写入如下代码:

ClientDataSet1->Active = false;

ClientDataSet1->CommandText =”select * from YYYY” ;

ClientDataSet1->Active = true;

这时就可以把SQL语句传到服务器端了,当然,SQL语句可以是多样的,可按实际需求去写。

②、 分段传递数据

当客户端进行数据操作,比如查询操作时,服务器是把所有的查询结果整个打包,一次性发送到客户端,当数据量很大时就会影响速度,浪费时间。因为用户在界面上一次性所看到的数据有限,因此,我们可以用分段传递数据的方法解决这个问题。方法如下:

可以参考以下信息设置ClientDataSet的PacketRecords属性:

-1:将整个DataSet从应用程序服务器一次传到客户端

0:把数据库服务器上的meta data取到客户端,meta data就是数据库的所有定义数据,如Table、Column、Constraint等。

大于0:一次取到客户端的记录数,注意FetchOnDemand应设为false。

③、与服务器通讯(软件握手)

用此方法可以从客户端传数据到应用程序服务器端。在这里举例的是把客户端Edit1的内容和客户端所在计算机的IP地址传到服务器端,实现方法如下:

ⅰ.在客户端添加一个TEdit,一个TButton和一个TIdIPWatch控件,双击Button控件,写入以下代码:

AnsiString IPAdress;

IPAdress=IdIPWatch1->LocalIP();

ClientDataSet1->DataRequest(Edit1->Text+'+'+IPAdress);

ⅱ.双击服务器端的DataSetProviderEventsOnDataRequest,在该函数里输入以下代码:

AnsiString str=Input;

AnsiString Username,IPAdress;

int Lenth=str.Length();

int Count=0;

char *buf=new char[Lenth+1];

strcpy(buf,str.c_str());

for(int i=0;i<=Lenth;i++)

{

if(buf[i]!=(char)'+')

{

Username+=buf[i];

Count++;

}

else break;

}

for(int i=Count+1;i<=Lenth;i++)

{

IPAdress+=buf[i];

}

这样就可以把从客户端传过来的Edit里的内容和客户端计算机的IP地址赋值给了Username和IPAdress

④、远程方法

通过远程方法,服务器端不仅能接收到客户端传过来的参数,而其还能返回参数给客户端,客户端可以根据服务器端传过来的参数做出相应的判断。

服务器端设置及代码如下:

View/Type Library 在接口中new/Modth,然后设置参数,其中参数的类型,如果是从客户端传过来的参数设置为BSTR类型,从服务器端传回给客户端的参数设置为BSTR*类型。如添加了一个名为denglu的方法,参数设置如图:

数据库

则在服务器端就会出现这样的方法:

STDMETHODIMP TUSEdemoImpl::denglu(BSTR UserName, BSTR IPAdress,

BSTR* Acdept)

{

}

在方法里可以添加相应的代码,以实现所要求的功能。如,在里面添加这样的代码:

AnsiString Username=UserName;

AnsiString IPadress=IPAdress;

int Count= Form1->StringGrid1->RowCount-1;

int n=0;

for(int i=0;i<=Count;i++)

if(Username!=Form1->StringGrid1->Cells[1][i]||(Username==Form1->StringGrid1->Cells[1][i]&&IPadress==Form1->StringGrid1->Cells[2][i]))

n++;

else

break;

if(n==Count)

*Acdept=WideString('tru');

else

*Acdept=WideString('fall');

return S_OK;

实现的功能是把客户端传过来的参数与服务器端网格中的内容相比较,如符合要求就给客户端传送字符串“fall”,如没有符合要求的就传字符串“tru”。

查看相关论文专题
加入收藏  打印本文
上一篇论文:基于最大匹配的中文分词改进算法研究
下一篇论文:基于FPGA逻辑分析仪的设计
科技论文分类
科技小论文 数学建模论文
数学论文 节能减排论文
数学小论文 低碳生活论文
物理论文 建筑工程论文
网站设计论文 农业论文
图书情报 环境保护论文
计算机论文 化学论文
机电一体化论文 生物论文
网络安全论文 机械论文
水利论文 地质论文
交通论文
相关计算机论文
最新计算机论文
读者推荐的计算机论文