VB6.0 写入ACCESS数据库数据有时没有保存

T1982B 2017-07-25 08:41:06
Private Sub Timer1_Timer()  '设定1秒周期
If Working = True Then
WorkStart
End If
End If

Private Sub WorkStart()
If TSOK = True And Createok = False Then
Create_Code
ElseIf TSOK = True And Createok = True And DisplayOK= False Then
DisplayCode
ElseIf TSOK=True and Createok=True And DisplayOK=True And WriteOK=False Then
WriteCode
End If
End Sub

Private Sub Create_Code()
'此段代码为SQL语句执行完记录表插入记录,数据库为Access
‘ Conn.Execute InsertStr’
..........
..........
Createok =True
End Sub

Private Sub DisplayCode()
TEXT1.Text=“ABCDEFGHIJKLMNOPQ”
DisplayOK=True
End Sub


问题:程序在电脑上运行,当Working 和 TSOK 为True时,程序执行。当主界面TEXT1.Text显示字符时,立马关闭电脑主机,重启电脑后,打开数据库记录表中发现没有要插入的记录,请问为什么没有记录?按程序逻辑执行, Create_Code过程已经执行完毕了,已经执行到DisplayCode了,按说数据库记录已经插入完毕了,为什么在数据库中没有发现记录了?谢谢
...全文
704 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
T1982B 2017-07-30
  • 打赏
  • 举报
回复
这几天,做了以下几种方式改进,效果还是一样的,断电后没有保存到记录:1、将程序改成RS.addnew的方式,后面RS.update; 2、数据库改成Access 2010存储; 3、数据库改成SQLite数据库存储。三种方式都不行。有没有大神能帮忙一下啊?或者有空帮忙写段程序,断电测试一下啊(必须像台式机一样直接拔电才行,长按电源键关机都是能保存的),谢谢!难道真的只能加UPS才能解决这个问题了啊,谢谢
nanfei01055 2017-07-27
  • 打赏
  • 举报
回复
引用 6 楼 T1982B 的回复:
Private sub Create_Code()
     Dim InsertStr As String
     Dim ProductDateB As String
     Dim ProductTimeB As String
     Dim Empty_V As String    
     
     Empty_V = ""
     PDateB = Format(Now, "yyyy/mm/dd")
     PTimeB = Format(Now, "HH:MM:SS")
  
     InsertStr = "Insert into Record ( 姓名,性别,籍贯,输入日期,输入时间,备注) Values ('" & AName& "','" & ASex& "','" & Ajiguan& "','" & PDateB & "','" & PTimeB & "','" & Empty_V & "')"
    
     If Conn.State = 0 Then
        DatabaseConnect
     End If
    
     Conn.Execute InsertStr 
   
     If Conn.State = 1 Then
        DatabaseClose
     End If

   Create_Code=True
end Sub
好像Update操作
在方法开头加上 Create_Code = false 而且打个断点看一下,有没有执行 Conn.Execute InsertStr , 执行时有没有报错就行了。 这种问题很明显是代码逻辑有问题,现在年轻人都这么喜欢定义这么多全局变量么。
of123 2017-07-27
  • 打赏
  • 举报
回复
引用 8 楼 T1982B 的回复:
是不是用Conn.Execute 方式,会存在漏写记录的风险吗?现在主要问题是当初断电为什么没有存到那条记录,VB程序已经执行到下一步了,显示字符了,上一步肯定是执行完毕了嘛
看 4 楼解释。
T1982B 2017-07-27
  • 打赏
  • 举报
回复
引用 10 楼 nanfei01055 的回复:
[quote=引用 6 楼 T1982B 的回复:]
Private sub Create_Code()
     Dim InsertStr As String
     Dim ProductDateB As String
     Dim ProductTimeB As String
     Dim Empty_V As String    
     
     Empty_V = ""
     PDateB = Format(Now, "yyyy/mm/dd")
     PTimeB = Format(Now, "HH:MM:SS")
  
     InsertStr = "Insert into Record ( 姓名,性别,籍贯,输入日期,输入时间,备注) Values ('" & AName& "','" & ASex& "','" & Ajiguan& "','" & PDateB & "','" & PTimeB & "','" & Empty_V & "')"
    
     If Conn.State = 0 Then
        DatabaseConnect
     End If
    
     Conn.Execute InsertStr 
   
     If Conn.State = 1 Then
        DatabaseClose
     End If

   Create_Code=True
end Sub
好像Update操作
在方法开头加上 Create_Code = false 而且打个断点看一下,有没有执行 Conn.Execute InsertStr , 执行时有没有报错就行了。 这种问题很明显是代码逻辑有问题,现在年轻人都这么喜欢定义这么多全局变量么。[/quote] 我自己电脑测试程序, Conn.Execute InsertStr 已经执行了。
T1982B 2017-07-27
  • 打赏
  • 举报
回复
业主要是同意加UPS就好了,他们就是不加啊,
T1982B 2017-07-26
  • 打赏
  • 举报
回复
Private sub Create_Code()
Dim InsertStr As String
Dim ProductDateB As String
Dim ProductTimeB As String
Dim Empty_V As String

Empty_V = ""
PDateB = Format(Now, "yyyy/mm/dd")
PTimeB = Format(Now, "HH:MM:SS")

InsertStr = "Insert into Record ( 姓名,性别,籍贯,输入日期,输入时间,备注) Values ('" & AName& "','" & ASex& "','" & Ajiguan& "','" & PDateB & "','" & PTimeB & "','" & Empty_V & "')"

If Conn.State = 0 Then
DatabaseConnect
End If

Conn.Execute InsertStr

If Conn.State = 1 Then
DatabaseClose
End If

Create_Code=True
end Sub

好像Update操作
of123 2017-07-26
  • 打赏
  • 举报
回复
还有,你省略号省略掉的那些语句都做了什么?你选择的是哪一种 Update 类型?影响的因素很多。
of123 2017-07-26
  • 打赏
  • 举报
回复
数据库应用有时不仅仅涉及到本地文件,更多时候需要网络传输和服务器数据保存。 因此,数据库引擎在本地开辟一片缓存。必要时,才会真正更新数据库。 你最简单的办法,就是给你的计算机加一台 UPS,防止它突然掉电。
T1982B 2017-07-26
  • 打赏
  • 举报
回复
我看网上有些windows文件操作介绍,是说我们写入文件时,其实是先写入到计算机缓存中的,还没有到硬盘文件,等系统达到一定条件才会写入到物理磁盘,但我们程序在执行过程中的逻辑已经判断写入成功了,执行下一步逻辑了。当计算机突然断电,计算机系统还没有保存到物理磁盘文件,所以之前的文件操作是没有改变文件的,是这样的原理吗?
T1982B 2017-07-26
  • 打赏
  • 举报
回复
这个游标怎么更新,是软件程序里面更新,还是计算机更新?我现在要确保显示字符的时候,数据一定是写入到硬盘文件了。谢谢
of123 2017-07-26
  • 打赏
  • 举报
回复
只是更新了游标(缓存)。记录集对象 Close 时才会写入数据库文件。
T1982B 2017-07-26
  • 打赏
  • 举报
回复
是不是用Conn.Execute 方式,会存在漏写记录的风险吗?现在主要问题是当初断电为什么没有存到那条记录,VB程序已经执行到下一步了,显示字符了,上一步肯定是执行完毕了嘛
of123 2017-07-26
  • 打赏
  • 举报
回复
换一种做法,使用 Recordset 对象的 AddNew 和 Update 方法。

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