高分求解!为什么我的VB程序无法将已录入的数据保存到ACCESS数据库中???

bilit2008 2007-07-17 12:13:23
我的程序在VB6.0下可以正常运行,是一个简单的学生信息录入程序
我在VB6.0下单击运行后,点击"录入",输入几行数据,然后点击"保存"
都没有问题,可是当我打开数据库文件时,发现没有任何数据被保存

我使用ADO控件访问数据库

请问这到底是怎么回事?

PS:下面是代码,比较多

这是main_students_edit.frm的文件中的内容
VERSION 5.00
Object = "{67397AA1-7FB1-11D0-B148-00A0C922E820}#6.0#0"; "MSADODC.OCX"
Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "MSFLXGRD.OCX"
Begin VB.Form main_students_edit
BorderStyle = 1 'Fixed Single
Caption = "学生信息录入"
ClientHeight = 6960
ClientLeft = 45
ClientTop = 420
ClientWidth = 8070
LinkTopic = "Form2"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 6960
ScaleWidth = 8070
StartUpPosition = 3 '窗口缺省
Begin VB.TextBox Text1
Height = 495
Left = 0
TabIndex = 6
Top = 360
Visible = 0 'False
Width = 1215
End
Begin VB.Frame Frame3
Height = 800
Left = 3480
TabIndex = 4
Top = 6000
Width = 4455
Begin VB.CommandButton Quit
Caption = "&Q 退出"
Height = 375
Left = 3360
TabIndex = 15
Top = 240
Width = 975
End
Begin VB.CommandButton Cancel
Caption = "&C 取消"
Height = 375
Left = 2280
TabIndex = 14
Top = 240
Width = 975
End
Begin VB.CommandButton Save
Caption = "&S 保存"
Height = 375
Left = 1200
TabIndex = 13
Top = 240
Width = 975
End
Begin VB.CommandButton Edit
Caption = "&E 录入"
Height = 375
Left = 120
TabIndex = 12
Top = 240
Width = 975
End
End
Begin VB.Frame Frame2
Height = 800
Left = 240
TabIndex = 3
Top = 6000
Width = 3135
Begin VB.CommandButton Count
Caption = "人数汇总"
Height = 375
Left = 120
TabIndex = 16
Top = 240
Width = 1095
End
Begin VB.Label Total
Alignment = 2 'Center
BorderStyle = 1 'Fixed Single
BeginProperty Font
Name = "宋体"
Size = 12
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 1920
TabIndex = 11
Top = 240
Width = 800
End
Begin VB.Label Label5
Caption = "共录入 人"
Height = 255
Left = 1320
TabIndex = 10
Top = 360
Width = 1695
End
End
Begin VB.Frame Frame1
Height = 735
Left = 240
TabIndex = 2
Top = 1080
Width = 7695
Begin VB.TextBox jsr
Height = 270
Left = 960
TabIndex = 7
Top = 240
Width = 1815
End
Begin VB.Label rq
Height = 255
Left = 5160
TabIndex = 9
Top = 285
Width = 1935
End
Begin VB.Label Label3
Caption = "录入日期:"
Height = 255
Left = 3960
TabIndex = 8
Top = 285
Width = 975
End
Begin VB.Label Label2
Alignment = 2 'Center
Caption = "经手人:"
Height = 255
Left = 240
TabIndex = 5
Top = 280
Width = 855
End
End
Begin MSAdodcLib.Adodc Adodc1
Height = 375
Left = 0
Top = 3480
Visible = 0 'False
Width = 2055
_ExtentX = 3625
_ExtentY = 661
ConnectMode = 0
CursorLocation = 3
IsolationLevel = -1
ConnectionTimeout= 15
CommandTimeout = 30
CursorType = 3
LockType = 3
CommandType = 1
CursorOptions = 0
CacheSize = 50
MaxRecords = 0
BOFAction = 0
EOFAction = 0
ConnectStringType= 1
Appearance = 1
BackColor = -2147483643
ForeColor = -2147483640
Orientation = 0
Enabled = -1
Connect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=tickets.mdb;Persist Security Info=False"
OLEDBString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=tickets.mdb;Persist Security Info=False"
OLEDBFile = ""
DataSourceName = ""
OtherAttributes = ""
UserName = ""
Password = ""
RecordSource = "select * from students"
Caption = "Adodc1"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "宋体"
Size = 9
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
_Version = 393216
End
Begin MSFlexGridLib.MSFlexGrid MS1
Height = 3975
Left = 240
TabIndex = 1
Top = 1920
Width = 7695
_ExtentX = 13573
_ExtentY = 7011
_Version = 393216
Enabled = 0 'False
End
Begin VB.Label Label1
Caption = "学生信息录入"
BeginProperty Font
Name = "华文新魏"
Size = 42
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 855
Left = 1320
TabIndex = 0
Top = 120
Width = 5175
End
End
Attribute VB_Name = "main_students_edit"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
...全文
374 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bilit2008 2007-07-17
  • 打赏
  • 举报
