![]() |
【转帖】[vba]请教:ado如何在access数据库中新建一个表
[vba]请教:ado如何在access数据库中新建一个表
www.dimcax.com [vba]请教:ado如何在access数据库中新建一个表请教高手:ado如何在access数据库中新建一个表 解决思路: 建立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);" 谢谢指教!我这里用 rst.recordcount 属性总是通不过,rst.recordcount 为零,但是用do until rst.eof 却没有问题,表都能出来,真是搞不懂。 试试下面实例代码中标注红色的代码,也许对你有帮助 '返回满足条件的记录的总数目 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 |
所有的时间均为北京时间。 现在的时间是 01:45 PM. |