0

我希望这个问题有一个相当简单的答案。也许使用VB。

我有一个名为“客户”的访问表。每个客户在此表上名为“特许经营”的列中都有一个指定的特许经营名称。我需要为所有特许经营商提供一个 csv 文件,其中包含客户表中分配给其特许经营权的所有客户。

冗长的方法是对每个特许经营权进行单独查询(从客户中选择 *,其中特许经营权 = '纽约'),但有超过 50 个不同的特许经营权名称。然后一个一个地导出每个查询将非常耗时。

是否有任何 vb 代码用于根据字段中的值创建多个查询或表?

谢谢

4

1 回答 1

2

下面的代码将做到这一点。我创建了一个具有以下结构的数据库。它输出名称格式为“{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
于 2013-10-18T12:12:52.633 回答