回复
这里是本帖相关文件的下载地址:
http://www.duote.net/3FF70073B95A44AC
hongsongboy 2007-07-17
  • 打赏
  • 举报
回复
原帖
For i = 1 To 200
If MS1.TextMatrix(i, 1) <> "" Then
Set rs1 = New ADODB.Recordset
rs1.Open "select * from students", cnn, adOpenDynamic, adLockBatchOptimistic
'添加学生信息到"students"中
rs1.AddNew
If MS1.TextMatrix(i, 1) <> "" Then rs1.Fields("姓名") = MS1.TextMatrix(i, 1)
If MS1.TextMatrix(i, 2) <> "" Then rs1.Fields("系别") = MS1.TextMatrix(i, 2)
If MS1.TextMatrix(i, 3) <> "" Then rs1.Fields("班级") = MS1.TextMatrix(i, 3)
'If jsr.Text <> "" Then rs1.Fields("经手人") = jsr.Text
'If jsr.Text <> "" Then rs1.Fields("操作员") = main.St1.Panels(3).Text
'If rq.Caption <> "" Then rs1.Fields("录入日期") = rq.Caption
End If
Next i
rs1.Update '更新表

For i = 1 To 200
If MS1.TextMatrix(i, 1) <> "" Then
Set rs1 = New ADODB.Recordset
rs1.Open "select * from students", cnn, adOpenDynamic, adLockBatchOptimistic
'添加学生信息到"students"中
rs1.AddNew
If MS1.TextMatrix(i, 1) <> "" Then rs1.Fields("姓名") = MS1.TextMatrix(i, 1)
If MS1.TextMatrix(i, 2) <> "" Then rs1.Fields("系别") = MS1.TextMatrix(i, 2)
If MS1.TextMatrix(i, 3) <> "" Then rs1.Fields("班级") = MS1.TextMatrix(i, 3)
'If jsr.Text <> "" Then rs1.Fields("经手人") = jsr.Text
'If jsr.Text <> "" Then rs1.Fields("操作员") = main.St1.Panels(3).Text
'If rq.Caption <> "" Then rs1.Fields("录入日期") = rq.Caption
'修改后
rs1.Update '更新表
End If
Next i

======================================================
红松软件 http://www.zbhssoft.com/
软件论坛 http://5x51.com/hongsong/
本网站推出只要注册本站会员,就送一套正版软件活动,此
活动截至日期2007-08-15。所需要点软件在本网站中自己挑
选一个。

论坛前10位会员,赠送VIP会员资格!!
======================================================
bilit2008 2007-07-17
  • 打赏
  • 举报
回复
下面是edit.vbp文件的内容


