--Soumis par Dev Ashish---
Utilisation d'une valeur d' un formulaire dans un énoncé SQL.
(Q) Dans le code, derrière mon formulaire, j'essaie de référer à la valeur d'un contrôle du formulaire, à l'intérieur d'un énoncé SQL. Je n'y arrive pas, bien que j'utilise la syntaxe:
strSQL="Select * from Employees where [LastName] = forms!myForm!myControl"
Qu'est ce que je fais de croche??
(A) De façon à se référer à la valeur contenu dans un contrôle d'un formulaire, il est préférable d'utiliser l'opérateur de concaténation &. L'utilisation d'apostrophes est également critique. Par exemple:
- Si le champ comparé est de type numérique (exemple, un champ ID),
strSQL = "Select [LastName] from Employees where [EmpID]="
& me!EmpIDControl
- Si le champ est de type date,
strSQL = "Select * from Employees where [EmpStartDate] <
#" & _
me!EmpStartDate & "#"
Note: **Soumis par Alex Dybenko**
Une approche recommandée pour les dates est d'utiliser
[EmpStartDate] < " & format(me!EmpStartDate,"0")
car autrement, le formatage de dates dépend du paramétrage régional du PC, ce qui peut générer une erreur, dans certains cas.
- Si le champ est de type alpha-numérique,
const cQUOTE = """" 'Thats 2 quotes in sequence
strSQL = "Select * from Employees where [LastName]=" &
cQuote & _
me!EmpLastName & cQuote
---Soumis par Michel Walsh---
On ne sait pas quel délimiteur utiliser? C'est sans importance, avec ADO, il suffit de le demander:
Dim prefix As String Dim suffix As String Dim rst As ADODB.Recordset Set rst= ........ ' maintenant, on prépare une comparaison impliquant "FieldName": PrefixAndSuffixForDataType rst.FieldName.Type, prefix, suffix ' on a récupéré les délimiteurs, ne reste qu'à les utiliser, simplement... mySql = "... FieldName=" & prefix & Value & suffix & "..."
En effet ADO se doit de connaître les délimiteurs à utiliser, selon
le "schéma" approprié. ADO peut donc vous renseigner, si vous
l'ignorez. Voici la fonction PrefixAndSuffixForDataType:
' ***** Code Start ****** Public Sub PrefixAndSuffixForDataType(ByVal DataType As Long, _ ByRef prefix As String, _ ByRef suffix As String, _ Optional ByVal d_prefix As String = "", _ Optional ByVal d_suffix As String = "") ' Retourne les caractères, littéral, prefixe et suffixe délimitant le type de donnée fourni, ' selon le "data provider" par défaut. ' ex.: retourne "#" et "#" pour adDate avec Jet 4.0 Dim rst As ADODB.Recordset On Error GoTo NotSupported Set rst = CurrentProject.Connection.OpenSchema(adSchemaProviderTypes) rst.Find "DATA_TYPE=" & DataType If Not rst.EOF Then prefix = Nz(rst!LITERAL_PREFIX, d_prefix) suffix = Nz(rst!LITERAL_SUFFIX, d_suffix) Else ' ne pas signaler d'erreur, même si le ' DataType n'est probablement pas supporté, ' retourner avec les valeurs par défaut fournies par l'utilisateur prefix = d_prefix suffix = d_suffix End If rst.Close Set rst = Nothing Exit Sub NotSupported: On Error Resume Next prefix = d_prefix suffix = d_suffix ' ne prenons pas de chance, effectuons un ménage soigneux, excessif même, ' on n'est pas préoccupé par la vitesse, ici, de toutes façons. If Not (rst Is Nothing) Then If (rst.State And adStateClosed) <> adStateClosed Then rst.Close Set rst = Nothing End If End Sub ' ***** Code End ******
Note finale: les dates doivent quand même être présentées sous un format US .