2013-10-16 49 views
1

我正在使用基本上具有此功能的Access中的对话框。我希望用户从组合框中选择一个表格,然后更改查询以创建必要信息的选择视图。下面是该对话框基于ComboBox值更改From子句

Private Sub cmdOK_Click() 

Dim db As DAO.Database 
    Dim qdf As DAO.QueryDef 
    Dim strSQL As String 
    Set db = CurrentDb 
    Set qdf = db.QueryDefs("qryPendingQS") 

strSQL = "SELECT [Event Start Date] AS [Event Date], [PO Sent _Date] AS [PO Sent Date], [Brand Name] AS Vendor, PO, [Units _Sold] AS [Units Sold], [Routing Date/Time EST] AS Shipped, [Date and _Time of Arrival] AS ETA, [Department Name] AS Category " & _ 
     "FROM Me.cbotable.Value " & _ 
     "WHERE table3 ='" & Me.cbotable.Value & "';" 

    qdf.SQL = strSQL 

    DoCmd.OpenQuery "qryPendingQS" 
    DoCmd.Close acForm, Me.Name 
    Set qdf = Nothing 
    Set db = Nothing 
    End Sub 

一切都很好,大部分的代码,但在声明中的这一部分的问题出现了。

strSQL = "SELECT [Event Start Date] AS [Event Date], [PO Sent _Date] AS [PO Sent Date], [Brand Name] AS Vendor, PO, [Units _Sold] AS [Units Sold], [Routing Date/Time EST] AS Shipped, [Date and _Time of Arrival] AS ETA, [Department Name] AS Category " & _ 
     "FROM table3" & _ 
     "WHERE table3 ='" & Me.cbotable.Value & "';" 

这是来自以前的尝试,但我知道你不能改变基于WHERE子句的表。所以我的问题是,我怎样才能改变FROM语句动态基于断什么在组合框中

这是当查询试图执行的SQL代码看起来选择的:

SELECT [Event Start Date] AS [Event Date], [PO Sent _Date] AS [PO Sent Date], [Brand Name] AS Vendor, PO, [Units _Sold] AS [Units Sold], [Routing Date/Time EST] AS Shipped, [Date and _Time of Arrival] AS ETA, [Department Name] AS Category 
FROM table3 
WHERE table3 ='QS Log'; 
+0

你的代码是怎么回事?是否有错误讯息? – HansUp

+0

@HansUp当它试图在'DoCmd.OpenQuery'qryPendingQS''执行代码时出现错误''因为您不能通过WHERE语句更改FROM值。 –

回答

1

我结束了我自己找到解决冲突的方法,因为我知道你不能通过SQL代码传递参数。因为我在VBA中有我的代码,我决定将SQL语句分成两个字符串,一个包含“Select * From”,另一个字符串变成组合框值。然后我将这些值一起添加到一个字符串并将其推送到查询。

Private Sub cmdOK_Click() 

    Dim Db As DAO.Database 
    Dim qdf As DAO.QueryDef 
    Dim strSQL As String 
    Set Db = CurrentDb 
    Set qdf = Db.QueryDefs("qryPendingQS") 

    Dim strQryFirstPart As String 
    Dim strQryWhole As String 
    Dim strTableName As String 

    strQryFirstPart = "Select * FROM " 
    strTableName = Me.cbotable.Value 
    strQryWhole = strQryFirstPart & "[" & strTableName & "]" 

    qdf.SQL = strQryWhole 

    Debug.Print strQryWhole 



End Sub 

有点解决方法,但它得到了解决方案。