原创 用VB6.0开发数据库(二)

2010-3-25 11:26 2370 6 6 分类: 软件与OS

  前面总体上介绍了一下当前在VB平台下的数据库访问技术,这些技术也是当前数据库技术的主流。下面笔者结合近几年的开发经验,给出一些开发经验和小技巧,以供参考:

  经验一:如果数据量不大,而且要求开发周期短的情况,建议使用DAO+Access虽然DAO功能并不强大,但是其对Jet引擎进行了加速优化处理,所以这种搭配应该是比较好的选择。

  经验二:RDO当前已经用的很少了,一般用ADO来替代。

  经验三:(本经验很重要)使用ADO开发时,连接数据库的方式有三种(前面已经叙述了),其中DSN需要用户首先使用要将所要操纵的数据库设置为数据库源并给其命名。方法是在控制面板->管理工具->数据源(ODBC)下面进行配置。比如设置的数据源名称为data,那么可以通过下面几行代码来连接数据库:

Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
'连接数据库
conn.Open "dsn=data"
'打开数据源(即选定操作的数据对象)
rs.Open SQL语句, conn

  但是如果是使用ODBC和OLEDB的方式进行连接,那么大家一定知道在连接字符串上那一长串的代码,不要说对于初学者,就是对于那些经验丰富的程序员来说,也很难记住这一串代码。那么如何可以记住这一串代码呢?其实,方法很简单,只要添加一个ADO Data控件,然后在其属性框中使用向导进行设置后,那么最后向导就会自动生成一段ConnectionString,只需要将这一行代码拷贝下来然后放到conn.open之后的连接字符串参数的位置上就可以了。这条经验希望读者能够记住,实际开发中很实用。

  经验四:前面讲到手动设置ODBC数据源,这里可以通过程序来进行动态设置。首先要清楚的是ODBC的详细信息全部存放在注册表的下述键值内:"HKEY_LOCAL_MACHINE\SOFTWARE\ODBC",通过调用Win32函数WriteProfileString来对相应的键值进行修改即可达到目的。

  经验五:通常将数据库的连接代码和资源释放代码放入各自特定的函数里面,因为一般大一点的程序里需要经常对这两个功能模块进行调用,这样做就可以提高效率,当然很多时候都需要写成连接池的形式。

  经验六:使用VB在SQL中处理含单引号的字符串时,对字符串数据都用单引号引起来,如:

Select * from MyTable Where ID='FirstID'

  若其中的FirstID为First'ID,即中间多出一个单引号,则上述写法将导致错误,解决的办法是将字符串中的每一个单引号用两双引号替换,下面的函数StrToSQL完成该功能,并用单引号将处理后的字符串引起来:

 Private Function StrToSQL(ByVal strValue As String) As String
    StrToSQL = "'" + Replace(strValue, "'", "''") + "'"
 End Function

  在写SQL时如有字符串数据,不管其中有没有单引号,都可以这样使用:


   strValue="First'Id"
   strSQL="Select * from MyTable Where ID="+StrToSQL(strValue)


实例解析

  下面介绍一个实例,来消化以上的相关知识。这里我在一个程序界面下实现了DAO,ADO,ODBC,OLEDB四种数据库访问方式。



E0E8AEC9BD83A8D1DC3F3F8778E9198B.jpg

  程序代码分析:



'整个程序功能是选择不同的连接方式来进行显示工作,三种方式显示效果完全相同
'下面是主程序过程
Private Sub Command1_Click()
 Dim selitem As Integer
 '判断连接数据库的方式
 If Option1.Value = True Then
  selitem = 1
 Else
  If Option2.Value = True Then
   selitem = 2
  Else
   selitem = 3
  End If
 End If

 '选取不同的数据库连接方式
 Select Case selitem
 Case 1:
  '使用DAO的数据库连接方式
  Call ShowByDAO
 Case 2:
  '使用ADO的数据库连接方式
  Call ShowByADO
 Case 3:
  '使用ODBC的数据库连接方式
  Call ShowByODBC
 Case 4:
  '使用OLEDB的数据库连接方式
  Call ShowByOLEDB
 End Select
End Sub

