| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3995 人关注过本帖, 1 人收藏
标题:请老师帮我提速一下程序
取消只看楼主 加入收藏
vbcaonia
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2016-5-4
结帖率:96.67%
收藏(1)
已结贴  问题点数:20 回复次数:17 
请老师帮我提速一下程序

题意是:
1、access数据库中有二个表:表1(数据)、表2(条件);表1每行数据中相邻二个数据空1格,表2每行以等号为界,等号

右边数据中相邻二个数据空1格,等号左边数据区间表示包含右边的数据个数即:1到3个。

2、表2的数据每15行一组在表1中查找,将同时符合每组15行条件的数据提取到VSFlexGrid1

表1(数据)形式:
1 2 3 7 14 15 35
1 2 3 7 17 31 36
1 2 3 7 31 33 35
1 2 3 8 14 22 30
1 2 3 8 18 25 26

表2(条件)形式:
1-3=31 12 24 7 23 3 10
1-1=35 11 16 15 17 26 3
1-1=34 31 27 24 17 33 10
1-2=28 12 6 36 7 26 33


程序运行较慢,请老师帮我修改一下程序已达到快速运行的效果,谢谢!!!


Private Sub Command1_Click() '条件过滤
t = Timer
     Dim arr(), drr(), crr(), tjrr(), tt, gx, tj, dn, pd As Long, brr, krr, ii As Long, kk As Long
    Dim Cnn As New adodb.Connection
    Dim Rst As New adodb.Recordset
    Dim Rs As New adodb.Recordset
    Dim SQL As String, myTable As String
    Set d = CreateObject("scripting.dictionary")
    Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\数据条件源.mdb;Persist Security Info=False"
    SQL = "Select * from " & "表1"
    Rst.Open SQL, Cnn, adOpenKeyset, adLockOptimistic
    ReDim crr(1 To Rst.RecordCount, 1 To 1)
    For ii = 1 To Rst.RecordCount
        crr(ii, 1) = Rst.Fields(0)
        Rst.MoveNext
    Next ii
   
    SQL1 = "Select * from " & "表2"
    Rs.Open SQL1, Cnn, adOpenKeyset, adLockOptimistic
    ReDim arr(1 To Rs.RecordCount, 1 To 1)
    For kk = 1 To Rs.RecordCount
        arr(kk, 1) = Rs.Fields(0)
        Rs.MoveNext
    Next kk


tj = 15
ReDim tjrr(1 To tj, 1 To 12)
For i = 1 To UBound(arr)
    n = n + 1
    tt = Split(arr(i, 1), "=")
    krr = Split(Trim(tt(1)), " ")
    gs = Split(tt(0), "-")
    tjrr(n, 1) = Val(gs(0))
    tjrr(n, 2) = Val(gs(1))
    For j = 0 To UBound(krr)
        tjrr(n, 3 + j) = krr(j)
Next

    If n = tj Then
        For m = 1 To UBound(crr)
            brr = Split(crr(m, 1), " ")
            For k = 1 To tj
                pd = 0
                For l = 3 To UBound(krr) + 3
                    d(tjrr(k, l)) = m
                Next
                For l = 0 To UBound(brr)
                    If d.Exists(brr(l)) Then pd = pd + 1
                Next
                d.RemoveAll
                If pd < CSng(tjrr(k, 1)) Or pd > CSng(tjrr(k, 2)) Then Exit For
            Next
            If k = tj + 1 Then dn = dn + 1: VSFlexGrid1.TextMatrix(dn, 0) = crr(m, 1)
        Next
        n = 0
    End If
Next
MsgBox Timer - t
End Sub
搜索更多相关主题的帖子: If Next 数据 For 条件 
2022-12-01 22:56
vbcaonia
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2016-5-4
收藏
得分:0 
回复 2楼 约定的童话
这运算速度比在vba上慢一半
2022-12-02 16:31
vbcaonia
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2016-5-4
收藏
得分:0 
回复 4楼 mrexcel
数据为800万行,条件为14万行
2022-12-05 20:34
vbcaonia
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2016-5-4
收藏
得分:0 
回复 7楼 风吹过b
可以
2022-12-05 20:57
vbcaonia
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2016-5-4
收藏
得分:0 
回复 4楼 mrexcel
vb-数据库.rar (2.36 MB)
2022-12-06 08:50
vbcaonia
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2016-5-4
收藏
得分:0 
回复 7楼 风吹过b
麻烦 版主将程序转换为 SQL 命令,直接执行查询,谢谢!

vb-数据库.rar (2.36 MB)
2022-12-06 10:07
vbcaonia
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2016-5-4
收藏
得分:0 
回复 13楼 mrexcel
把数据导入就可以了,表1、表2的数据不是固定的,随需要导入数据
2022-12-06 21:50
vbcaonia
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2016-5-4
收藏
得分:0 
回复 12楼 mrexcel
对,2个表都是一个字段,相当于excel的a、b二列然后b列条件在a列数据查找,其结果放在c列。
2022-12-06 22:05
vbcaonia
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2016-5-4
收藏
得分:0 
回复 16楼 jklqwe111
谢谢老师!!!
我先消化一下...
2022-12-06 22:53
vbcaonia
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2016-5-4
收藏
得分:0 
回复 16楼 jklqwe111
老师你好,数据还能增加吗,1-60没有用呀
2022-12-07 15:52
快速回复:请老师帮我提速一下程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.273688 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved