- 积分
- 3266
- 明经币
- 个
- 注册时间
- 2002-7-5
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2005-4-26 15:46:00
|
显示全部楼层
1、用代码建立空白access数据库需要在VB或VBA工程中加载Access类型库:
Sub CreateAccessDB() '创建空白Access数据库文件 Dim AccessApp As Access.Application '首先声明一个Access应用程序对象 Set AccessApp = CreateObject("Access.Application.8") '创建Access应用程序对象 On Error Resume Next AccessApp.NewCurrentDatabase "D:\VBASample.mdb" '创建新的空白数据库并设置为当前数据库 If Err.Number = 7865 Then '若已经存在同名数据库文件 MsgBox “已经存在名称为D:\VBASample.mdb的文件” , , "明经通道VBA示例" Err.Clear AccessApp.OpenCurrentDatabase "D:\VBASample.mdb" '直接打开数据库并设置为当前数据库 End If If Not Err Then MsgBox "已经创建了名为D:\VBASample.mdb的Aceess数据库文件", , "明经通道VBA示例" End If On Error GoTo 0 '恢复VBA错误处理方式 AccessApp.CloseCurrentDatabase '关闭数据库 Set AccessApp = Nothing '回收AccessApp对象占用的内存 End Sub
2、生成数据表,首先判断Access数据库中是否存在要创建的同名数据表
'函数HasTable,判断数据库中是否存在某数据表 '输入参数:cn--ADODB.Connection类型,ADO数据库连接对象 ' InputStr--字符串,要判断是否存在的数据表名称,忽略大小写区别 '返回值:若数据库中存在与InputStr同名的数据表,返回True,否则返回False Function HasTable(cn As ADODB.Connection, InputStr As String) As Boolean Dim rst As New ADODB.Recordset '新建记录集集对象 Set rst = cn.OpenSchema(adSchemaTables, TABLE_NAME) '获取数据库全部数据表名称 Dim i As Integer For i = 0 To rst.RecordCount - 1 If UCase(rst.Fields("TABLE_NAME")) = UCase(InputStr) Then '比较数据表名称与输入字符串 HasTable = True '存在与InputStr同名的数据表 rst.Close '及时关闭记录集对象 Exit Function End If Next i HasTable = False '不存在与InputStr同名的数据表 rst.Close '及时关闭记录集对象 End Function
建立与ADO数据源的连接后,可以先声明一个ADODB.Command类型的对象变量,然后设置该对象变量的ActiveConnection属性和CommandText属性,指定命令使用的连接和命令文本字符串。命令文本字符串就是完整的SQL语句串,新建Access表使用SQL语句CREATE TABLE,其完整语法为:
CREATE TABLE 表名 (字段名1 类型[,字段名2 类型,……] [其它参数]);
其中可选项[其它参数]是与物理存贮有关的参数,由具体数据库系统决定,在Access数据库中无须指定。以上参数表中每个字段的类型后加SQL关键字NOT NULL指定某些字段不允许使用NULL值。
例如以下代码段创建一个基于连接cn的命令对象cmd,并指定其命令文本为建立数据表line,该表四个字段分别存储AutoCAD直线对象的起点和终点坐标值,字段数据类型为float浮点数。
Set cmd = New ADODB.Command Set cmd.ActiveConnection = cn If Ch17_3_HasTable(cn, “line”) = False Then cmd.CommandText = "CREATE TABLE line(X1 float,Y1 float,X2 float,Y2 float);" cmd.Execute Else MsgBox "数据库中已经存在数据表line,不能创建", , "明经通道VBA示例" End If
执行SQL语句,也可以不新建Command对象而直接使用Connection对象的Execute方法: cn.Execute "CREATE TABLE line(X1 float,Y1 float,X2 float,Y2 float);"
删除数据表中的全部记录可以使用SQL语句DELETE FROM语句,该语句的完整语法为:
DELETE [表名.*] FROM 表名 [WHERE 条件]
以下的VBA宏DeleteRstFromDb(TableName As String) ‘将指定数据表中的所有记录删除:
Dim cn As ADODB.Connection ‘ADO连接对象 Dim cmd As ADODB.Command ‘ADO命令对象 Dim rst As ADODB.Recordset Sub DeleteRstFromDb() ‘请先建立到数据库的ADO连接 Set cmd = New ADODB.Command Set cmd.ActiveConnection = cn 'cn表示已建立的ADO连接对象 cmd.CommandText = "DELETE FROM " & TableName cmd.Execute
Set cmd = Nothing End Sub
5、读取数据库记录
Sub ReadFromDB(YourSQL As String) 'YourSQL应该是完整的SQL语句,以从数据表中获取记录集 ‘请先建立到数据库的ADO连接 Set rst = New ADODB.Recordset rst.CursorLocation = adUseClient rst.Open YourSQL, cn, adOpenForwardOnly, adLockBatchOptimistic, CmdText rst.Move '将记录指针移动到需要的位置,此处的Move可以是MoveNext或其它 Dim Your '声明你的变量 Your = rst.Fields(字段名称) End Sub
6、写数据表记录
与以上代码相似,在rst.Fieds(字段名称) = Your 后,也就是将要修改的字段赋值后,调用rst.Update更新记录集即可。
|
|