求助,vb数据库的几个基本问题
大家好,我一直对foxprol数据库的操作和编程相对熟悉,刚接触vb数据库,在大家的帮助下学会了vb与数据库的连接,但接下来请教几个基本问题1.我用sql语言查到了我需要的记录,怎么样将我需要的记录的某个字段如“重量”赋于指定的变量,以便接下来的操作?
2.工作需要我事先生成一个access数据库,但在程序开始时我需要需要删除所有记录,是物理删除,怎么操作?
3.我需要将几个变量的内容生成一个新的数据库记录怎么操作?
请班主提示或给出简单的示例。 1、用代码建立空白access数据库需要在VB或VBA工程中加载Access类型库:
Sub CreateAccessDB() '创建空白Access数据库文件<BR> Dim AccessApp As Access.Application '首先声明一个Access应用程序对象<BR> Set AccessApp = CreateObject("Access.Application.8") '创建Access应用程序对象<BR> On Error Resume Next<BR> AccessApp.NewCurrentDatabase "D:\VBASample.mdb" '创建新的空白数据库并设置为当前数据库<BR> If Err.Number = 7865 Then '若已经存在同名数据库文件<BR> MsgBox “已经存在名称为D:\VBASample.mdb的文件” , , "明经通道VBA示例"<BR> Err.Clear<BR> AccessApp.OpenCurrentDatabase "D:\VBASample.mdb" '直接打开数据库并设置为当前数据库<BR> End If<BR> If Not Err Then<BR> MsgBox "已经创建了名为D:\VBASample.mdb的Aceess数据库文件", , "明经通道VBA示例"<BR> End If<BR> On Error GoTo 0 '恢复VBA错误处理方式<BR> AccessApp.CloseCurrentDatabase '关闭数据库<BR> Set AccessApp = Nothing '回收AccessApp对象占用的内存<BR>End Sub
2、生成数据表,首先判断Access数据库中是否存在要创建的同名数据表
'函数HasTable,判断数据库中是否存在某数据表<BR>'输入参数:cn--ADODB.Connection类型,ADO数据库连接对象<BR>' InputStr--字符串,要判断是否存在的数据表名称,忽略大小写区别<BR>'返回值:若数据库中存在与InputStr同名的数据表,返回True,否则返回False<BR>Function HasTable(cn As ADODB.Connection, InputStr As String) As Boolean<BR> Dim rst As New ADODB.Recordset '新建记录集集对象<BR> Set rst = cn.OpenSchema(adSchemaTables, TABLE_NAME) '获取数据库全部数据表名称<BR> Dim i As Integer<BR> For i = 0 To rst.RecordCount - 1<BR> If UCase(rst.Fields("TABLE_NAME")) = UCase(InputStr) Then '比较数据表名称与输入字符串<BR> HasTable = True '存在与InputStr同名的数据表<BR> rst.Close '及时关闭记录集对象<BR> Exit Function<BR> End If<BR> Next i<BR> HasTable = False '不存在与InputStr同名的数据表<BR> rst.Close '及时关闭记录集对象<BR>End Function
<BR>建立与ADO数据源的连接后,可以先声明一个ADODB.Command类型的对象变量,然后设置该对象变量的ActiveConnection属性和CommandText属性,指定命令使用的连接和命令文本字符串。命令文本字符串就是完整的SQL语句串,新建Access表使用SQL语句CREATE TABLE,其完整语法为:
<BR>CREATE TABLE 表名 (字段名1 类型[,字段名2 类型,……] [其它参数]);
<BR>其中可选项[其它参数]是与物理存贮有关的参数,由具体数据库系统决定,在Access数据库中无须指定。以上参数表中每个字段的类型后加SQL关键字NOT NULL指定某些字段不允许使用NULL值。
<BR>例如以下代码段创建一个基于连接cn的命令对象cmd,并指定其命令文本为建立数据表line,该表四个字段分别存储AutoCAD直线对象的起点和终点坐标值,字段数据类型为float浮点数。
<BR>Set cmd = New ADODB.Command<BR>Set cmd.ActiveConnection = cn<BR>If Ch17_3_HasTable(cn, “line”) = False Then<BR> cmd.CommandText = "CREATE TABLE line(X1 float,Y1 float,X2 float,Y2 float);"<BR> cmd.Execute<BR>Else<BR> MsgBox "数据库中已经存在数据表line,不能创建", , "明经通道VBA示例"<BR>End If
执行SQL语句,也可以不新建Command对象而直接使用Connection对象的Execute方法:<BR>cn.Execute "CREATE TABLE line(X1 float,Y1 float,X2 float,Y2 float);"
删除数据表中的全部记录可以使用SQL语句DELETE FROM语句,该语句的完整语法为:
<BR>DELETE [表名.*] FROM 表名
<BR>以下的VBA宏DeleteRstFromDb(TableName As String) ‘将指定数据表中的所有记录删除:
Dim cn As ADODB.Connection ‘ADO连接对象<BR>Dim cmd As ADODB.Command ‘ADO命令对象<BR>Dim rst As ADODB.Recordset<BR>Sub DeleteRstFromDb() <BR> ‘请先建立到数据库的ADO连接<BR> Set cmd = New ADODB.Command<BR> Set cmd.ActiveConnection = cn 'cn表示已建立的ADO连接对象<BR> cmd.CommandText = "DELETE FROM " & TableName<BR> cmd.Execute
Set cmd = Nothing<BR> End Sub
5、读取数据库记录
Sub ReadFromDB(YourSQL As String) 'YourSQL应该是完整的SQL语句,以从数据表中获取记录集<BR> ‘请先建立到数据库的ADO连接<BR> Set rst = New ADODB.Recordset<BR> rst.CursorLocation = adUseClient<BR> rst.Open YourSQL, cn, adOpenForwardOnly, adLockBatchOptimistic, CmdText<BR> rst.Move '将记录指针移动到需要的位置,此处的Move可以是MoveNext或其它<BR> Dim Your '声明你的变量<BR> Your = rst.Fields(字段名称)<BR> End Sub
6、写数据表记录
与以上代码相似,在rst.Fieds(字段名称) = Your 后,也就是将要修改的字段赋值后,调用rst.Update更新记录集即可。<BR> 谢谢班主,其实我需要的只是其中的一小部分就可以了,
Set rst = New ADODB.Recordset<BR> rst.CursorLocation = adUseClient<BR> rst.Open YourSQL, cn, adOpenForwardOnly, adLockBatchOptimistic, CmdText<BR> rst.Move '将记录指针移动到需要的位置,此处的Move可以是MoveNext或其它<BR> Dim Your '声明你的变量<BR> Your = rst.Fields(字段名称)<BR>和
Dim cn As ADODB.Connection ‘ADO连接对象<BR>Dim cmd As ADODB.Command ‘ADO命令对象<BR>Dim rst As ADODB.Recordset<BR>Sub DeleteRstFromDb() <BR> ‘请先建立到数据库的ADO连接<BR> Set cmd = New ADODB.Command<BR> Set cmd.ActiveConnection = cn 'cn表示已建立的ADO连接对象<BR> cmd.CommandText = "DELETE FROM " & TableName<BR> cmd.Execute
Set cmd = Nothing<BR>这一段就可以了
其他的我有那个程序中用不掉,不过我很为之感动.
让班主花费了这么多宝贵的时间真是过意不去
我不需要判断磁盘上有没有同名的数据库,我的意思是事先建好一个需要的数据库结构(材料清单),每次程序运行结束,此数据库中有内容了,我下次执行一个新的任务,必须将此数据库中的记录清除,不清除表和结构,只是清除记录.怪我没说明清楚,让你花了这么大的精力,不好意思,实在感动!
页:
[1]