petty 发表于 2005-4-26 08:18:00

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

大家好,我一直对foxprol数据库的操作和编程相对熟悉,刚接触vb数据库,在大家的帮助下学会了vb与数据库的连接,但接下来请教几个基本问题


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


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


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


请班主提示或给出简单的示例。

leeyeafu 发表于 2005-4-26 15:46:00

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 " &amp;        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>

petty 发表于 2005-4-26 16:12:00

谢谢班主,其实我需要的只是其中的一小部分就可以了,



        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 " &amp;        TableName<BR>                cmd.Execute


Set cmd = Nothing<BR>这一段就可以了


其他的我有那个程序中用不掉,不过我很为之感动.


让班主花费了这么多宝贵的时间真是过意不去


我不需要判断磁盘上有没有同名的数据库,我的意思是事先建好一个需要的数据库结构(材料清单),每次程序运行结束,此数据库中有内容了,我下次执行一个新的任务,必须将此数据库中的记录清除,不清除表和结构,只是清除记录.怪我没说明清楚,让你花了这么大的精力,不好意思,实在感动!
页: [1]
查看完整版本: 求助,vb数据库的几个基本问题