我希望这个问题有一个相当简单的答案。也许使用VB。
我有一个名为'客户'的访问权限表。每个客户都在一个名为“特许经营”的列中分配了特许经营权名称。在这张桌子上。我需要向所有特许经营商提供一个csv文件,其中包含从客户表中分配给其特许经营权的所有客户。
长篇大论的方式是对每个特许经营的个人查询(选择*来自客户,其中特许经营权='纽约'),但有超过50个不同的特许经营名称。然后逐个导出每个查询将非常耗时。
是否有任何vb代码用于根据字段中的值创建多个查询或表?
由于
答案 0 :(得分:2)
以下代码将执行此操作。我用下面的结构创建了一个DB。它输出名称格式为“{Franchise_Name} {Customers} .csv”的CSV文件,例如“Franchise A Customers.csv”。
您的描述似乎表明您将特许经营权名称保存在客户表本身中,而更好的做法是拥有一个单独的表,其中包含特许经营权的名称和引用主键的Customers表中的外键在特许经营表中。您仍然可以修改此代码以使用隐含的结构,但您仍然需要创建一个独特的特许经营名称列表(即您的记录集设置行将为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
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