AUTHOR:jyu1221(天同) QQ    : 19632995 MSN   : [email protected] EMAIL : [email protected] 
    大家都知道,如果把ACCESS数据库直接放在服务器上,客户端通过文件访问方式来存取数据,这样效率就太低了。 为了解决这个问题,现通过三层结构模型的方式来实现ACCESS的数据库的访问。这里的ACCESS数据库也可以换成任何 一种关系性数据库,具体结构如下: 
   客户程序  |                         中间层                                           |        数据库               |                                                                          |                                       TCP/IP 应用程序 <--> RAccessClient <----------------------->RAccessService <-----ADO,RDO,DAO -----> ACCESS                客户端接口                                服务程序                                           |                                                     |               |                                                     |              |                                                     |              |                                                     |              |--------------在原来的基础上加了一层---------------- | 
     客户端接口采用VB中的类来实现,程序中使用了3个类,CConnection, CRecordset, CTcpIp,其中CTcpIp是关于访问网络方面的,与用户基本上没有直接关系,和用户有关的是CConnection,CRecordset这2个类,它们分别相当于ADO中ADODB.Connection和ADODB.Recordset。有了这2个接口类,就可以用来实现大部分的数据库操作,具体用法如下: 
1.定义对象 Dim conn As New CConnection                 'ADODB.Connection Dim rs   As New CRecordset                  'ADODB.Recordset 
 2.打开服务器端数据库 Dim bConn As Boolean bConn = conn.OpenConnection("192.168.1.155", "DSN=testmdb;DRIVER={Microsoft Access Driver (*.mdb)};UID=admin;PWD=;") If Not bConn Then     MsgBox conn.GetLastError()     Set conn = Nothing     Exit sub End If 
 3.1.打开服务器上的记录集,并获取数据 Set rs = conn.OpenResultset("SELECT * FROM zdxx") If rs Is Nothing Then     MsgBox "记录集合打开错误!"     Exit Sub End If 
'得到总的字段数 nFieldsCound = rs.GetFieldsCount() 
Do Until rs.EOF     sField1 = rs.GetFieldValueByIndex(0)           ’第一个字段的下标从0开始     sField2 = rs.GetFieldValueByIndex(1)     sField3 = rs.GetFieldValueByIndex(2)     Debug.Print sField1, sField2, sField3     rs.MoveNext Loop rs.CloseRecordset set rs = nothing 
 3.2.更新数据库 Dim nRowAffected As Long dim strSQL as String  strSQL = "INSERT  into zdxx(zdxx,lkd,tabstop) values('测试内容','120','1')" '可以是INSERT,UPDATE,DELETE中的任何一种 bOK = conn.Execute(strSQL, nRowAffected) If (Not bOK) Then     MsgBox conn.GetLastError Else     MsgBox "更新记录数:" & nRowAffected End If 
 4.关闭对象 Set rs = Nothing Set conn = Nothing 
     不知道大家看到没有,以上客户端的访问和ADO,RDO,等访问接口差不多。都是比较类似的,如果你会使用ADO,RDO等来访问数据库,则你可以很方便的把它们转变为此接口来实现。可以把你的单机版的ACCESS应用程序,升级为服务器版的ACCESS数据库应用程序。     注意:本接口不支持控件的绑定方式来获取数据,更新数据,除了以上讲的,暂不支持其它的数据库接口,此接口只能是以纯代码方式来访问服务器上的ACCESS。        服务器端的程序已经采用VC++编好,需要的读者可以和我联系。         
  
                                                                                                                 2002.05.17
   
 
  |