我有一个表单,用户从combobox中选择供应商的名称,其目录文件将被导入。然后,组合框选择驱动一个查询,以创建一个单记录记录集(rsProfile),其中包含从所有供应商配置文件表中查询的多个配置文件变量。然后,在一系列不同的查询中使用这些变量来重新格式化、翻译和规范供应商的唯一结构化文件,使其成为可以导入到我们系统中的标准化格式。
我感到沮丧的是,我无法理解如何构建我存储的查询,这些查询将使用一个或多个参数,这些参数将自动从配置文件记录集中填充。
这是我的rsProfile收获代码。它起作用了。注意,intVdrProfileID是一个全局变量集,并在其他地方使用。
Private Sub btn_Process_Click()
Dim ws As Workspace
Dim db, dbBkp As DAO.Database
Dim qdf As DAO.QueryDef
Dim rsProfile, rsSubscrip As Recordset
Dim strSQL As String
Dim strBkpDBName As String
Dim strBkpDBFullName As String
strBkpDBName = Left(strVdrImportFileName, InStr(strVdrImportFileName, ".") - 1) & "BkpDB.mdb"
strBkpDBFullName = strBkpFilePath & "\" & strBkpDBName
Set db = CurrentDb
Set ws = DBEngine.Workspaces(0)
MsgBox ("Vendor Profile ID = " & intVdrProfileID & vbCrLf & vbCrLf & "Backup file path: " & strBkpFilePath)
' Harvest Vendor Profile fields used in this sub
strSQL = "SELECT VendorID, Div, VPNPrefix, ImportTemplate, " & _
"VenSrcID, VenClaID, ProTyp, ProSeq, ProOrdPkg, ProOrdPkgTyp, JdeSRP4Code, " & _
"PriceMeth, " & _
"ProCost1Frml, ProCost2Frml, " & _
"ProAmt1Frml, ProAmt2Frml, ProAmt3Frml, ProAmt4Frml, ProAmt5Frml " & _
"FROM tZ100_VendorProfiles " & _
"WHERE VendorID = " & intVdrProfileID & ";"
Set qdf = db.QueryDefs("qZ140_GetProfileProcessParms")
qdf.SQL = strSQL
Set rsProfile = qdf.OpenRecordset(dbOpenSnapshot)
DoCmd.OpenQuery "qZ140_GetProfileProcessParms"
' MsgBox (qdf.SQL)
我使用QueryDefs在运行时重写存储的查询,虽然它可以工作,但非常麻烦,并不适用于所有的查询。
我希望下面的示例能够作为使用DLookups存储的查询。我可以让它在VBA中工作,但是我无法获得任何东西来处理存储的查询。我愿意听取其他建议。
存储的查询"qP0060c_DirectImportTape":
SELECT
DLookUp("[VPNPrefix]","rsProfile","[VendorID]=" & intVdrProfileID) & [PartNo] AS VenPrtId,
Description AS Des,
DLookup("[Jobber]","rsProfile",[VendorID=" & intVdrProfileID) AS Amt1,
INTO tP006_DirectImportTape
FROM tJ000_VendorFileIn;
增编:让我调整一下这个问题,使它更复杂一点。我有一个大约40个查询的集合,每个查询都使用不同的参数集合(或者没有)。我还拥有一个表,其中包含每个供应商“订阅”的一组特定查询。目标是建立一个数据库,使非编码用户可以添加新的供应商配置文件,并创建/修改针对该供应商文件运行的特定查询集。到目前为止,我有将近100个供应商,因此对每个供应商进行单独编码是不切实际的。每个供应商的文件将平均接受14个不同的更新查询。
简化示例:需要使用查询1、2和5处理Vendor1文件。Vendor2文件可能只需要更新查询2和4。这些查询的参数可能如下:
query1 (parm1) query2 (parm1,parm4,parm8,parm11) query4 (parm5,parm6,parm7,parm8,parm9,parm10,parm11) query5 () -no parms
这是只遍历与当前供应商文件相关的查询的核心查询处理。rsSubscrip是包含此筛选查询列表的记录集(从主表查询)。
' Run all subscribed queries
MsgBox "Ready to process query subscription list."
With rsSubscrip
Do While Not .EOF
db.Execute !QueryName, dbFailOnError
.MoveNext
Loop
.Close
End With
发布于 2015-06-26 08:07:24
可以使用语法设置预定义查询的参数;
Set qdf = CurrentDB.QueryDefs(QueryName)
qdf.Parameters(ParameterName) = MyValue
若要向查询添加参数,请在sql中的SELECT语句之前添加以下内容
PARAMETERS [ParameterOne] DataType, [ParameterTwo] DataType;
SELECT * FROM tblTest;
https://stackoverflow.com/questions/31059553
复制相似问题