前提:
文本A中有100万数据,每读取一行数据,都要读出一个字符串,然后从access数据库中的表B中查找这个字符串所对应的另一个字符串,然后返回所对应的这个字符串。access数据库表B中只有ID和这个字符串以及这个字符串所对应的另一个字符串三个参数。问题是:数据量很大,access数据库表B中有100万行数据,而文本A中有100万行数据,每一行都要转换的话,就相当于100万×100万次。运行速度非常慢,有什么可以提高运行速度的优化程序嘛?现在想到的是每查找到一行数据,返回字符串后就把这一行删除掉。除了这个方法,还有其他的优化方法嘛?非常非常感谢,这个问题对我来说非常重要,希望高手们指教!!!程序如下:
主程序:
Dim s As String, stemp As String, imsitemp As String, i As Integer, countertemp As Double
Dim m As IntegerDim sArr() As String, sArrTemp() As StringOpen FileIn For Input As #1
Open FileOut For Output As #2
Do While Not EOF(1)
Line Input #1, s
sArr = Split(s)
imsi = sArr(0) & sArr(1) & sArr(2)
msisdn = MsisdnCheck(imsi)
函数调用:
Function MsisdnCheck(imsi As String) As String
On Error GoTo ErrGoto
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection
Dim strConn, strsql, strBuff As String
strConn = "DSN=SCH"
conn.Open strConn
strsql = "select * from IMSI_MSISDN where imsi='" + imsi + "'"
Set rs = conn.Execute(strsql)
' rt.Open strsql, cnn, adOpenDynamic, adLockOptimistic
If rs.EOF = True And rs.BOF = True Then
MsisdnCheck = " "
Else
MsisdnCheck = rs.Fields(2)
End If
rs.Close
ErrGoto:
' 用户按了“取消”按钮
Exit Function
文本A中有100万数据,每读取一行数据,都要读出一个字符串,然后从access数据库中的表B中查找这个字符串所对应的另一个字符串,然后返回所对应的这个字符串。access数据库表B中只有ID和这个字符串以及这个字符串所对应的另一个字符串三个参数。问题是:数据量很大,access数据库表B中有100万行数据,而文本A中有100万行数据,每一行都要转换的话,就相当于100万×100万次。运行速度非常慢,有什么可以提高运行速度的优化程序嘛?现在想到的是每查找到一行数据,返回字符串后就把这一行删除掉。除了这个方法,还有其他的优化方法嘛?非常非常感谢,这个问题对我来说非常重要,希望高手们指教!!!程序如下:
主程序:
Dim s As String, stemp As String, imsitemp As String, i As Integer, countertemp As Double
Dim m As IntegerDim sArr() As String, sArrTemp() As StringOpen FileIn For Input As #1
Open FileOut For Output As #2
Do While Not EOF(1)
Line Input #1, s
sArr = Split(s)
imsi = sArr(0) & sArr(1) & sArr(2)
msisdn = MsisdnCheck(imsi)
函数调用:
Function MsisdnCheck(imsi As String) As String
On Error GoTo ErrGoto
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection
Dim strConn, strsql, strBuff As String
strConn = "DSN=SCH"
conn.Open strConn
strsql = "select * from IMSI_MSISDN where imsi='" + imsi + "'"
Set rs = conn.Execute(strsql)
' rt.Open strsql, cnn, adOpenDynamic, adLockOptimistic
If rs.EOF = True And rs.BOF = True Then
MsisdnCheck = " "
Else
MsisdnCheck = rs.Fields(2)
End If
rs.Close
ErrGoto:
' 用户按了“取消”按钮
Exit Function
100万*100万, 这个数量级是不对的。你循环A肯定是100万了,但是数据库查询应该不是一个循环
会快
On Error GoTo ErrGoto
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection
Dim strConn, strsql, strBuff As String
strConn = "DSN=SCH"
conn.Open strConn
strsql = "select * from IMSI_MSISDN where imsi='" + imsi + "'"
Set rs = conn.Execute(strsql) If rs.EOF = True And rs.BOF = True Then
MsisdnCheck = " "
Else
MsisdnCheck = rs.Fields(2)
rs.Delete '这个为啥不执行呢?一执行就出错,直接跳出函数
rs.Update
End If
rs.CloseErrGoto:
Exit Function
End Function
----------------------------
打开access,选择:文件/获取外部数据/链接表,然后按向导操作。这样就可以如操作access一样操作这个链接表了
这样的RS是readOnly的