首页上一页 1 下一页尾页 1 条记录 1/1页
数据库运算问题!
发表在VB答疑区
2008-09-25
是否精华
是
否
版块置顶:
是
否
您好!
我做了一个成绩统计数据库,它的要求是:
在TextBox里面输入任意科目的名称,然后单击计算,就可以把相应科目,相加的结果,显示在ListBox里
面!
我虽然已经做出来了,但是它的运算速度太慢了,比如有5000条数据,用我的算法要20几秒钟,才能运算
完毕,而我同学做的程序只需要3秒钟左右就能计算完毕,而我的程序在运算的过程中,程序停止响应,运算
完了之后才能恢复正常,虽然可以在代码当中加入DoEvents,但是加了之后运算速度更慢了,可能是我的
算法有问题吧,所以请您帮我看一下,在得到相同结果的同时,加快程序的运算速度!
不能上传附件,所以我把代码贴上来,请您帮我看一下,在此非常感谢您们的帮助!!!
数据库名:Score
表名: Chengji
项目有:学号 姓名 语文 数学 英语 物理 化学 历史 生物 政治 (姓名为文本类型外,其它全部为数
字类型)
窗口控件有:Textbox1、Listbox1、DataGrid1各一个,和三个Command1数组
Public conn As New ADODB.Connection '定义数据连接字符串
Public rs As New ADODB.Recordset '定义记录集
Dim db$, Appdisk$, aa$, i%, j%, k%, tdata!
Dim s
Private Sub Form_Load()
Appdisk = Trim(App.Path)
If Right(Appdisk, 1) <> "\" Then Appdisk = Appdisk & "\"
db = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & Appdisk & "score.mdb"
conn.CursorLocation = adUseClient
conn.Open db '打开数据库连接
'******************************************************
rs.Open "chengji", conn, adOpenKeyset, adLockPessimistic '打开记录集
rs.Sort = "学号"
If rs.RecordCount > 0 Then
rs.MoveFirst
rs.MoveLast
End If
'*******************************************************
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
Command1(0).Caption = "计 算"
Command1(1).Caption = "退 出"
Command1(2).Caption = "生 成"
Text1.Text = "语文+数学+英语+物理+化学+历史+生物"
List1.Clear
Set DataGrid1.DataSource = rs
For i = 0 To 9
DataGrid1.Columns(i).Width = 950
Next
End Sub
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0
If InStr(Text1.Text, "+") > 0 Then
s = Split(Trim(Text1.Text), "+")
rs.MoveFirst
List1.Clear
Do
tdata = 0
aa = ""
For i = 0 To UBound(s)
tdata = tdata + rs.Fields(Trim(s(i)))
aa = aa & Trim(Str(rs.Fields(Trim(s(i))))) & "+"
Next i
List1.AddItem rs.Fields("姓名") & " " & Mid(aa, 1, Len(aa) - 1) & " =" & Str(tdata)
rs.MoveNext
Loop Until rs.EOF
End If
Case 1
End
Case 2
For i = 0 To 5000
rs.AddNew
rs.Fields("学号") = Format(Str(i), "000000")
rs.Fields("姓名") = "张" & i
For j = 0 To 7
rs.Fields(j + 2) = Int(Rnd * 51) + 50
Next j
rs.Update
Next i
End Select
End Sub
我做了一个成绩统计数据库,它的要求是:
在TextBox里面输入任意科目的名称,然后单击计算,就可以把相应科目,相加的结果,显示在ListBox里
面!
我虽然已经做出来了,但是它的运算速度太慢了,比如有5000条数据,用我的算法要20几秒钟,才能运算
完毕,而我同学做的程序只需要3秒钟左右就能计算完毕,而我的程序在运算的过程中,程序停止响应,运算
完了之后才能恢复正常,虽然可以在代码当中加入DoEvents,但是加了之后运算速度更慢了,可能是我的
算法有问题吧,所以请您帮我看一下,在得到相同结果的同时,加快程序的运算速度!
不能上传附件,所以我把代码贴上来,请您帮我看一下,在此非常感谢您们的帮助!!!
数据库名:Score
表名: Chengji
项目有:学号 姓名 语文 数学 英语 物理 化学 历史 生物 政治 (姓名为文本类型外,其它全部为数
字类型)
窗口控件有:Textbox1、Listbox1、DataGrid1各一个,和三个Command1数组
Public conn As New ADODB.Connection '定义数据连接字符串
Public rs As New ADODB.Recordset '定义记录集
Dim db$, Appdisk$, aa$, i%, j%, k%, tdata!
Dim s
Private Sub Form_Load()
Appdisk = Trim(App.Path)
If Right(Appdisk, 1) <> "\" Then Appdisk = Appdisk & "\"
db = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & Appdisk & "score.mdb"
conn.CursorLocation = adUseClient
conn.Open db '打开数据库连接
'******************************************************
rs.Open "chengji", conn, adOpenKeyset, adLockPessimistic '打开记录集
rs.Sort = "学号"
If rs.RecordCount > 0 Then
rs.MoveFirst
rs.MoveLast
End If
'*******************************************************
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
Command1(0).Caption = "计 算"
Command1(1).Caption = "退 出"
Command1(2).Caption = "生 成"
Text1.Text = "语文+数学+英语+物理+化学+历史+生物"
List1.Clear
Set DataGrid1.DataSource = rs
For i = 0 To 9
DataGrid1.Columns(i).Width = 950
Next
End Sub
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0
If InStr(Text1.Text, "+") > 0 Then
s = Split(Trim(Text1.Text), "+")
rs.MoveFirst
List1.Clear
Do
tdata = 0
aa = ""
For i = 0 To UBound(s)
tdata = tdata + rs.Fields(Trim(s(i)))
aa = aa & Trim(Str(rs.Fields(Trim(s(i))))) & "+"
Next i
List1.AddItem rs.Fields("姓名") & " " & Mid(aa, 1, Len(aa) - 1) & " =" & Str(tdata)
rs.MoveNext
Loop Until rs.EOF
End If
Case 1
End
Case 2
For i = 0 To 5000
rs.AddNew
rs.Fields("学号") = Format(Str(i), "000000")
rs.Fields("姓名") = "张" & i
For j = 0 To 7
rs.Fields(j + 2) = Int(Rnd * 51) + 50
Next j
rs.Update
Next i
End Select
End Sub