前几天,和寝室的兄弟用VB做了个项目,我主要负责数据库方面,因为是第一次用VB,所以在开发过程中遇到了一系列问题,当我做完整个项目后,感觉到这些问题应该好好总结一下,因为这些问题新人在开发数据库时可能也会常常遇见,接下来我就从最基本的问题谈起:
- 数据源问题
我们经研究决定采用了大多数vb程序开发所采用的形式,既在设计器里添加个DataEnvironment(数据源环境设计器),这样可以更快捷的创建ADO Connection和Command对象来访问数据(因为是图形界面自然比写代码快了,呵呵),然后在DataEnvironment1里添加个Connection(指定连接数据库的方法和数据库路径什么的),最后在添加个Commmand(可以或取数据库连接中任何数据的详细信息,在属性的数据库对象中选则表,并将其名字改为当前选中的表名),下面为书写方便,指定将DataEnvironment1改名为 DataEnv,将Connection改名为Conn,将Commmand改名为table. - 如何使用数据源
举个简单例子就可以了,例如对table表中的数据进行增,删,改,查这几个最基本的操作,可以分别用下面的几条语句即可实现:
查询:
dim sql as string
sql = "select * from table"
DataEnv.rstable.Open sql, DataEnv.Conn, adOpenDynamic, adLockOptimistic
若引用table里面的数据只需直接用DataEnv.ratable("table_ID")即可
修改:
dim sql as string
sql = "select * from table"
DataEnv.rstable.Open sql, DataEnv.Conn, adOpenDynamic, adLockOptimistic
DataEnv.rstable("ID")=2
DataEnv.rstable.update
删除:
和前面的一样,只需注意sql语句的定位,然后调用DataEnv.rstable.delete即可
插入:
dim sql as string
sql = "select * from table"
DataEnv.rstable.Open sql, DataEnv.Conn, adOpenDynamic, adLockOptimistic
dataenv.rstable.addnew
DataEnv.rstable("ID")=3
DataEnv.rstable.update
执行后数据库将插入ID为3的新纪录 - 执行操作时应该注意的问题
最重要也是人们最易错的事情是数据源的打开和关闭,这里可以直接
dataenv.rstable.close
关闭即可,另外,委防止错误,可以在打开前加入如下代码:
If DataEnv.rstable.State = adStateOpen Then
DataEnv.rstable.Close
End If
在关闭前加如下代码
If DataEnv.rstable.State = adStateClose Then
DataEnv.rstable.Open
End If
这两段代码是判断当前数据源是打开还是关闭的(和有用的的哦,常常在异常处理时对数据源进行操作,非常实用),读者可自行使用 - 数据的显示
在读出数据后最重要的当然是显示出来,方法有很多,这里只介绍一种,DataGrid,个人认为此工具性能和功能都还算比较强进的,在这里只介绍如何动态的设计数据源.
其实很简单,如果前面的都会的话下面的应该没什么问题的
DataEnv.table.Open "select * from table", DataEnv.Conn, adOpenDynamic, adLockOptimistic
DataGrid.DataMember = "table"
Set DataGrid.DataSource = DataEnv
DataGrid.Refresh
DataEnv.rstable.Close
将这几句代码加入窗体的Load()函数中,这样在窗体运行时可自动读取记录,或加到相应位置也可以,看读者需要了. - DataGrid的数据的刷新
其实这个也很简单,但本人比较笨,是挨个属性试才试出的,现将代码给出
DataEnv.table.Open "select * from table where ID=1", DataEnv.Conn, adOpenDynamic, adLockOptimistic
DataEnv.rstable.Requery '这句最重要,应该是刷新当前数据源的记录集,这样控件所显示的应该是最新记录
DataGrid.DataMember = "table"
Set DataGrid.DataSource = DataEnv
DataGrid.Refresh
DataEnv.rstable.Close
执行后DataGrid只显示ID为1的记录,可以放在单击按钮处,呵呵 - 异常处理
这个很重要,在实际中往往遇到一些不可知的问题,常常可以用如下代码来解决
on error goto a:
exit sub
a: if err.num<>0 then
'处理语句,可以加上数据源的关闭什么的
end if - 报表处理
这是一般性问题,大多数数据库操作最后大多是利用报表打印,其中方法很多,在这里只介绍一种我认为比较简单的,并且是用到前面介绍的数据源.首先添加一个报表设计器datareport,将数据源设为前面的DataEnv,之后选中关联的表(table)即可,非常简单.下面最重要的是动态设定报表设计器的数据源,这样可以通过单击按钮或是查询定位一条记录后让报表显示该记录,代码如下
If DataEnv.table.State = adStateOpen Then
DataEnv.table.Close
End If
Dim sql As String
sql = "select * from table where ID=1"
DataEnv.talbe.Open sql, DataEnv.Conn, adOpenDynamic, adLockOptimistic
If DataEnv.table.EOF And DataEnv.table.BOF Then
Set datareport.DataSource = DataEnv
End If
dataenv.conn.close
本段代码可以灵活使用,还可以加上异常处理等.
可能还会还有一些其他的问题,目前可能我还没有遇到,如果遇到的话我会即使补充进来的,欢迎大家一起讨论.如有错误的地方请大家指出,及时更正