明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2764|回复: 2

求助,vb数据库的几个基本问题

[复制链接]
发表于 2005-4-26 08:18:00 | 显示全部楼层 |阅读模式
大家好,我一直对foxprol数据库的操作和编程相对熟悉,刚接触vb数据库,在大家的帮助下学会了vb与数据库的连接,但接下来请教几个基本问题


1.我用sql语言查到了我需要的记录,怎么样将我需要的记录的某个字段如“重量”赋于指定的变量,以便接下来的操作?


2.工作需要我事先生成一个access数据库,但在程序开始时我需要需要删除所有记录,是物理删除,怎么操作?


3.我需要将几个变量的内容生成一个新的数据库记录怎么操作?


请班主提示或给出简单的示例。
发表于 2005-4-26 15:46:00 | 显示全部楼层
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更新记录集即可。
 楼主| 发表于 2005-4-26 16:12:00 | 显示全部楼层
谢谢班主,其实我需要的只是其中的一小部分就可以了, 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
这一段就可以了 其他的我有那个程序中用不掉,不过我很为之感动. 让班主花费了这么多宝贵的时间真是过意不去 我不需要判断磁盘上有没有同名的数据库,我的意思是事先建好一个需要的数据库结构(材料清单),每次程序运行结束,此数据库中有内容了,我下次执行一个新的任务,必须将此数据库中的记录清除,不清除表和结构,只是清除记录.怪我没说明清楚,让你花了这么大的精力,不好意思,实在感动!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 14:25 , Processed in 0.164778 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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