已有22人关注
数据库运算问题!
发表在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
分享到:
精彩评论 1
学分: LV1
2008-11-18
沙发
读者,您好:
 很高兴您能够成为我们的读者,我们的论坛是为读者服务的,如果您在学习中遇到不懂的书中的地方我们的技术人员会帮您解决的,但是由于我们最近的工作挺忙的,您自己的程序我们的技术人员不能帮您解决,希望您能够谅解!
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照