Forms: Utilisation d'une valeur d'un formulaire dans un
énoncé SQL |
Author(s) Dev Ashish |
|
--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= ........
PrefixAndSuffixForDataType rst.FieldName.Type, prefix, suffix
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:
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 = "")
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
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
If Not (rst Is Nothing) Then
If (rst.State And adStateClosed) <> adStateClosed Then rst.Close
Set rst = Nothing
End If
End Sub
Note finale: les dates doivent quand même être présentées sous un
format US .
|