Maison >base de données >tutoriel mysql >Comment utiliser efficacement les paramètres dans VBA pour les applications Microsoft Access ?

Comment utiliser efficacement les paramètres dans VBA pour les applications Microsoft Access ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-23 08:17:09632parcourir

How to Effectively Use Parameters in VBA for Microsoft Access Applications?

Utilisation des paramètres VBA dans différents contextes dans Microsoft Access

Pour éviter les erreurs et gérer efficacement les noms entre guillemets simples, il est essentiel d'utiliser des paramètres dans des applications Access complexes impliquant du SQL dynamique et une concaténation de chaînes. Voici différentes manières d'utiliser les paramètres dans différents contextes :

Formulaires et rapports

Access offre la possibilité unique d'utiliser les valeurs des contrôles sur les formulaires et les états directement dans le code SQL, dans de nombreux cas sans paramètres. Pour les contrôles, utilisez la syntaxe Forms!MyForm!MyTextbox ; pour les contrôles sur les sous-formulaires, utilisez Forms!MyForm!MySubform.Form!MyTextbox ; pour les contrôles sur les rapports, utilisez Reports!MyReport!MyTextbox.

Agrégation de domaines

Les agrégations de domaines comme DLookUp peuvent également bénéficier directement des formulaires et des rapports. Par exemple, DLookUp("Field1", "Table2", "ID = Forms!MyForm!MyTextbox").

DoCmd.RunSQL

Lorsque vous utilisez DoCmd.RunSQL pour exécuter une commande SQL, utilisez la concaténation de chaînes pour fusionner les valeurs des paramètres : DoCmd.RunSQL "INSERT INTO Table1(Field1) SELECT Field1 FROM Table2 WHERE ID =" & Me.MyTextbox.

Record DAO établi

Pour DAO, utilisez CurrentDb.CreateQueryDef() pour créer la requête, puis utilisez QueryDef.Parameters pour définir les paramètres :

<code class="language-vba">With CurrentDb.CreateQueryDef("", "INSERT INTO Table1(Field1) SELECT Field1 FROM Table2 WHERE Field1 = ? And Field2 = ?")
    .Parameters(0) = Me.Field1
    .Parameters(1) = Me.Field2
    .Execute
End With</code>

Record ADODB établi

Dans ADO, utilisez l'objet ADODB.Command et sa collection Parameters pour définir les paramètres. Pour les paramètres sans nom, transmettez un tableau de valeurs à Command.Execute. Pour les paramètres nommés (bien que non officiellement pris en charge), utilisez Command.CreateParameter() :

<code class="language-vba">With cmd
    Set .ActiveConnection = CurrentProject.Connection ' 使用当前数据库的连接
    .CommandText = "INSERT INTO Table1(Field1) SELECT Field1 FROM Table2 WHERE Field1 = ? And Field2 = ?"
    .Parameters.Append .CreateParameter(, adVarWChar, adParamInput, Len(Me.Field1), Me.Field1) ' adVarWChar 用于可能包含 Unicode 的文本框
    .Parameters.Append .CreateParameter(, adInteger, adParamInput, 8, Me.Field2) ' adInteger 用于整数(长整数或整数)
    .Execute
End With</code>

TempVars

TempVars sont des variables disponibles globalement qui peuvent être définies et réutilisées dans plusieurs requêtes :

<code class="language-vba">TempVars!MyTempVar = Me.MyTextbox.Value ' 对简单的控件使用 .Value
DoCmd.RunSQL "INSERT INTO Table1(Field1) SELECT Field1 FROM Table2 WHERE ID = TempVars!MyTempVar"</code>

Fonction personnalisée (UDF)

Créez une fonction avec des variables statiques pour stocker et récupérer les valeurs des paramètres :

<code class="language-vba">Option Compare Database
Option Explicit

Private ThisDate As Date

Public Function GetThisDate() As Date
    If ThisDate = #12:00:00 AM# Then
        ' 设置默认值。
        ThisDate = Date
    End If
    GetThisDate = ThisDate
End Function

Public Function SetThisDate(ByVal NewDate As Date) As Date
    ThisDate = NewDate
    SetThisDate = ThisDate
End Function</code>

Alors utilisez comme ceci :

<code class="language-vba">SetThisDate SomeDateValue ' 将 SomeDateValue 存储在 ThisDate 中。
DoCmd.RunSQL "INSERT INTO Table1(Field1) SELECT Field1 FROM Table2 WHERE [SomeDateField] = GetThisDate()"</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn