【问题标题】:Splitting and exporting multiple tables from MS Access从 MS Access 拆分和导出多个表
【发布时间】:2013-10-18 20:12:52
【问题描述】:
我希望这个问题有一个相当简单的答案。也许使用 VB。
我有一个名为“客户”的访问表。每个客户在此表上名为“特许经营”的列中都有一个指定的特许经营名称。我需要为所有特许经营商提供一个 csv 文件,其中包含客户表中分配给其特许经营权的所有客户。
冗长的方法是对每个特许经营权进行单独查询(从客户中选择 * 其中特许经营权 = '纽约'),但有超过 50 个不同的特许经营权名称。然后一个一个地导出每个查询将非常耗时。
有没有vb代码可以根据字段中的值创建多个查询或表?
谢谢
【问题讨论】:
标签:
ms-access
ms-access-2007
vba
ms-access-2010
【解决方案1】:
下面的代码可以做到。我创建了一个具有以下结构的数据库。它输出名称格式为“{Franchise_Name} {Customers}.csv”的 CSV 文件,例如“Franchise A Customers.csv”。
您的描述似乎表明您将特许经营名称保存在客户表本身中,而最好有一个单独的表,其中包含特许经营的名称和客户表中引用主键的外键在特许经营表中。不过,您可以修改此代码以使用您的隐含结构,但您仍然必须创建一个不同的特许经营名称列表(即您的记录集行将是 Set Franchises = CurrentDb.OpenRecordset("SELECT DISTINCT Franchise FROM Customers") 并且您将修改我对 FranchiseID 的引用以工作而是在您的特许经营领域。
客户表
ID | Customer_Name | FranchiseID
1 | Customer 1 | 1
2 | Customer 2 | 2
3 | Customer 3 | 1
4 | Customer 4 | 2
5 | Customer 5 | 3
特许经营表
ID | Franchise_Name
1 | Franchise A
2 | Franchise B
3 | Franchise C
VBA 代码
Option Compare Database
Option Explicit
Sub Export_Franchise_Customers()
Dim Franchises As Recordset
Dim FranchiseID As Integer
Dim Franchise_Name As String
Dim Base_SQL As String
Dim QueryDefName As String
Base_SQL = "SELECT * FROM Customers WHERE FranchiseID = "
Set Franchises = CurrentDb.OpenRecordset("Franchises")
Do While Not Franchises.EOF
FranchiseID = Franchises("ID")
Franchise_Name = Franchises("Franchise_Name")
QueryDefName = "get_Franchise" & FranchiseID & "_Customers"
CurrentDb.CreateQueryDef QueryDefName, Base_SQL & FranchiseID
DoCmd.TransferText TransferType:=acExportDelim, TableName:=QueryDefName, FileName:=Franchise_Name & " Customers.csv", HasFieldNames:=True
CurrentDb.QueryDefs.Delete QueryDefName
Franchises.MoveNext
Loop
End Sub