Type=Exe
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\WINDOWS\system32\stdole2.tlb#OLE Automation
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX
Reference=*\G{00000205-0000-0010-8000-00AA006D2EA4}#2.5#0#..\Program Files\Common Files\system\ado\msado25.tlb#Microsoft ActiveX Data Objects 2.0 Library
Object={67397AA1-7FB1-11D0-B148-00A0C922E820}#6.0#0; MSADODC.OCX
Form=main_students_edit.frm
Object={5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0; MSFLXGRD.OCX
Startup="main_students_edit"
HelpFile=""
ExeName32="火车票订票系统.exe"
Path32="E:\火车票订票系统"
Command32=""
Name="工程1"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
VersionCompanyName="sx"
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1

[MS Transaction Server]
AutoRefresh=1






把上面的代码分别保存在文件名为edit.vbp和main_students_edit.frm的文件中,就可以在装有VB6.0的机子上进行操作了
因为时间比较急,所以把全部代码都帖出来了

数据库是ACCESS数据库,名为tickets.mdb,数据库中只有一个表:名为students,表中有三个字段:姓名,系别,班级.数据库就自己建一下吧


在此先谢过了

[整个帖子完]
bilit2008 2007-07-17
  • 打赏
  • 举报
回复
PS:因为系统提示"帖子太长",所以分成好几个帖子,下面继续

这也是main_students_edit.frm的文件中的内容
'(1)声明变量及数据集对象

'声明变量
Dim W, Y, i

'声明数据集对象
Dim rs1 As New ADODB.Recordset
Dim cnn As New ADODB.Connection


'(2)初始化用户界面
Private Sub Form_Load()
'定义MS1表的行数、列数
MS1.Rows = 201
MS1.Cols = 4

'定义MS1表的列宽及表头信息
W = Array("500", "1000", "1000", "1500")
Y = Array("序号", " 姓名", " 系别", " 班级")
For i = 0 To 3
MS1.ColWidth(i) = W(i)
MS1.TextMatrix(0, i) = Y(i)
Next i

'定义MS1表的行号
For i = 1 To 200
MS1.TextMatrix(i, 0) = i
Next i

'设置jsr无效
jsr.Enabled = False

'设置Save按钮无效
Save.Enabled = False

'设置录入日期
rq.Caption = Date

'添加系别列表

'添加班级列表
End Sub


'(3)用户单击【录入】按钮后,为界面控件赋值
Private Sub Edit_Click()
'设置MS1有效
MS1.Enabled = True

'设置jsr有效
jsr.Enabled = True

'jsr获得焦点
jsr.SetFocus

'设置文本框有效
Text1.Enabled = True

'确定文本框在MS1表格中的大小和位置
Text1.Width = MS1.CellWidth
Text1.Height = MS1.CellHeight
Text1.Left = MS1.CellLeft + MS1.Left
Text1.Top = MS1.CellTop + MS1.Top

'设置按钮有效或无效
Edit.Enabled = False
Save.Enabled = True
Cancel.Enabled = True
Quit.Enabled = True

End Sub


'(4)下面代码用于处理用户键盘相应及对学生人数进行汇总

'jsr获得焦点时的背景颜色
Private Sub jsr_GotFocus()
jsr.BackColor = &HFFFF00
End Sub
'jsr失去焦点时的背景颜色
Private Sub jsr_LostFocus()
jsr.BackColor = &HFFFFFF
End Sub
'jsr的键盘响应
Private Sub jsr_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then '按【Enter】键
Text1.Visible = True
'到达第1行,第1列
MS1.Row = 1
MS1.Col = 1
Text1.SetFocus
End If
End Sub

'MS1的键盘响应
Private Sub MS1_Click()
'在MS1表格第1行或大于第1行时
If MS1.Row >= 1 Then
Text1.Visible = True 'text1可见
Text1.SetFocus
End If
End Sub
'Text1在MS1中移动
'此段代码还需再研究
Private Sub MS1_Entercell()
Dim X, Y, p As String
If MS1.CellWidth <= 0 Or MS1.CellHeight <= 0 Then Exit Sub
X = MS1.TextMatrix(MS1.FixedRows, MS1.Col)
Y = MS1.TextMatrix(MS1.Row, 0)
If Y <> "" Then
If MS1.Col - MS1.LeftCol <= 3 Then MS1.LeftCol = MS1.LeftCol + 1
If MS1.CellWidth > 0 And MS1.CellHeight > 0 Then
Text1.Width = MS1.CellWidth
Text1.Height = MS1.CellHeight
Text1.Left = MS1.CellLeft + MS1.Left
Text1.Top = MS1.CellTop + MS1.Top
End If
X = MS1.TextMatrix(MS1.FixedRows, MS1.Col)
Y = MS1.TextMatrix(MS1.Row, 0)
p = MS1.TextMatrix(MS1.Row, MS1.Col)
Text1.Text = MS1.Text
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End If
End Sub



'Text1的键盘响应
'此段代码需要好好研究
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = vbKeyReturn Then
If MS1.Col = 3 Then
MS1.Row = MS1.Row + 1
MS1.Col = 1
Else
If MS1.Col + 1 <= MS1.Cols - 1 Then
MS1.Col = MS1.Col + 1
Else
If MS1.Row + 1 <= MS1.Rows - 1 Then
MS1.Row = MS1.Row + 1
MS1.Col = 1
End If
End If
End If
End If

If KeyCode = vbKeyUp Then
If MS1.Row > 1 Then MS1.Row = MS1.Row - 1
End If

If KeyCode = vbKeyDown And (MS1.TextMatrix(MS1.Row, 1)) <> "" Then
If MS1.Row < 200 Then MS1.Row = MS1.Row + 1
End If

If KeyCode = vbKeyLeft Then
If Text1.Text <> "" Then
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End If
If MS1.Col - 4 <= MS1.Cols + 1 Then
MS1.Col = MS1.Col - 1
If MS1.Col = 0 Then MS1.Col = 1
Else
If MS1.Row + 1 <= MS1.Row - 1 Then
MS1.Row = MS1.Row + 1
MS1.Col = 1
End If
End If
End If

If KeyCode = vbKeyRight Then
If Text1.Text <> "" Then
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End If
If MS1.Col + 1 <= MS1.Cols - 1 Then
MS1.Col = MS1.Col + 1
Else
If MS1.Row + 1 <= MS1.Rows - 1 Then
MS1.Row = MS1.Row + 1
MS1.Col = 1
End If
End If
End If
End Sub

Private Sub Text1_Change()
MS1.Text = Text1.Text
End Sub
'人数汇总
Private Sub Count_Click()
Dim j As Integer
For i = 1 To 200
If MS1.TextMatrix(i, 1) <> "" Then
j = j + 1
End If
Next i
Total.Caption = j
End Sub


'(5)用户单击【保存】按钮,程序将保存表格中的学生信息到学生信息表students
Private Sub Save_Click()
Dim strCnn As String
strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=tickets.mdb;Persist Security Info=False"
Set cnn = New ADODB.Connection '创建链接
cnn.Open strCnn '打开链接
For i = 1 To 200
If MS1.TextMatrix(i, 1) <> "" Then
Set rs1 = New ADODB.Recordset
rs1.Open "select * from students", cnn, adOpenDynamic, adLockBatchOptimistic
'添加学生信息到"students"中
rs1.AddNew
If MS1.TextMatrix(i, 1) <> "" Then rs1.Fields("姓名") = MS1.TextMatrix(i, 1)
If MS1.TextMatrix(i, 2) <> "" Then rs1.Fields("系别") = MS1.TextMatrix(i, 2)
If MS1.TextMatrix(i, 3) <> "" Then rs1.Fields("班级") = MS1.TextMatrix(i, 3)
'If jsr.Text <> "" Then rs1.Fields("经手人") = jsr.Text
'If jsr.Text <> "" Then rs1.Fields("操作员") = main.St1.Panels(3).Text
'If rq.Caption <> "" Then rs1.Fields("录入日期") = rq.Caption
End If
Next i
rs1.Update '更新表
rs1.Close
cnn.Close
'清空数据
For i = 1 To 200
For j = 1 To 3
MS1.TextMatrix(i, j) = ""
Next j
Next i
jsr.Text = ""
Total.Caption = ""

Text1.Visible = False
MS1.Enabled = False
jsr.Enabled = False

Save.Enabled = False
Edit.Enabled = True
Cancel.Enabled = False
Quit.Enabled = True
End Sub
Private Sub Cancel_Click() '取消操作
For i = 1 To 200
For j = 1 To 3
MS1.TextMatrix(i, j) = ""
Next j
Next i
jsr.Text = ""
Total.Caption = ""

Text1.Visible = False
MS1.Enabled = False
jsr.Enabled = False

Save.Enabled = False
Edit.Enabled = True
Cancel.Enabled = False
Quit.Enabled = True
Edit.SetFocus
End Sub
Private Sub Quit_Click()
'main.Enabled = True
Unload Me
End Sub

PS:main_students_edit.frm的文件中的内容完
bilit2008 2007-07-17
  • 打赏
  • 举报
回复
哈哈,楼上正解
非常感谢
我昨天找了一天都没有找到这个错误,现在终于可以保存数据了.呵呵
再次感谢
马上结帖

PS:顺便查了一下MSDN
adLockOptimistic 开放式记录锁定(逐条)。提供者使用开放式锁定,只在调用 Update 方法时锁定记录。
adLockBatchOptimistic 开放式批更新。用于与立即更新模式相反的批更新模式。
zzyong00 2007-07-17
  • 打赏
  • 举报
回复

rs1.Open "select * from students", cnn, adOpenDynamic, adLockBatchOptimistic
就这儿一点错误!!!
改为:
rs1.Open "select * from students", cnn, adOpenDynamic, adLockOptimistic
bilit2008 2007-07-17
  • 打赏
  • 举报
回复
Leftie(左手,为人民币服务) ( ) 信誉:105 2007-07-17 14:45:44 得分: 0
====================================================================================
Set cnn = New ADODB.Connection '创建链接
cnn.Open strCnn '打开链接
For i = 1 To 200
If MS1.TextMatrix(i, 1) <> "" Then
Set rs1 = New ADODB.Recordset
rs1.Open "select * from students", cnn, adOpenDynamic, adLockBatchOptimistic
'添加学生信息到"students"中
rs1.AddNew
If MS1.TextMatrix(i, 1) <> "" Then rs1.Fields("姓名") = MS1.TextMatrix(i, 1)
If MS1.TextMatrix(i, 2) <> "" Then rs1.Fields("系别") = MS1.TextMatrix(i, 2)
If MS1.TextMatrix(i, 3) <> "" Then rs1.Fields("班级") = MS1.TextMatrix(i, 3)
'If jsr.Text <> "" Then rs1.Fields("经手人") = jsr.Text
'If jsr.Text <> "" Then rs1.Fields("操作员") = main.St1.Panels(3).Text
'If rq.Caption <> "" Then rs1.Fields("录入日期") = rq.Caption

rs1.Update '---->这句放这里试试
End If
Next i
rs1.Close
cnn.Close
===================================================================================

这种方法试过了,还是不行...

另:insert into tablename这句,我百度了一下,好像是SQL数据库里的.
小弟还没多学SQL数据库,不是很清楚
饮水需思源 2007-07-17
  • 打赏
  • 举报
回复
也这可这样:
For i = 1 To 200
If MS1.TextMatrix(i, 1) <> "" Then
cnn.execute "insert into tablename(...) values(...)"
end if
next i
cnn.Close
饮水需思源 2007-07-17
  • 打赏
  • 举报
回复
Set cnn = New ADODB.Connection '创建链接
cnn.Open strCnn '打开链接
For i = 1 To 200
If MS1.TextMatrix(i, 1) <> "" Then
Set rs1 = New ADODB.Recordset
rs1.Open "select * from students", cnn, adOpenDynamic, adLockBatchOptimistic
'添加学生信息到"students"中
rs1.AddNew
If MS1.TextMatrix(i, 1) <> "" Then rs1.Fields("姓名") = MS1.TextMatrix(i, 1)
If MS1.TextMatrix(i, 2) <> "" Then rs1.Fields("系别") = MS1.TextMatrix(i, 2)
If MS1.TextMatrix(i, 3) <> "" Then rs1.Fields("班级") = MS1.TextMatrix(i, 3)
'If jsr.Text <> "" Then rs1.Fields("经手人") = jsr.Text
'If jsr.Text <> "" Then rs1.Fields("操作员") = main.St1.Panels(3).Text
'If rq.Caption <> "" Then rs1.Fields("录入日期") = rq.Caption

rs1.Update '---->这句放这里试试
End If
Next i
rs1.Close
cnn.Close

1,216

社区成员

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

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