明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8816|回复: 3

[VBA]请教:ADO如何在ACCESS数据库中新建一个表

[复制链接]
发表于 2005-4-16 09:25:00 | 显示全部楼层 |阅读模式
请教高手:ADO如何在ACCESS数据库中新建一个表
发表于 2005-4-18 11:13:00 | 显示全部楼层
解决思路: 建立Access数据表可以使用ADO编程模型的Command对象执行SQL语句CREATE TABLE来实现。
问题的关键是若数据库中已经存在相同名称的数据表时,SQL语句的执行会出错。要避免这个错误,执行SQL语句前需要判断数据库中是否存在同名数据表。
另外,执行SQL语句也可以使用ADODB.Connection.Execute方法。
具体步骤
1. 创建ADO连接(ADODB.Connection)对象,创建与Access数据库的连接,以下假设该连接对象名为cn。
2. 判断Access数据库中是否存在要创建的同名数据表
ADODB.Connection对象的OpenSchema方法可以从数据库中获取其摘要信息。该方法返回一个包含数据库摘要信息的RecordSet记录集对象。以下VBA函数判断连接对象cn所连接的数据库中是否存在与输入字符串InputStr同名的数据表。
'函数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
rst.MoveFirst
For i = 0 To rst.RecordCount - 1
If UCase(rst.Fields("TABLE_NAME")) = UCase(InputStr) Then '比较数据表名称与输入字符串
Ch17_3_HasTable = True '存在与InputStr同名的数据表
rst.Close '及时关闭记录集对象
Exit Function
End If
rst.MoveNext
Next i
HasTable = False '不存在与InputStr同名的数据表
rst.Close '及时关闭记录集对象
End Function
3. 创建ADODB.Command命令对象执行SQL语句
建立与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 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);"
 楼主| 发表于 2005-4-18 20:56:00 | 显示全部楼层
谢谢指教!我这里用 rst.RecordCount 属性总是通不过,rst.RecordCount 为零,但是用do until         rst.EOF 却没有问题,表都能出来,真是搞不懂。
发表于 2008-4-20 15:54:00 | 显示全部楼层

试试下面实例代码中标注红色的代码,也许对你有帮助

'返回满足条件的记录的总数目
Function getRecordCount(database As ADODB.connection, _
                        sql As String) As Integer
    Dim rst As ADODB.Recordset
    Set rst = New ADODB.Recordset
    rst.Open sql, database, adOpenStatic, adLockReadOnly
    getRecordCount = rst.recordCount
End Function

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-22 20:34 , Processed in 0.246760 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表