几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » 数据库ObjectDBX
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


 
 
主题工具 搜索本主题 显示模式
旧 2009-04-19, 04:54 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】[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
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
 


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 06:09 AM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多