Y a-t-il un moyen de renseigner à la valeur de Feilce de Forme d'accès à l'aide de SQL?
J'ai lu qu'il n'est pas possible de simplement entrer SQL comme source de contrôle. Est-ce vrai? P>
merci pour tout halp :) p>
- Edit - P>
Je dois effectuer cette requête; P>
SELECT tblCaseIssues.IssueDesc FROM tblCaseIssues INNER JOIN tblCaseNewHS_Issues ON tblCaseIssues.ID = tblCaseNewHS_Issues.IssueID WHERE(tblCaseNewHS_Issues.HS_ID = 81))
6 Réponses :
Assurez-vous que c'est vrai SQL, mais vous pouvez utiliser la fonction:
= dlookup ("Field_Name", "Nom de table", "Any_FieldName = 'Valeur'") CODE> P>
Est-il possible de faire quelque chose aussi complexe que Select TblcaseSissues.issuedesc de TblcaseSissues Inner Joindre Tblcaseenews_issues sur TblcaseSissues.id = Tblcaseenews_issues.issuid où (Tblcaseenews_issues.hs_id = 81) avec une telle fonction?
Créez une requête dans l'accès où toutes les tables sont jointes. Ensuite, dans votre dbLookup, vous pouvez substituer Table_Name avec le nom de la requête (désolé indiquant une table et supposer qu'une requête fonctionnerait également). Remarque: il y a de meilleures façons de faire dans VBA.
Vous pouvez définir la source de contrôle de votre champ sur un nom de la fonction. Cette fonction peut facilement exécuter votre SQL, et / ou passer dans une variable. Voici ma plaque de chaudière simple pour une fonction d'exécution d'une instruction SQL dans un enregistrement et renvoyez la première valeur. Dans mon monde, j'inclus habituellement une clause très spécifique où, mais vous pouvez certainement faire de cette fonction plus robuste pour vos besoins.
=fnName(sVariable, iVariable) Public Function fnName( _ sVariable as String, _ iVariable as Integer _ ) As String On Error GoTo Err_fnName Dim con As ADODB.Connection Dim rst As ADODB.Recordset Dim sSQL As String sSQL = "" Set con = Access.CurrentProject.Connection Set rst = New ADODB.Recordset rst.Open sSQL, con, adOpenDynamic, adLockOptimistic If rst.BOF And rst.EOF Then 'No records found 'Do something! Else 'Found a value, return it! fnName = rst(0) End If rst.Close Set rst = Nothing con.Close Set con = Nothing Exit_fnName: Exit Function Err_fnName: Select Case Err.Number Case Else Call ErrorLog(Err.Number, Err.Description, "fnName", "", Erl) GoTo Exit_fnName End Select End Function
Il peut être plus facile d'utiliser une combinaison de comboBox et de définir la source de ligne sur votre requête, alternativement, DAO est originaire d'accès.
Private Sub Form_Current() ''Needs reference to Microsoft DAO 3.x Object Library Dim db As Database Dim rs As DAO.Recordset Dim strSQL As String Dim strResult As String strSQL = "SELECT ci.IssueDesc FROM tblCaseIssues ci " _ & "INNER JOIN tblCaseNewHS_Issues cni ON ci.ID = cni.IssueID " _ & "WHERE cni.HS_ID = 81" Set db = CurrentDb Set rs = db.OpenRecordset(strSQL) If rs.RecordCount > 0 Then Do While Not rs.EOF strResult = strResult & ", " & rs!IssueDesc rs.MoveNext Loop strResult = Mid(strResult, 3) Else strResult = "Not found" End If Me.TextBoxName = strResult End Sub
Prenez simplement votre requête SQL et enregistrez-la comme une requête. P>
Puis dans la zone de texte, juste place: p>
= (dlookup ("problèmes", "Nom de la requête")) P>
I à une perte assez importante quant à toutes ces affiches suggérant des rondes du code où aucun n'est nécessaire. Il suffit de sauvegarder votre SQL comme une requête puis utilisez la fonction dlookup () en tant que source de données de la zone de texte et que vous avez terminé. p>
Parce que la première réponse a déjà suggéré votre solution, l'OP recherchait toujours une méthode qu'il pourrait utiliser une instruction SQL comme source de sa requête.
Private Sub Form_Load() Me.Text0 = CurrentDb.OpenRecordset("SELECT COUNT(name) AS count_distinct_clients FROM (SELECT DISTINCT name FROM Table1 WHERE subject='Soc') AS tmp;").Fields(0) End Sub
Il est préférable d'inclure des explications / contextes plutôt que de simplement avoir une réponse uniquement du code.
Bienvenue dans le débordement de la pile! Bien que ce code puisse répondre à la question, fournissant un contexte supplémentaire concernant la raison et / ou la manière dont ce code répond à la question améliore sa valeur à long terme. Les réponses du code seulement sont découragées.
J'ai créé la fonction suivante pour résoudre ce problème même.
J'aime cette solution car vous n'avez pas à gérer les requêtes sauvegardées obstruant votre volet de navigation ou vos longueurs de contournement. C'était comme ça que je l'ai expliqué à mon patron. "Vous pouvez avoir une fonction dlookup () comme source de contrôle d'une zone de texte. Pourquoi pas simplement écrire une fonction qui fait une requête et utilise la fonction comme source de contrôle?"
Essayez-le, cela a corrigé ma situation. P> p>
Y a-t-il une raison quelconque les données ne doivent pas être incluses dans les Records sous-jacents du formulaire?