Requête sql et problème de syntaxe

rcan7412

XLDnaute Occasionnel
Bonjour,

Je souhaiterais développer le code vba ci-après qui inclu une requête sql.
J'importe dans xl des données venant de 2 tables dbf externe en les liant.
Tout fonctionne à merveille sauf que je voudrais importer les données suivant un critère supplémentaire que je n'arrive pas à coder.
Je souhaiterais que le champ "ligne.decr" (qui est un champ date dbase) soit filtré sur une période délimitée. Les bornes seraient stockées dans 2 cellules xl. (par exemple je voudrais tous les enregistrements dont la date du champ ligne.decr est comprise entre le 01/01/2006 et le 31/12/2006).

Je veux utiliser la commande WHERE mais en vain.

Quelqu'un peut-il m'aider ?

Code:
Private Sub CommandButton1_Click()
'bouton d'importation pour le processus d'import du fichier comptes.dbf et appel de la procédure d'import de lign.dbf
Application.ScreenUpdating = False
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Chemin As String, Cible As String, comptes As String, lign As String, DATEDEB As String, DATEFIN As String
Dim Fld As ADODB.Field
Dim i As Integer

If ComboBox1.ListIndex = -1 Then Exit Sub

Chemin = "C:\evolution\" & ComboBox1.List(ComboBox1.ListIndex, 1)
comptes = "comptes.dbf"
lign = "lign.dbf"
DATEDEB = "#01/01/2006#"
DATEFIN = "#31/31/2006#"

'efface la feuille comptes
Sheets("Balance").Select
Selection.CurrentRegion.Select
Selection.ClearContents
Range("A1").Select


Set Cn = New ADODB.Connection
Cn.Open _
"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" & _
Chemin & ";"

Cible = "SELECT comptes.COMP,comptes.INTI, sum(lign.DEBI-lign.CRED)AS MONTANT, comptes.NATU, lign.DECR " & " FROM lign INNER JOIN comptes ON comptes.COMP=lign.NUMC GROUP BY comptes.COMP, comptes.INTI, comptes.NATU, lign.DECR  ORDER BY comptes.COMP"


Set Rs = New Recordset
Rs.Open Cible, Cn, adOpenKeyset, adLockOptimistic

For Each Fld In Rs.Fields
i = i + 1
Sheets("Balance").Cells(1, i) = Fld.Name
Next Fld


Do While Not Rs.EOF
Sheets("Balance").Range("A2").CopyFromRecordset Rs
Loop


Sheets("Balance").Select
Range("A1").Select
        
Rs.Close
Cn.Close

Application.ScreenUpdating = True
End Sub
 

MichelXld

XLDnaute Barbatruc
Re : Requête sql et problème de syntaxe

bonjour rcan7412, bonjour cher Pascal


Code:
Tout à fait, mais là n'est pas le problème de fond
Un petit peu quand même... ;o)

Enlève les guillemets, puis déclare DATEDEB et DATEFIN As Date

Code:
DATEDEB = #01/01/2006#
DATEFIN = #31/12/2006#


En fonction de ta configuration, il faudra peut etre écrire les dates au format mm/jj/aaaa (à tester).



Bonne journée
MichelXld
 

rcan7412

XLDnaute Occasionnel
Re : Requête sql et problème de syntaxe

J'ai trouvé ceci qui marche mais je ne sais pas comment faire le lien entre la date qui est dans le code sql et un date qui proviendrait d'une cellule xl.
Il faudrait définir des variables sui seraient reprises dans le code sql après "cible =" mais je ne sais pas comment m'y prendre ??

Code:
Private Sub CommandButton1_Click()
'bouton d'importation pour le processus d'import du fichier comptes.dbf et appel de la procédure d'import de lign.dbf
Application.ScreenUpdating = False
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Chemin As String, Cible As String, comptes As String, lign As String, DATEDEB As String, DATEFIN As String
Dim Fld As ADODB.Field
Dim i As Integer

If ComboBox1.ListIndex = -1 Then Exit Sub

Chemin = "C:\evolution\" & ComboBox1.List(ComboBox1.ListIndex, 1)
comptes = "comptes.dbf"
lign = "lign.dbf"
DATEDEB = ??????????????????????????
DATEFIN = ???????????????????????????
'efface la feuille comptes
Sheets("Balance").Select
Selection.CurrentRegion.Select
Selection.ClearContents
Range("A1").Select


Set Cn = New ADODB.Connection
Cn.Open _
"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" & _
Chemin & ";"

Cible = "SELECT comptes.COMP,comptes.INTI, sum(lign.DEBI-lign.CRED)AS MONTANT, comptes.NATU " & " FROM lign, comptes where comptes.COMP=lign.NUMC and lign.DECR>={d '2006-01-01'} and lign.DECR<={d '2006-12-31'} GROUP BY comptes.COMP, comptes.INTI, comptes.NATU  ORDER BY comptes.COMP"


Set Rs = New Recordset
Rs.Open Cible, Cn, adOpenKeyset, adLockOptimistic

For Each Fld In Rs.Fields
i = i + 1
Sheets("Balance").Cells(1, i) = Fld.Name
Next Fld


Do While Not Rs.EOF
Sheets("Balance").Range("A2").CopyFromRecordset Rs
Loop

Sheets("Balance").Select
Range("A1").Select
        
Rs.Close
Cn.Close

Application.ScreenUpdating = True
End Sub
 

