|
找到这里来了?
身为斑竹,我还是做点什么吧。
1、新建2个表,关系为一对多。具体字段设置见附件。
2、按下Alt+F11进入VBE界面,点击“工具\引用”,再下拉列表中找到并勾选以下库:
Microsoft ActiveX Data Object 2.8 Library(建议使用稍微高一点的版本)
Microsoft Scripting Runtime
3、点击插入\模块,贴上以下代码:
- Sub importData()
- '定义文件系统组件
- Dim fso As New FileSystemObject
- Dim fd As Folder
- Dim fl As File
- Dim txt As TextStream
- '定义数组,用于存储csv的两个表的数据。
- Dim Data1, Data2
- '定义变量,用于判断2个表的字段个数。
- Dim i As Long, j As Long
- '定义记录集
- Dim rst As New ADODB.Recordset
- Dim lngJudgeID As Long
- Set fd = fso.GetFolder(CurrentProject.Path)
- For Each fl In fd.Files
- '只读取csv文件
- If Right(fl.Name, 3) = "csv" Then
- '打开文本流
- Set txt = fso.OpenTextFile(fl.Name)
- '跳过第一行
- txt.SkipLine
- '读取第二行,分解为数组
- Data1 = Split(txt.ReadLine, ",")
-
- '打开记录集,新增一行——————这里假定每个csv文件,第一个表只有1行。如有多行,
- rst.Open "tblJudgeAll", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
- rst.AddNew
- For i = LBound(Data1) To UBound(Data1)
- rst(i + 1) = Data1(i)
- Next
- rst.Update
- lngJudgeID = rst(0)
- rst.Close
- '初始化
-
- '跳过3行
- txt.SkipLine
- txt.SkipLine
- txt.SkipLine
- '读取剩余的行数
- rst.Open "tblJudgeDetail", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
- Do Until txt.AtEndOfLine
- Data2 = Split(txt.ReadLine, ",")
- rst.AddNew
- rst(1) = lngJudgeID
- For j = LBound(Data2) To UBound(Data2)
- rst(j + 2) = Data2(j)
- Next
- rst.Update
- Loop
- rst.Close
- End If
- Next
- End Sub
复制代码
4、按F5运行即可完成导入操作。
5、顺便说一下,Excel表可以按你的原文件那样来建表,但Access应该通过一对多关系建立起平面化数据,我给的附件就是一个标准范例。
6、这里通过JudgeID来建立关系,如果有其它主键(例如Jig_ID什么的),可以用其它主键,但我对你的业务不熟悉,所以用这个了。
7、字段中,原有字段名中的特殊字符已经被清除,例如,点号、斜杠等,这样比较方便后期建立查询或者写SQL语句等等。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|