Private Sub ShowByDAO()
 '使用DAO的数据库连接方式
 Dim db As Database
 Dim rs As Recordset
 Dim sqlstr$ '存放查询语句
 Set db = OpenDatabase(App.Path & "\db1.mdb")
 sqlstr = "select * from 成绩表"
 Set rs = db.OpenRecordset(sqlstr)
 '显示结果
 Call GridShow(rs)
End Sub

Sub ShowByADO()
 Dim conn As New ADODB.Connection
 Dim rs As New ADODB.Recordset
 '使用数据源来连接数据库
 conn.Open "dsn=data"
 rs.CursorType = adOpenKeyset
 rs.LockType = adLockOptimistic
 rs.Open "select * from 成绩表", conn
 Call GridShowOfADO(rs)
End Sub

Sub ShowByODBC()
 Dim conn As New ADODB.Connection
 Dim rs As New ADODB.Recordset
 '使用数据源来连接数据库
 conn.Open "Provider=MSDASQL.1;Persist Security Info="False";Data Source="data""
 rs.Open "select * from 成绩表", conn
 '显示结果
 Call GridShowOfADO(rs)
End Sub

Sub ShowByOLEDB()
 Dim conn As New ADODB.Connection
 Dim rs As New ADODB.Recordset
 '使用数据源来连接数据库
 conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path & "\db1.mdb" + ";Persist Security Info="False""
 rs.Open "select * from 成绩表", conn
 '显示结果
 Call GridShowOfADO(rs)
End Sub

Sub GridShow(rs As Recordset)
 '对dao方式进行显示工作
 MSFlexGrid1.TextMatrix(0, 0) = "姓名"
 MSFlexGrid1.TextMatrix(0, 1) = "性别"
 MSFlexGrid1.TextMatrix(0, 2) = "语文"
 MSFlexGrid1.TextMatrix(0, 3) = "数学"
 MSFlexGrid1.TextMatrix(0, 4) = "英语"
 rs.MoveLast
 MSFlexGrid1.Rows = rs.RecordCount + 1
 MSFlexGrid1.Cols = rs.Fields.Count
 Dim i%
 i = 1
 rs.MoveFirst
 While (Not rs.EOF)
  MSFlexGrid1.TextMatrix(i, 0) = rs.Fields(0)
  MSFlexGrid1.TextMatrix(i, 1) = rs.Fields(1)
  MSFlexGrid1.TextMatrix(i, 2) = rs.Fields(2)
  MSFlexGrid1.TextMatrix(i, 3) = rs.Fields(3)
  MSFlexGrid1.TextMatrix(i, 4) = rs.Fields(4)
  rs.MoveNext
  i = i + 1
  'If (rs.EOF = True) Then
  ' Exit For
 Wend
End Sub

Sub GridShowOfADO(rs As ADODB.Recordset)
 '对ado方式进行显示工作
 MSFlexGrid1.TextMatrix(0, 0) = "姓名"
 MSFlexGrid1.TextMatrix(0, 1) = "性别"
 MSFlexGrid1.TextMatrix(0, 2) = "语文"
 MSFlexGrid1.TextMatrix(0, 3) = "数学"
 MSFlexGrid1.TextMatrix(0, 4) = "英语"
 '注意recordcount属性必须在当前记录指针在最后一条记录时才会返回正确的值
 rs.MoveLast
 MSFlexGrid1.Rows = rs.RecordCount + 1
 MSFlexGrid1.Cols = rs.Fields.Count
 Dim i%
 i = 1
 rs.MoveFirst
 While (Not rs.EOF)
  MSFlexGrid1.TextMatrix(i, 0) = rs.Fields(0)
  MSFlexGrid1.TextMatrix(i, 1) = rs.Fields(1)
  MSFlexGrid1.TextMatrix(i, 2) = rs.Fields(2)
  MSFlexGrid1.TextMatrix(i, 3) = rs.Fields(3)
  MSFlexGrid1.TextMatrix(i, 4) = rs.Fields(4)
  rs.MoveNext
  i = i + 1
 Wend
End Sub

Private Sub Command2_Click()
End
End Sub


  上述代码已经在Windows 2000 professional和Visual Basic 6.0的环境下调试成功。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条