rcan7412

XLDnaute Occasionnel
Re : Requête sql et problème de syntaxe

MichelXld à dit:
bonjour rcan7412, bonjour cher Pascal


Code:
Tout à fait, mais là n'est pas le problème de fond
Un petit peu quand même... ;o)

Enlève les guillemets, puis déclare DATEDEB et DATEFIN As Date

Code:
DATEDEB = #01/01/2006#
DATEFIN = #31/12/2006#


En fonction de ta configuration, il faudra peut etre écrire les dates au format mm/jj/aaaa (à tester).



Bonne journée
MichelXld

Merci Michel,

J'ai essayé ceci mais en vain : "erreur : d'exécution - 2147217904 (800040e10) Microsoft pilote odbc dbase trop peu de paramètres . 2 attendu

Code:
....
Dim Chemin As String, Cible As String, comptes As String, lign As String,
DATEDEB As Date, DATEFIN As Date
....
DATEDEB = #1/1/2006#
DATEFIN = #12/31/2006#
....
Cible = "SELECT comptes.COMP,comptes.INTI, 
sum(lign.DEBI-lign.CRED)AS MONTANT, comptes.NATU " & " 
FROM lign, comptes 
where comptes.COMP=lign.NUMC and lign.DECR>=DATEDEB and lign.DECR<=DATEFIN 
GROUP BY comptes.COMP, comptes.INTI, comptes.NATU  ORDER BY comptes.COMP"
....
 

MichelXld

XLDnaute Barbatruc
Re : Requête sql et problème de syntaxe

rebonjour

Fait un essai en remplaçant

Code:
Set Rs = New Recordset
Rs.Open Cible, Cn, adOpenKeyset, adLockOptimistic

par

Code:
Set Rs = New ADODB.Recordset
 
With Rs
  .ActiveConnection = Cn
  .Open Cible, , adOpenStatic, adLockOptimistic, adCmdText
End With


Il faut aussi qur tu revois cette partie

Code:
Cible = "SELECT comptes.COMP,comptes.INTI, 
sum(lign.DEBI-lign.CRED)AS MONTANT, comptes.NATU " & " 
FROM lign, comptes 
where comptes.COMP=lign.NUMC and lign.DECR>=DATEDEB and lign.DECR<=DATEFIN 
GROUP BY comptes.COMP, comptes.INTI, comptes.NATU  ORDER BY comptes.COMP"

dans la style (non testé)

Code:
Cible = "SELECT comptes.COMP,comptes.INTI, 
sum(lign.DEBI-lign.CRED)AS MONTANT, comptes.NATU " & " 
FROM lign, comptes 
where comptes.COMP=lign.NUMC and lign.DECR>=" & DATEDEB & " and lign.DECR<=" & DATEFIN & _
" GROUP BY comptes.COMP, comptes.INTI, comptes.NATU  ORDER BY comptes.COMP"

les variables ne peuvent pas être placées entre guillemets.


Bonne soirée
MichelXld
 

rcan7412

XLDnaute Occasionnel
Re : Requête sql et problème de syntaxe

Merci Michel de consacrer du temps à mon cas.

J'ai essayé ta proposition qui ne génère aucun message d'erreur mais qui ne revoie pas de données si ce n'est le titre des champs.

Je me demande si le problème ne vient pas du format de la date ?

Comme j'ai déclaré les variables en format date, celles-ci sont d'office modifée comme suit :

encodée :
Code:
DATEDEB = #01/01/2006#
DATEFIN = #31/12/2006#

Transformée :
Code:
DATEDEB = #1/1/2006#
DATEFIN = #12/31/2006#
 

MichelXld

XLDnaute Barbatruc
Re : Requête sql et problème de syntaxe

bonjour


Dans ce cas, procède par étape pour tes essais:


Par exemple

Code:
Dim DATEFIN As String , DATEDEB As String

DATEDEB = "2006-01-01"
DATEFIN = "2006-12-31"

((lign.DREL>={d '" & DATEDEB & "'} And lign.DREL<={d '" & DATEFIN & "'}))


Bon après midi
MichelXld
 

rcan7412

XLDnaute Occasionnel
Re : Requête sql et problème de syntaxe

Merci Michel,

Cela fonctionne parfaitement. Il me reste un souci :

comment récupérer la date stockée dans une cellule de la feuille sous la forme d'une date excel "38718" vers le contenu de la variable dans le code VBA.

Dans xl :
Dans la cellule B3 de la feuille "EVOL" la date contenue est 38718 affichée au format "01/01/2006"

Dans vba :
DATEDEB = "2006-01-01"

J'essaie de transformer la date dans la feuille de calcul au format texte avec des fonctions comme "concatener", mais j'ai des problèmes avec le "0" de les chiffres 1 à 9 (mois et jour).
Est-ce la bonne façon de procéder ou bien faut-il transformer la date contenue dans la cellule avec une fonction vba dans le code ?

Merci et bonne journée.

Rodolphe
 

rcan7412

XLDnaute Occasionnel
Re : Requête sql et problème de syntaxe

Merci Pascal et Michel pour vos réponses rapides comme l'éclair !
Vos 2 solutions fonctionnent sans problème.
Dans la solution de Pascal, il faut juste sélectionner la feuille EVOL.

Vous n'imaginez pas le plaisir que vous m'avez procuré pour rendre opérationnelle cette application.

Merci encore et bonne journée
 

Discussions similaires

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh