VB中Recordset的添加记录方法区分
来源:互联网 发布:苹果铃声设置软件 编辑:程序博客网 时间:2024/05/01 13:45
今天开始了煤气层水合物项目的进行 ,用一天时间搭建了框架,今天进行了参数录入的模块.在向数据库中写入数据时,遇到了一点问题,当我按下保存的时候,提示文件名,目录名或卷标语法不正确!
With rst
.MoveFirst
(1) '.AddNew
.Fields(1) = txtLowTemp.Text
.Fields(2) = txtHighTemp.Text
.Fields(3) = txtPressure.Text
.Fields(4) = txtLowVacuum.Text
.Fields(5) = txtHighVacuum.Text
.Fields(6) = txtInflux.Text
.Fields(7) = txtOutflux.Text
.Fields(8) = txtCoef.Text
(3).Update
(2)'.Save
.Close
End With
(1)当使用.AddNew语句时,数据表各字段的写法必须为(用“!”的形式):
with rst
!LowTemp = txtLowTemp.Text
!HighTemp = txtHighTemp.Text.
……
end with
而且,使用AddNew的效果是,添加一条新的记录, .MoveFirst的本意,将记录移到表首进行覆盖写入的目的便达不到了,它会在表中新增一条记录,而不是覆盖原记录.
(2) 使用Save语句时,会出现错误提示"文件名,目录名或卷标语法不正确",原因如下:
Recordset对象的save方法是将记录集保存到一个文件中(注意这个文件不是你打开的数据库文件),
语法
recordset.Save FileName, PersistFormat
参数
FileName 可选。文件的完整路径名,用于保存 Recordset。
PersistFormat 可选。PersistFormatEnum 值,指定保存 Recordset 所使用的格式。可以是如下某个常量:
常量 说明
adPersistADTG (默认)使用专用的“Advanced Data Tablegram”格式保存。
adPersistXML 使用 XML 格式保存。
因此,在你第一次在当前数据集中使用这个方法是需要指定文件名
因此,在这个地方使用.Save完全没有意义,达不到目的
(3)使用.Update之后,即可将数据写道表里去,而且进行了覆盖,无需其它的额外操作,
---------------------------------------------------------------------------------------------------------------------------------------------------
续昨天:
另外,在程序首次运行,数据库中表还是一张空表时,可以使用下述判断方法
If rst.EOF Then
txtLowTemp.Text = "0"
txtHighTemp.Text = "0"
txtPressure.Text = "0"
txtLowVacuum.Text = "0"
txtHighVacuum.Text = "0"
txtInflux.Text = "0"
txtOutflux.Text = "0"
txtCoef.Text = "0"
Else
'If Not rst.EOF Then
rst.MoveFirst
txtLowTemp.Text = rst.Fields(1)
txtHighTemp.Text = rst.Fields(2)
txtPressure.Text = rst.Fields(3)
txtLowVacuum.Text = rst.Fields(4)
txtHighVacuum.Text = rst.Fields(5)
txtInflux.Text = rst.Fields(6)
txtOutflux.Text = rst.Fields(7)
txtCoef.Text = rst.Fields(8)
End If
----------------
判断完之后,在进行增加数据记录的时候,必须要使用.AddNew方法.
因为,在数据库中表还是一张空表时,使用.Fields(0) = txtTime.Text 这类语句时,会发生错误:“BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录”
这是由于:使用ADO连接数据库进行查询的时候,数据库将查询结果返回查询端,在查询端的内存里面就会有一个列表,这个列表存放的就是查询的结果。这个内存中的列表就是数据集。在你的程序里面rs就是表示这个数据集。bof表示rs当前的指针是指在了数据集的前面,比如数据集里面有编号为1,2,3,4的4条记录,但是rs指向的编号是-1,这样就会符合了bof的情况。同理,当rs的指针指向5,而第五条记录并不存在,这样就会产生了eof的情况。
如果同时产生了bof和aof的情况,就是说rs的指针既在上界之外也在下届之外,这样只有一种情况,就是rs所代表的数据集是空的,这样rs的指针无论是指到什么地方都是同时具有bof和eof的属性。
你的情况估计是sql语句查询出来的值是空的,因此数据集也是空的,在读取rs数据集里面的值的时候就会报这个错误。
使用 if rs.bof and rs.eof then 这个判断可以判别rs里面是否有没有数据集,如果符合这个条件,说明数据集是空的,在程序中就要绕开对rs里字段的访问。
--------
若需要在表中只保留一条记录,则必须使用delete方法先将表中的记录完全删除,然后再重新打开一个Recordset对象,向里面进行添加记录的操作.(原先的想法:进行覆盖操作的方法,是不对的)
If Not rst.EOF Then '先删除
sql = "delete from GraphicsParam"
Set rst = ExecuteSQL(sql, MsgStr)
End If
sql = "select * from GraphicsParam" '再添加
Set rst = ExecuteSQL(sql, MsgStr)
With rst
.AddNew
.Fields(0) = txtTime.Text
.Fields(1) = txtYMinTemp.Text
.Fields(2) = txtYMaxTemp.Text
.Fields(3) = txtYMaxPress.Text
.Fields(4) = txtYMaxVacuum.Text
.Fields(5) = txtMaxShunFlux.Text
.Fields(6) = txtMaxLeiFlux.Text
.Update
.Close
End With
还有一点:
当在一个窗体中,只有在数据库操作完全完成之后,即在完成该次表操作之后,才能rst.Close。在此之前的所有Close操作,都会导致后面再次操作数据库时,产生错误。
- VB中Recordset的添加记录方法区分
- VB中RecordSet的记录数为-1的原因!
- vb中recordset的用法
- VB中recordset的用法
- 记录集对象RecordSet的方法
- ADO中记录集recordSet的使用
- VB.net 中 ADODB的RecordSet 的使用实例说明
- 记录集Recordset常用的属性和方法
- Recordset的NextRecordset方法
- VB ADODB中的RecordSet.Open打开记录的两个参数adOpenKeyset、adLockBatchOptimistic的详细说明
- VB中鸡肋的Sub/Function区分
- asp中recordSet方法属性
- VB数据库连接recordset open的语法
- VB ADODB中的RecordSet.Open的参数
- ASP中recordset所有的属性与方法
- ASP中recordset所有的属性与方法 简介
- vb数据库编程(一)--记录集Recordset
- RecordSet的属性和方法
- ConvertUtf8ToGBK
- 阳光明媚,开版自贺
- 在ASP.NET中跟踪和恢复大文件下载
- 页面减肥
- 网页CSS样式表设计十条技巧1
- VB中Recordset的添加记录方法区分
- 网页CSS样式表设计十条技巧2
- .Net 常用加密算法类
- 网页CSS样式表设计十条技巧3
- c++试题
- 笑死1
- [转贴]用Oracle的SQL*Plus工具创建HTML页面
- VC广播例程
- weblogic常见问题