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