2013-10-16 2 views
1

Je travaillais sur une boîte de dialogue dans Access qui avait essentiellement cette fonction. Je voulais qu'un utilisateur sélectionne une table à partir d'une zone de liste déroulante et qu'il change ensuite la requête pour créer une vue sélective des informations nécessaires. Voici le code de la boîte de dialogueModification de la clause From basée sur la valeur ComboBox

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 

Les choses sont très bien pour la plupart, mais le problème se pose dans cette partie de la déclaration. Ceci est le résultat d'une tentative précédente mais je suis conscient que vous ne pouvez pas modifier les tables basées sur une clause WHERE. Donc, ma question est, comment puis-je changer la FROM dynamique en fonction de ce qui est sélectionné dans la liste déroulante

Voici comment le code SQL ressemble lorsque la requête tente d'exécuter:

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

Que se passe-t-il avec votre code? Y a-t-il un message d'erreur? – HansUp

+0

@HansUp L'erreur survient quand il essaie d'exécuter le code 'DoCmd.OpenQuery "qryPendingQS"' Parce que vous ne pouvez pas changer une valeur FROM via une instruction WHERE. –

Répondre

1

J'ai fini trouver la solution au conflit moi-même, car j'ai appris que vous ne pouvez pas passer de paramètres via le code SQL. Étant donné que j'avais mon code dans VBA, j'ai décidé de scinder les instructions SQL en deux chaînes, l'une contenant "Select * From" et l'autre chaîne devenant la valeur combobox. Ensuite, j'ajoute les valeurs ensemble pour créer une chaîne et la pousse vers la requête.

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 

Un peu d'une solution de contournement, mais il a obtenu la solution.

Questions connexes