dim db As Database dim rs as recordset Dim strsql As String strsql = "select 表名.字段各 from 表名" rs1 = db.OpenRecordset(strsql, dbOpenDynaset) BeginTrans rs1.addnew rs1.fields(0)=实际内容‘rs1.field(0)指表中的第一个字段,实际内容的数据类型要同表中字段的类型相同 .... rs1.Update CommitTrans
以下是我曾经用过的方法,你稍作修改就可以用(DAO方式) '--------------------------将文本转换为Access(宝康)----------------@@ '文本文件名CAPTURED.REC,在转换时要去掉后缀 'schema.ini为转换时必须的文件,与文本文件在同一目录下 '此例中以空格作为分隔符,你可视需要修改。 'CAPTURED.MDB为中间库,也可不要而直接在同一库内操作 If UCase(Right(SourceFile, 12)) = "CAPTURED.REC" Then If Not Fso.FileExists(SourceFolder & "\CAPTURED.MDB") Then FileCopy App.Path & "\schema.ini", SourceFolder & "\schema.ini" FileCopy App.Path & "\设置信息.mdb", SourceFolder & "\CAPTURED.MDB" FileCopy SourceFile, SourceFolder & "\CAPTURED" '去掉扩展名
Set SourceFile = Fso.GetFile(SourceFolder & "\CAPTURED") Set Ts = SourceFile.OpenAsTextStream(ForReading, TristateUseDefault) S = Ts.ReadAll '读取文件的内容 Ts.Close For I = 8 To 1 Step -1 S = Replace(S, Space(I), " ") '将所有连续空格替换为单一空格 Next Set Ts = SourceFile.OpenAsTextStream(ForWriting) Ts.Write S '写入文件 Ts.Close
Set Db = OpenDatabase(SourceFolder & "\CAPTURED.MDB") Set Tabel1 = Db.CreateTableDef("Temp") Tabel1.Connect = "Text;database=" & SourceFolder Tabel1.SourceTableName = "CAPTURED" Db.TableDefs.Append Tabel1 Db.Execute "Select Temp.Number ,路口信息.路口名称,Temp.Date,Temp.Time,Temp.RedTime InTo Vehicle From Temp,路口信息 Where Temp.Roadnum=路口信息.路口代码" Db.TableDefs.Delete "Temp" Db.TableDefs.Delete "路口信息" Db.TableDefs.Delete "方向" Db.Close Kill SourceFolder & "\CAPTURED" Kill SourceFolder & "\schema.ini" Set SourceFile = Fso.GetFile(SourceFolder & "\CAPTURED.MDB") GoTo Here Else MsgBox "该数据已转换过", 16, "注意" Exit Sub End If End If -------------------------------------------------------------------- schema.ini文件内容,从Col1开始为字段名,即文本文件的头一行内容 [CAPTURED] ColNameHeader=True CharacterSet=OEM Format=Delimited( ) Col1=Number Char Width 12 Col2=Time Char Width 8 Col3=Date Char Width 10 Col4=RoadNum Char Width 14 Col5=RedTime Char Width 3 Col6=Speed Char Width 6 Col7=Length Char Width 4 Col8=Status Char Width 1
以下是我曾经用过的方法,你稍作修改就可以用(DAO方式) '--------------------------将文本转换为Access(宝康)----------------@@ '文本文件名CAPTURED.REC,在转换时要去掉后缀 'schema.ini为转换时必须的文件,与文本文件在同一目录下 '此例中以空格作为分隔符,你可视需要修改。 'CAPTURED.MDB为中间库,也可不要而直接在同一库内操作 If UCase(Right(SourceFile, 12)) = "CAPTURED.REC" Then If Not Fso.FileExists(SourceFolder & "\CAPTURED.MDB") Then FileCopy App.Path & "\schema.ini", SourceFolder & "\schema.ini" FileCopy App.Path & "\设置信息.mdb", SourceFolder & "\CAPTURED.MDB" FileCopy SourceFile, SourceFolder & "\CAPTURED" '去掉扩展名
Set SourceFile = Fso.GetFile(SourceFolder & "\CAPTURED") Set Ts = SourceFile.OpenAsTextStream(ForReading, TristateUseDefault) S = Ts.ReadAll '读取文件的内容 Ts.Close For I = 8 To 1 Step -1 S = Replace(S, Space(I), " ") '将所有连续空格替换为单一空格 Next Set Ts = SourceFile.OpenAsTextStream(ForWriting) Ts.Write S '写入文件 Ts.Close
Set Db = OpenDatabase(SourceFolder & "\CAPTURED.MDB") Set Tabel1 = Db.CreateTableDef("Temp") Tabel1.Connect = "Text;database=" & SourceFolder Tabel1.SourceTableName = "CAPTURED" Db.TableDefs.Append Tabel1 Db.Execute "Select Temp.Number ,路口信息.路口名称,Temp.Date,Temp.Time,Temp.RedTime InTo Vehicle From Temp,路口信息 Where Temp.Roadnum=路口信息.路口代码" Db.TableDefs.Delete "Temp" Db.TableDefs.Delete "路口信息" Db.TableDefs.Delete "方向" Db.Close Kill SourceFolder & "\CAPTURED" Kill SourceFolder & "\schema.ini" Set SourceFile = Fso.GetFile(SourceFolder & "\CAPTURED.MDB") GoTo Here Else MsgBox "该数据已转换过", 16, "注意" Exit Sub End If End If -------------------------------------------------------------------- schema.ini文件内容,从Col1开始为字段名,即文本文件的头一行内容 [CAPTURED] ColNameHeader=True CharacterSet=OEM Format=Delimited( ) Col1=Number Char Width 12 Col2=Time Char Width 8 Col3=Date Char Width 10 Col4=RoadNum Char Width 14 Col5=RedTime Char Width 3 Col6=Speed Char Width 6 Col7=Length Char Width 4 Col8=Status Char Width 1
新建一个EXE工程,然后在工程内添加一个类模块 Class1:Option ExplicitDim inStrSource As String '源字符串 Dim inStrSeparator As String '分隔符字符串 Dim inCount As Integer '子串数量 Dim inSubString() As String '子串数组 Dim blnIsExecute As Boolean '是否已拆分Private Sub Class_Initialize() '初始化 inStrSource = "" inStrSeparator = "" inCount = 0 ReDim inSubString(0) As String inSubString(0) = "" blnIsExecute = False End SubPublic Property Get SourceString() As String SourceString = inStrSource End PropertyPublic Property Let SourceString(ByVal vStrSource As String) inStrSource = vStrSource blnIsExecute = False End PropertyPublic Property Get Separator() As String Separator = inStrSeparator End PropertyPublic Property Let Separator(ByVal vStrSeparator As String) If Len(vStrSeparator) <> 1 Then vStrSeparator = Left(vStrSeparator, 1) End If
inStrSeparator = vStrSeparator blnIsExecute = FalseEnd PropertyPublic Function SubStringCount() As Integer If Not blnIsExecute Then Call Execute
SubStringCount = inCount End Function Private Sub Execute() Dim intSubStrCount As Integer Dim intFirstSubLong As Integer Dim strRightString As String Dim inStrTemp As String
inStrTemp = inStrSource & inStrSeparator
'循环取值 While Not Len(inStrTemp) = 0 intFirstSubLong = InStr(1, inStrTemp, inStrSeparator) If Not IsNull(intFirstSubLong) Then intSubStrCount = intSubStrCount + 1
inStrTemp = Mid(inStrTemp, intFirstSubLong + 1, Len(inStrTemp)) End If Wend
'得到子串数量 inCount = UBound(inSubString()) + 1
blnIsExecute = True
End SubPublic Function SubString(Index As Integer) As String If Not blnIsExecute Then Call Execute SubString = inSubString(Index) End FunctionPublic Function U_Bound() As Integer If Not blnIsExecute Then Call Execute
U_Bound = inCount - 1 End FunctionPublic Function L_Bound() As Integer L_Bound = 0 End Function
再在From1中添加如下代码:Option ExplicitPrivate Sub Form_Load() Dim a As New Class1
Dim fs As Object, ts As Object Dim fileName As String
Dim txtLine As String
Dim cn As Object
Set cn = CreateObject("ADODB.Connection")
Dim sql As String
With cn .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Password=1234;User ID=Admin;Data Source=" & App.Path & "\data.mdb" .ConnectionTimeout = 30 .CursorLocation = adUseClient End With
dim rs as recordset
Dim strsql As String
strsql = "select 表名.字段各 from 表名"
rs1 = db.OpenRecordset(strsql, dbOpenDynaset)
BeginTrans
rs1.addnew
rs1.fields(0)=实际内容‘rs1.field(0)指表中的第一个字段,实际内容的数据类型要同表中字段的类型相同
....
rs1.Update
CommitTrans
'--------------------------将文本转换为Access(宝康)----------------@@
'文本文件名CAPTURED.REC,在转换时要去掉后缀
'schema.ini为转换时必须的文件,与文本文件在同一目录下
'此例中以空格作为分隔符,你可视需要修改。
'CAPTURED.MDB为中间库,也可不要而直接在同一库内操作
If UCase(Right(SourceFile, 12)) = "CAPTURED.REC" Then
If Not Fso.FileExists(SourceFolder & "\CAPTURED.MDB") Then
FileCopy App.Path & "\schema.ini", SourceFolder & "\schema.ini"
FileCopy App.Path & "\设置信息.mdb", SourceFolder & "\CAPTURED.MDB"
FileCopy SourceFile, SourceFolder & "\CAPTURED" '去掉扩展名
Set SourceFile = Fso.GetFile(SourceFolder & "\CAPTURED")
Set Ts = SourceFile.OpenAsTextStream(ForReading, TristateUseDefault)
S = Ts.ReadAll '读取文件的内容
Ts.Close
For I = 8 To 1 Step -1
S = Replace(S, Space(I), " ") '将所有连续空格替换为单一空格
Next
Set Ts = SourceFile.OpenAsTextStream(ForWriting)
Ts.Write S '写入文件
Ts.Close
Set Db = OpenDatabase(SourceFolder & "\CAPTURED.MDB")
Set Tabel1 = Db.CreateTableDef("Temp")
Tabel1.Connect = "Text;database=" & SourceFolder
Tabel1.SourceTableName = "CAPTURED"
Db.TableDefs.Append Tabel1
Db.Execute "Select Temp.Number ,路口信息.路口名称,Temp.Date,Temp.Time,Temp.RedTime InTo Vehicle From Temp,路口信息 Where Temp.Roadnum=路口信息.路口代码"
Db.TableDefs.Delete "Temp"
Db.TableDefs.Delete "路口信息"
Db.TableDefs.Delete "方向"
Db.Close
Kill SourceFolder & "\CAPTURED"
Kill SourceFolder & "\schema.ini"
Set SourceFile = Fso.GetFile(SourceFolder & "\CAPTURED.MDB")
GoTo Here
Else
MsgBox "该数据已转换过", 16, "注意"
Exit Sub
End If
End If
--------------------------------------------------------------------
schema.ini文件内容,从Col1开始为字段名,即文本文件的头一行内容
[CAPTURED]
ColNameHeader=True
CharacterSet=OEM
Format=Delimited( )
Col1=Number Char Width 12
Col2=Time Char Width 8
Col3=Date Char Width 10
Col4=RoadNum Char Width 14
Col5=RedTime Char Width 3
Col6=Speed Char Width 6
Col7=Length Char Width 4
Col8=Status Char Width 1
'--------------------------将文本转换为Access(宝康)----------------@@
'文本文件名CAPTURED.REC,在转换时要去掉后缀
'schema.ini为转换时必须的文件,与文本文件在同一目录下
'此例中以空格作为分隔符,你可视需要修改。
'CAPTURED.MDB为中间库,也可不要而直接在同一库内操作
If UCase(Right(SourceFile, 12)) = "CAPTURED.REC" Then
If Not Fso.FileExists(SourceFolder & "\CAPTURED.MDB") Then
FileCopy App.Path & "\schema.ini", SourceFolder & "\schema.ini"
FileCopy App.Path & "\设置信息.mdb", SourceFolder & "\CAPTURED.MDB"
FileCopy SourceFile, SourceFolder & "\CAPTURED" '去掉扩展名
Set SourceFile = Fso.GetFile(SourceFolder & "\CAPTURED")
Set Ts = SourceFile.OpenAsTextStream(ForReading, TristateUseDefault)
S = Ts.ReadAll '读取文件的内容
Ts.Close
For I = 8 To 1 Step -1
S = Replace(S, Space(I), " ") '将所有连续空格替换为单一空格
Next
Set Ts = SourceFile.OpenAsTextStream(ForWriting)
Ts.Write S '写入文件
Ts.Close
Set Db = OpenDatabase(SourceFolder & "\CAPTURED.MDB")
Set Tabel1 = Db.CreateTableDef("Temp")
Tabel1.Connect = "Text;database=" & SourceFolder
Tabel1.SourceTableName = "CAPTURED"
Db.TableDefs.Append Tabel1
Db.Execute "Select Temp.Number ,路口信息.路口名称,Temp.Date,Temp.Time,Temp.RedTime InTo Vehicle From Temp,路口信息 Where Temp.Roadnum=路口信息.路口代码"
Db.TableDefs.Delete "Temp"
Db.TableDefs.Delete "路口信息"
Db.TableDefs.Delete "方向"
Db.Close
Kill SourceFolder & "\CAPTURED"
Kill SourceFolder & "\schema.ini"
Set SourceFile = Fso.GetFile(SourceFolder & "\CAPTURED.MDB")
GoTo Here
Else
MsgBox "该数据已转换过", 16, "注意"
Exit Sub
End If
End If
--------------------------------------------------------------------
schema.ini文件内容,从Col1开始为字段名,即文本文件的头一行内容
[CAPTURED]
ColNameHeader=True
CharacterSet=OEM
Format=Delimited( )
Col1=Number Char Width 12
Col2=Time Char Width 8
Col3=Date Char Width 10
Col4=RoadNum Char Width 14
Col5=RedTime Char Width 3
Col6=Speed Char Width 6
Col7=Length Char Width 4
Col8=Status Char Width 1
方法如下:
从文本中读出一行(相关的文本操作函数可以在MSdN中找到)
你的文本格式是采用^分割,那么就判别这一句中的“^”,两个这样符号之间的数据就是有用数据。
然后用
对象名.AddNew
对象名.Fields("字段")=你要添加的数据
最后使用Update更新。
OK!
注意在使用AddNew方法是要了解ADO对象的状态是否处于锁定状态,如果是就不能使用Addnew方法。
Dim inStrSeparator As String '分隔符字符串
Dim inCount As Integer '子串数量
Dim inSubString() As String '子串数组
Dim blnIsExecute As Boolean '是否已拆分Private Sub Class_Initialize() '初始化
inStrSource = ""
inStrSeparator = ""
inCount = 0
ReDim inSubString(0) As String
inSubString(0) = ""
blnIsExecute = False
End SubPublic Property Get SourceString() As String
SourceString = inStrSource
End PropertyPublic Property Let SourceString(ByVal vStrSource As String)
inStrSource = vStrSource
blnIsExecute = False
End PropertyPublic Property Get Separator() As String
Separator = inStrSeparator
End PropertyPublic Property Let Separator(ByVal vStrSeparator As String)
If Len(vStrSeparator) <> 1 Then
vStrSeparator = Left(vStrSeparator, 1)
End If
inStrSeparator = vStrSeparator
blnIsExecute = FalseEnd PropertyPublic Function SubStringCount() As Integer
If Not blnIsExecute Then Call Execute
SubStringCount = inCount
End Function
Private Sub Execute()
Dim intSubStrCount As Integer
Dim intFirstSubLong As Integer
Dim strRightString As String
Dim inStrTemp As String
inStrTemp = inStrSource & inStrSeparator
'循环取值
While Not Len(inStrTemp) = 0
intFirstSubLong = InStr(1, inStrTemp, inStrSeparator)
If Not IsNull(intFirstSubLong) Then
intSubStrCount = intSubStrCount + 1
'得到各子串值
ReDim Preserve inSubString(intSubStrCount - 1)
inSubString(intSubStrCount - 1) = Mid(inStrTemp, 1, intFirstSubLong - 1)
inStrTemp = Mid(inStrTemp, intFirstSubLong + 1, Len(inStrTemp))
End If
Wend
'得到子串数量
inCount = UBound(inSubString()) + 1
blnIsExecute = True
End SubPublic Function SubString(Index As Integer) As String
If Not blnIsExecute Then Call Execute
SubString = inSubString(Index)
End FunctionPublic Function U_Bound() As Integer
If Not blnIsExecute Then Call Execute
U_Bound = inCount - 1
End FunctionPublic Function L_Bound() As Integer
L_Bound = 0
End Function
Dim fs As Object, ts As Object Dim fileName As String
Dim txtLine As String
Dim cn As Object
Set cn = CreateObject("ADODB.Connection")
Dim sql As String
With cn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Password=1234;User ID=Admin;Data Source=" & App.Path & "\data.mdb"
.ConnectionTimeout = 30
.CursorLocation = adUseClient
End With
'要读取的文件,文件每行格式固定为:单位编码^单位名称^单位行业编码^单位行业名称^行政区划编码
fileName = App.Path & "\tmp.dat"
Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.OpenTextFile(fileName, ForReading, False)
Do While ts.AtEndOfStream <> True
txtLine = ts.ReadLine
'处理字符串
a.SourceString = txtLine
a.Separator = "^"
sql = sql & ";" & vbCrLf & _
"Insert Into YourTable(单位编码,单位名称,单位行业编码,单位行业名称,行政区划编码) values(" & _
"'" & a.SubString(0) & "','" & a.SubString(1) & "','" & a.SubString(2) & "'," & _
"'" & a.SubString(3) & "','" & a.SubString(4) & "')"
Loop
ts.Close
cn.Open cn.Execute sql cn.Close
End Sub