问一个在vb6+access2000中批量录入文本数据的问题
这个文本是这样的:
DECS2000 Daily Report: Generated 01/02/05 11:22:15
For the period 01/01/05 12:00:00 - 01/02/05 12:00:00
Station 1 / 中心子站
PM-10 NO NOX SO2 CO O3
01/01/05
1200 0.137 18 46 66 1.4 17
1300 0.107 12 40 59 1.8 22
1400 0.122 8 32 47 1.4 28
1500 0.108 5 22 24 1.1 30
1600 0.076 4 25 20 1.3 24
1700 0.056 6 41 41 2.2 13
1800 0.104 5 40 45 2.3 12
1900 0.110 8 49 58 2.4 7
2000 0.126 15 57 63 2.6 4
2100 0.149 18 59 71 2.9 3
2200 0.157 8 46 66 3.2 5
2300 0.167 -1 -1 -1 -1 -1
2400 0.169 -1 -1 -1 -1 -1
01/02/05
0100 0.156 -1 -1 62 -1 -1
0200 0.154 8 38 56 2.5 -1
0300 0.145 14 42 62 2.4 3
0400 0.141 13 40 49 2.3 2
0500 0.150 13 39 45 2.3 2
0600 0.126 18 43 42 2.2 2
0700 0.142 18 42 44 2.1 2
0800 0.126 23 45 55 2.2 4
0900 0.139 29 50 97 2.2 5
1000 0.154 23 44 84 2.1 7
1100 0.145 22 44 111 2.1 8
制表: 复核: 审核:
我的这个form是这样的,一个commondialog6.0的打开文件控件
一个按钮,这个按钮可以将文本的数据用ADODB2.9 library(我用的是创天版vb6加上了那个dll文件)导入建立好的access2000数据库中,
这个数据库路径为D:\cmaq.mdb
读文本我用的是一行一行读的方法,然后合并中间的空格(因为不同源文件每个数值之间的空格并不一样多,所以只能用合并空格),然后用split函数根据空格把这行里的数据分配到每个变量里,最后利用recordset 导入到数据库中。导入到这行:2400 0.169 -1 -1 -1 -1 -1
的时候告诉我错误 "类型不匹配 "并且这行没有导入,我以前用adodc控件作的时候绑定了文本框,没有导入数据只显示在文本框里的时候一切正常,可是一录入也是这个地方卡住了,这里面第一列是时间,其他都在access2000中设为单精度型
我怎么办呢?请各位给个答案,小弟这只菜鸟已经研究了好多天,可是没有结果,谢谢啦!!
下面是我的这个按钮的代码:
Private Sub recorddata_Click()
CommonDialogOpen.Filter = "文本文件(*.TXT)|*.TXT|Prn文件|*.prn "
CommonDialogOpen.ShowOpen
If CommonDialogOpen.FileName <> " " Then
Open CommonDialogOpen.FileName For Input As 1 '打开文件
On Error GoTo PROBLEM:
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
MsgBox (CommonDialogOpen.FileName) '打开了文件成功,显示文件名。
Dim mycnn As ADODB.Connection
Dim myrs As ADODB.Recordset
Dim mystr As String
Set mycnn = New ADODB.Connection
mystr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\cmaq.mdb;Persist Security Info=False "
Set mycnn = New ADODB.Connection
mycnn.Open mystr
Set myrs = New ADODB.Recordset
myrs.CursorType = adOpenKeyset
myrs.LockType = adLockOptimistic
myrs.Open "cmaq ", mycnn, , , adCmdTable
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
Dim str1 As String
Dim astr1() As String, astr2() As String
Dim i As Long
str1 = StrConv(InputB$(LOF(1), 1), vbUnicode)
astr1 = Split(str1, vbCrLf)
For i = 0 To UBound(astr1)
strline = astr1(i)
'strLine为一行的字符串
'多个空格替换为一个
While Not InStr(strline, " ") = 0
strline = Replace(strline, " ", " ")
'显示行字符串成功,合并多空格为一个空格成功。
'遍历astr2得到
Wend
MsgBox strline '对行字符串进行操作
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
Select Case i
Case 4 '第四行和第十八行
constDateStr1 = Trim(strline)
Dastr = Right(constDateStr1, 2) + "/ "
constDateStr1 = Dastr + Left(constDateStr1, 5)
MsgBox constDateStr1
Case 18
constDateStr2 = Trim(strline)
MsgBox constDateStr2
Dastr = Right(constDateStr2, 2) + "/ "
constDateStr2 = Dastr + Left(constDateStr2, 5)
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
Case 5 To 17, 19 To 28 '剩下的行
astr2 = Split(strline, " ")
temp = Left(astr2(0), 2) + ": " + Right(astr2(0), 2)
MsgBox temp
myrs.AddNew
myrs!D_t_time = temp
If i < 17 Then
myrs!D_d_date = constDateStr1
Else
myrs!D_d_date = constDateStr2
End If
tempPM10 = CSng(astr2(1))
tempNO = CSng(astr2(2))
tempNOX = CSng(astr2(3))
tempSO2 = CSng(astr2(4))
tempCO = CSng(astr2(5))
tempO3 = CSng(astr2(6))
myrs!D_f_PM10 = tempPM10
myrs!D_f_NO = tempNO
myrs!D_f_NOX = tempNOX
myrs!D_f_SO2 = tempSO2
myrs!D_f_CO = tempCO
myrs!D_f_O3 = tempO3
myrs.Update
End Select
Next
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
myrs.Close
mycnn.Close
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
Close #1
End If
Exit Sub
PROBLEM:
MsgBox "Error Opening File ", , Err.Description
End Sub
[解决办法]
把数据库第一列改为字符型。或者,把你的数据改成 "24:00 "。
------解决方案--------------------
同意楼上,
可能是你数据库中第一列时间字段类型与录入的类型不匹配造成的,将数据库中时间字段改为字符型即可