几何尺寸与公差论坛------致力于产品几何量公差标准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, 07:31 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】求助,vb数据库的几个基本问题

求助,vb数据库的几个基本问题
www.dimcax.com
求助,vb数据库的几个基本问题
大家好,我一直对foxprol数据库的操作和编程相对熟悉,刚接触vb数据库,在大家的帮助下学会了vb与数据库的连接,但接下来请教几个基本问题
1.我用sql语言查到了我需要的记录,怎么样将我需要的记录的某个字段如“重量”赋于指定的变量,以便接下来的操作?
2.工作需要我事先生成一个access数据库,但在程序开始时我需要需要删除所有记录,是物理删除,怎么操作?
3.我需要将几个变量的内容生成一个新的数据库记录怎么操作?
请班主提示或给出简单的示例。
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更新记录集即可。
谢谢班主,其实我需要的只是其中的一小部分就可以了,
set rst = new adodb.recordset
rst.cursorlocation = aduseclient
rst.open yoursql, cn, adopenforwardonly, adlockbatchoptimistic, cmdtext
rst.move '将记录指针移动到需要的位置,此处的move可以是movenext或其它
dim your '声明你的变量
your = rst.fields(字段名称)

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
这一段就可以了
其他的我有那个程序中用不掉,不过我很为之感动.
让班主花费了这么多宝贵的时间真是过意不去
我不需要判断磁盘上有没有同名的数据库,我的意思是事先建好一个需要的数据库结构(材料清单),每次程序运行结束,此数据库中有内容了,我下次执行一个新的任务,必须将此数据库中的记录清除,不清除表和结构,只是清除记录.怪我没说明清楚,让你花了这么大的精力,不好意思,实在感动!
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
回复


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

高级搜索
显示模式

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

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



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


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