【发布时间】:2014-04-14 01:14:49
【问题描述】:
我有一个使用 Access 作为配方管理器的现有流程,并希望将其转换为可与 WonderWare 的内置配方管理器一起使用的 CSV。访问文件有900个表,每个表有8个字段。我关心的两个叫做 MachineTag 和 RecipeValue。我想将这些现有表格转换为 CSV(我将使用 excel 术语来解释):A 列将包含所有可能的 MachineTag。第 1 行将包含配方的名称(即现有 access 数据库中表的名称)。
Access 中的示例表:
CSV 文件示例:
希望这能解释我想要达到的目标。我有一个名为 MasterTag 的访问表,它指定了所有 MachineTag 可能性。如果食谱没有该标签,则可以在该字段中输入零。访问范围内每个表的记录数从 800 到 1200。(MasterTag,具有包含所有 1200 个可能标签的参考副本。)到目前为止,我的代码是使用 Debut.Print 生成 SQL 语句,然后我可以复制和粘贴在访问中的 SQL 中,它将起作用。我只是不知道如何将它们放在一起。
Sub GoMomma()
Dim db As DAO.Database,
tb As DAO.TableDef
Set db = CurrentDb()
For Each tb In db.TableDefs
If Left$(tb.Name, 4) <> "MSys" Then
strSQL = "SELECT [MasterTag].MachineTag As TagName, [" & tb.Name & "].RecipeValue " & _
"FROM " & tb.Name & "INNER JOIN MasterTag ON ([" & tb.Name & "].MachineTag = [MasterTag].MachineTag)"
Debug.Print strSQL
End If
Next tb
End Sub
我尝试了各种记录集和 FreeFile() 打印,保存到 txt/csv,但 freefile 方法的问题是它只会在末尾追加,而不是让每个都是一行。我使用记录集方法在 4 个多小时内取得了零进展。我尝试创建一个新的 tblTemp,只是在需要时即时使用,但没有运气。我没有所有的代码示例。我一度感到沮丧并关闭了我的笔记本电脑并丢失了一些工作。但实际上它无论如何都只是垃圾。
编辑: 我想到了一种防弹的方法来做到这一点,但还没有看过它的编码方面,只是在概念上它看起来很可靠。我可以制作一个 Excel 电子表格,第一行填写表格名称,第一列填写 MachineTags。在访问 vba 中,我将获取当前表名称和机器标签名称并搜索电子表格并找出插入 RecipeValue 所需的单元格(例如:B5),然后它将移动到该表中的下一个 MachineTag(如果未找到 MachineTag,插入新行,使用新 MachineTag),当该表完成后,移至下一个(表名将全部存在,因此我不需要检查和/或插入新的柱子)。从上面的屏幕截图中得到了一些解决:
一切都完成后,我可以将电子表格保存/转换为 CSV,然后我就完成了。周二很忙,所以可能要到周三才能开始工作,但至少在我看来,这似乎是一条可行的前进道路。 For my own records, possible solution / right direction, reminder to take a look at this.
【问题讨论】: