我目前正在一家公司实习,我的雇主要求我为他们所在的新市场建立一个传输,收费,信用等数据库。我创建了一个小程序130个带有数据的CSV,有些是空的,有些则没有。然后程序删除空的程序。
他们在Access中完成了大部分工作,我正在快速学习,但这不是我的强项。我为他们的销售人员和自动化编写了一些VBA程序/脚本,现在我想在这个Access数据库中添加代码,我正在以编程方式更新它。
问题是,我可以看到使用我下载的数据制作/更新这些表的唯一方法是单独构建所有130个,并为每个单独的报告单独构建SELECT和INSERT查询。但是,因为表可能有也可能没有给定日期范围的数据,我需要构造所有表和查询。
来自编程背景,我希望能有一个高水平的抽象,我可以做这样的事情
For each file f in Directory d
Get report title
If there is a table with the same report title
Insert any unique values into that table
If there isn't a table with that report title
Create it, and then insert unique values into that table
End
但是,看起来我不能做这样的事情。
我正在考虑另一种方法,我
我离这家公司还有几个星期的时间,所以我在找到解决方案之间挣扎,或者是务实的,只是为应该始终拥有数据的核心报告集设置逻辑。任何帮助/建议将不胜感激。
答案 0 :(得分:1)
你可以最肯定地做你的高级总结汤姆,这些是你需要的领域:
FileSystemObject(这可以遍历文件夹中的文件并提供文件名)
TableDefs(可以从数据库中提取表名)
我建议使用FileSystemObject将文件加载到临时表中,然后可以使用TableDefs属性来确认相关表是否存在。如果是这样,那么您可以使用Remou提供的SQL来仅插入那些尚未存在的行。如果您的表不存在,那么您只需使用以下SQL来创建包含数据的新表:
SELECT * INTO NewTableName FROM TempTableName
我还没有足够的时间继续写出这个程序,但这两个属性应该让你朝着正确的方向前进,如果你遇到它们就再次发布。
祝你好运:)
答案 1 :(得分:0)
使用Access,您可以包含内联连接,例如:
scn = "[Text;FMT=Delimited;HDR=Yes;DATABASE=Z:\Docs\TXT_CSV]"
ssql = "SELECT * FROM TestTable " _
& "WHERE ID Not In (SELECT ID FROM " & scn & ".[TestIn.CSV])"
ssql = "SELECT * FROM " & scn & ".[TestIn.CSV] " _
& "WHERE ID Not In (SELECT ID FROM TestTable)"
这意味着只要您有一个唯一的字段/列(列/ s),就可以只插入以前不容易插入的记录。