Utiliser une zone de liste déroulante Valeur dans le cadre d'une Requête SQL? (MS Access 2010-2013)

J'ai une Base de données que nous utilisons pour créer des Factures de Matériaux de Balises dans AutoCAD. En raison de la nature de cela, j'ai besoin de créer 3 requêtes distinctes. Pour notre "Acier", l'un de nos
"Non-Acier", et l'autre pour nos "Uncut Tubes".

Le SQL pour les Requêtes est comme suit:

Acier:

SELECT DISTINCTROW Sum([CUT-LENGTH-WEIGHT]) AS [SumOfCUT-LENGTH-WEIGHT], Sum([CUT-SHEET-WEIGHT]) AS [SumOfCUT-SHEET-WEIGHT], Sum([TOTAL-SHEETING-WEIGHT]) AS [SumOfTOTAL-SHEETING-WEIGHT], Sum([TOTAL-ITEM-WEIGHT]) AS [SumOfTOTAL-ITEM-WEIGHT]
FROM [13-1302 Cut-Lengths]; 

Non-Acier:

SELECT tbl2013BOM.fJobID, Sum(tbl2013BOM.fWeight) AS SumOffWeight
FROM tbl2013BOM
GROUP BY tbl2013BOM.fJobID
HAVING (((tbl2013BOM.fJobID)=23));

Uncut Tubes:

SELECT DISTINCT [13-1302 Cut-Lengths].[TOTAL-LENGTH-WEIGHT], [13-1302 Cut-Lengths].MATERIAL, [13-1302 Cut-Lengths].ORDER
FROM [13-1302 Cut-Lengths]
ORDER BY [13-1302 Cut-Lengths].ORDER;

J'ai un ComboBox qui choisit le Nombre d'Emplois (Pour les Principaux et Uncut Tubes, par exemple 13-1302) et une zone de texte qui affiche le JobID (Pour les Non-Acier).

Est-il possible que je peux configurer SQL ci-dessus pour regarder la ComboBox et TextBox Valeurs, au lieu de m'avoir à les modifier à la main?

MODIFIER


J'ai compris tout cela maintenant. (Merci Elias)

Fondamentalement, je ne peux pas utiliser un Champ sur une table comme une Source dans SQL, en d'autres termes, Combo26 ne peut pas être la Table dans une Requête SQL. CEPENDANT, ce qui PEUT être fait est d'utiliser VBA pour injecter cette valeur dans une Définition SQL, puis utiliser cette définition comme une Source.

Je place le code de mon Bouton ci-dessous afin que toute personne peut l'utiliser et la référence:

Private Sub Command27_Click()

    Dim dbs As Database
    Dim rstSQL As DAO.Recordset
    Dim strSQL As String
    Dim strSQL2 As String
    Dim strSQL3 As String

    Dim Field As String
    Set dbs = CurrentDb

    Field = [Forms]![frmBOM_Combined]![Text26].[Value]

    strSQL = "SELECT DISTINCTROW Sum([CUT-LENGTH-WEIGHT]) AS [SumOfCUT-LENGTH-WEIGHT], Sum([TOTAL-SHEETING-WEIGHT]) AS [SumOfTOTAL-SHEETING-WEIGHT], Sum([TOTAL-ITEM-WEIGHT]) AS [SumOfTOTAL-ITEM-WEIGHT] FROM " & "[" & [Forms]![frmBOM_Combined]![Text26].[Value] & "]" & ";"
    strSQL2 = "SELECT tbl2013BOM.fJobID, Sum(tbl2013BOM.fWeight) AS SumOffWeight FROM tbl2013BOM GROUP BY tbl2013BOM.fJobID HAVING (((tbl2013BOM.fJobID)= " & [Forms]![frmBOM_Combined]![Combo25].[Value] & "));"
    strSQL3 = "SELECT DISTINCT [TOTAL-LENGTH-WEIGHT], [MATERIAL], [ORDER] FROM " & "[" & [Forms]![frmBOM_Combined]![Text26].[Value] & "]" & " ORDER BY [ORDER];"

    Debug.Print strSQL
    Debug.Print strSQL2
    Debug.Print strSQL3

    DoCmd.OpenForm ("frmEstWeight")

    Forms!frmEstWeight.RecordSource = strSQL
    Forms!frmEstWeight.frmTestBomWeight.Form.RecordSource = strSQL2
    Forms!frmEstWeight.frmTotalLengthWeight.Form.RecordSource = strSQL3

End Sub

Cela fonctionne exactement comme il se doit avec aucune erreur ou quoi que ce soit.

  • J'ai pensé à elle. Grâce en grande partie à Elias. Le code dans leur commentaire travaillé pour mon Non-Acier Requête, mais l'Acier a été un peu plus difficile, Il est comme suit (en VBA), Dim strSQL as String Dim Champ Comme Champ de type Chaîne = [Formulaires]![frmBOM_Combined]![Text26].[Valeur] strSQL = "SELECT DISTINCT [TOTAL-LONGUEUR-POIDS], du MATÉRIEL, de l'ORDRE DE" & "[" & [Champ] & "]" & " COMMANDE PAR [l'ORDRE];" Debug.Imprimer strSQL CurrentDb.OpenRecordset strSQL
  • Désolé de ne pas être en mesure d'aider aussi bien ce dernier que la moitié de la journée. Suis occupé. Bonne trouvaille, et bonne chance!
  • C'est bien. J'ai une question, sur une note connexe. J'ai ce code VBA cours d'exécution en tant que module, mais comment puis-je définir comme un jeu d'enregistrements?
  • Vous devez créer un jeu d'enregistrements et de l'objet de base de données Dim dbs As Database, Dim rstSQL As DAO.Recordset, Set dbs = CurrentDb
  • Puis vous ouvrir un jeu d'enregistrements Set rstSQL = dbs.OpenRecordset(QueryHere)
  • Permettez-moi de reformuler ce que, Tout ce qui fonctionne, mais j'ai besoin d'utiliser cela comme un jeu d'enregistrements dans mon formulaire.
  • Quand je fais tout ça, ça donne un message disant que trop peu de paramètres
  • L'intérieur de la requête quelque chose n'existe pas. Pourrait être une faute de frappe, ou de la référence non valide. Qu'entendez-vous par jeu d'enregistrements sur votre formulaire?
  • Je voudrais que vous puissiez voir les Images, mais... Cette requête, j'ai enfin pu travailler, je pense que... Ça doit être le jeu d'enregistrements pour de frmWeight. Alors, quand je choisis un Travail à partir de ma liste, j'ouvre la forme et les Valeurs sélectionnées à partir de la Requête d'affichage dans les zones de texte.

InformationsquelleAutor ZLHysong | 2013-08-08