Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment Editer et Modifier la clause WHERE d'une requête en ADO ?

3 réponses
Avatar
alex
Bonjour,
Comment faire la même chose en ADO ?
Merci

Dim Qry As DAO.QueryDef
Dim StrSQL As String
Dim IntPosition As Integer

Set Db = CurrentDb

'Lecture code SQL
Set Qry = CurrentDb.QueryDefs(Requete)
StrSQL = Qry.SQL
'Position WHERE et la supprime
IntPosition = InStr(1, StrSQL, "WHERE", vbTextCompare)
If IntPosition > 0 Then
StrSQL = Left(StrSQL, IntPosition - 1)
'Ajoute une condition
StrSQL = StrSQL & " WHERE [TSTAGE].[TSTAGEnum]=" & StrFunction &
";"
Qry.SQL = StrSQL
End If
Qry.Close
Set Qry = Nothing

3 réponses

Avatar
Patrice
Sur le plan du principe, je ferais plutôt une vue ou une fonction à laquelle
j'ajoute le critère WHERE voulu ce qui permet d'avoir clairement la requête
de base plus les critères personnalisés éventuels...

Précise éventuellement, le rapport avec SQL Server reste flou pour moi (tu
voulais au départ modifier une vue SQL Server ?)

Patrice

"alex" a écrit dans le message de
news:
Bonjour,
Comment faire la même chose en ADO ?
Merci

Dim Qry As DAO.QueryDef
Dim StrSQL As String
Dim IntPosition As Integer

Set Db = CurrentDb

'Lecture code SQL
Set Qry = CurrentDb.QueryDefs(Requete)
StrSQL = Qry.SQL
'Position WHERE et la supprime
IntPosition = InStr(1, StrSQL, "WHERE", vbTextCompare)
If IntPosition > 0 Then
StrSQL = Left(StrSQL, IntPosition - 1)
'Ajoute une condition
StrSQL = StrSQL & " WHERE [TSTAGE].[TSTAGEnum]=" & StrFunction &
";"
Qry.SQL = StrSQL
End If
Qry.Close
Set Qry = Nothing





Avatar
Firebird
Bonjour,

Je suggère plutôt d'utiliser une procédure stocké sur SQL avec un paramètre
qui la condition de la requête. Au sein même de la procédure stocké, il
suffit de tester si la variable est pleine ou vide à l'aide d'une
instruction IF et exécuter la requête en incluant ou pas le filtre.

Petit exemple d'appel de procédure stocké en ADO :

Dim provstr As String
Dim cn2 As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command
Dim param1 As String

Set cn2 = New ADODB.Connection
provstr = "File Name=" + App.Path + "fichieraccesbasesql.udl;"
cn2.Open provstr

Set cmd = New ADODB.Command
Set cmd.ActiveConnection = cn2
cmd.CommandText = "nomprocedurestockee"
cmd.CommandType = adCmdStoredProc
cmd.CommandTimeout = 60

Set param1 = cmd.CreateParameter("Inparm1", adVarChar, adParamInput, 50,
"valeurdufiltre")
cmd.Parameters.Append param1


Set rs = cmd.Execute

While Not rs.EOF
'
' Lecture des enregistrements
rs.movenext
Wend

rs.close
set rs=nothing
cn2.close
set cn2=nothing

@ bientôt

Firebird



"alex" a écrit dans le message de
news:
Bonjour,
Comment faire la même chose en ADO ?
Merci

Dim Qry As DAO.QueryDef
Dim StrSQL As String
Dim IntPosition As Integer

Set Db = CurrentDb

'Lecture code SQL
Set Qry = CurrentDb.QueryDefs(Requete)
StrSQL = Qry.SQL
'Position WHERE et la supprime
IntPosition = InStr(1, StrSQL, "WHERE", vbTextCompare)
If IntPosition > 0 Then
StrSQL = Left(StrSQL, IntPosition - 1)
'Ajoute une condition
StrSQL = StrSQL & " WHERE [TSTAGE].[TSTAGEnum]=" & StrFunction &
";"
Qry.SQL = StrSQL
End If
Qry.Close
Set Qry = Nothing





Avatar
alex
Merci, ok pour lire le contenu du Recordset,

Mais je souhaite à partir d'un control (ex : liste déroulante, zone de
texte,...) modifer une requête, et j'ai un formulaire basé sur cette même
requête, et donc que le formulaire se met à jour.

"Firebird" a écrit dans le message de
news:
Bonjour,

Je suggère plutôt d'utiliser une procédure stocké sur SQL avec un


paramètre
qui la condition de la requête. Au sein même de la procédure stocké, il
suffit de tester si la variable est pleine ou vide à l'aide d'une
instruction IF et exécuter la requête en incluant ou pas le filtre.

Petit exemple d'appel de procédure stocké en ADO :

Dim provstr As String
Dim cn2 As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command
Dim param1 As String

Set cn2 = New ADODB.Connection
provstr = "File Name=" + App.Path + "fichieraccesbasesql.udl;"
cn2.Open provstr

Set cmd = New ADODB.Command
Set cmd.ActiveConnection = cn2
cmd.CommandText = "nomprocedurestockee"
cmd.CommandType = adCmdStoredProc
cmd.CommandTimeout = 60

Set param1 = cmd.CreateParameter("Inparm1", adVarChar, adParamInput, 50,
"valeurdufiltre")
cmd.Parameters.Append param1


Set rs = cmd.Execute

While Not rs.EOF
'
' Lecture des enregistrements
rs.movenext
Wend

rs.close
set rs=nothing
cn2.close
set cn2=nothing

@ bientôt

Firebird



"alex" a écrit dans le message de
news:
> Bonjour,
> Comment faire la même chose en ADO ?
> Merci
>
> Dim Qry As DAO.QueryDef
> Dim StrSQL As String
> Dim IntPosition As Integer
>
> Set Db = CurrentDb
>
> 'Lecture code SQL
> Set Qry = CurrentDb.QueryDefs(Requete)
> StrSQL = Qry.SQL
> 'Position WHERE et la supprime
> IntPosition = InStr(1, StrSQL, "WHERE", vbTextCompare)
> If IntPosition > 0 Then
> StrSQL = Left(StrSQL, IntPosition - 1)
> 'Ajoute une condition
> StrSQL = StrSQL & " WHERE [TSTAGE].[TSTAGEnum]=" & StrFunction


&
> ";"
> Qry.SQL = StrSQL
> End If
> Qry.Close
> Set Qry = Nothing
>
>
>