Erreur dans ma requete sql [Résolu]

Signaler
Messages postés
129
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
26 juillet 2011
-
Messages postés
129
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
26 juillet 2011
-
Bonjour à tous !

Grâce à ma requête, je souhaite obtenir les pays et un nombre pour lesquels la date de création est égale à la date passée en paramètre (RPT.MOI pr le mois, et RPT.ANN pour l'année, ce qui donne par exemple 08/2010). La seule chose, mon champs dans ma table est sous la forme : jj/mm/aaaa !


Au départ, tout se passait à peut près bien lorsque je fesait ma requete de cette facon :

RESEXE.REQRPT = "SELECT DISTINCT nompay,COUNT(numctr) AS nb" & _
                                " FROM pays,client" & _
                                " WHERE client.codpay = pays.codpay" & _
                                " AND flg = 1" & _
                                " AND datcre = " & RPT.MOI & " / " & RPT.ANN & _
                                " GROUP BY pays.nompay" & _
                                " ORDER BY pays.nompay"


Et au moment de l'éxecution (
ss_rst.Open RESEXE.REQRPT, CNXFOX, adOpenStatic, adLockReadOnly, adCmdText
), j'avais le message suivant :

- Function argument value, type, or count is invalid.

Après modification, j'obtiens :

RESEXE.REQRPT = "SELECT DISTINCT nompay,COUNT(numctr) AS nb" & _
                                " FROM pays,client" & _
                                " WHERE client.codpay = pays.codpay" & _
                                " AND flg = 1" & _
                                " AND datcre LIKE "" & RPT.MOI & " / " & RPT.ANN & """ & _
                                " GROUP BY pays.nompay" & _
                                " ORDER BY pays.nompay"


Et là, je ne peux pas mettre cette requete dans ma variable RESEXE.REQRPT à cause d'une incompatibilité !

Donc voila, je ne sais pas si j'étais mieux partis au début ou si ma seconde partie est mieux ???

Merci pour votre aide !

Peace

7 réponses

Messages postés
129
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
26 juillet 2011

Bon ba je pense m'en être sorti !

Je met le lien vers le forum vb, plutôt que de reposter tout le code !!

Solution sur forum vb

Merci pour ton aide MichelAtoutFox !

Peace ;)
 
Messages postés
828
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
7 mai 2013
1
bonjour,

tu es sur un forum FoxPro; tes données sont dans des dbf?
Quel est le type de données du champ datecre? je dis bien le type, pas ce que tu vois.

tu parles de passage de paramètres; mais ici, tu ne passes pas deparamètre, tu concatène des valeurs dans une chaine de requète. à éviter! si tes données sont des dbf, ce n'est pas trop trop risqué (tu as seulement le problème de typage de données que tu nous signale), mais le jour où tu fais ça avec du MySql, du SQL Server, du Postgres, tu prends le risque d'une injection SQL.
Messages postés
129
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
26 juillet 2011

Bonjour !

Pour commencer, oui mes données sont dans des dbf !

Ensuite, mon champ datecre est de type Date !

Sinon je vais essayer de me renseigner pour faire des requetes paramétrées !

Merci !

Peace


 
Messages postés
129
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
26 juillet 2011

Bon, voici déjà ma requête qui fonctionne :

RESEXE.REQRPT = " SELECT DISTINCT pays.nompay,COUNT(client.numctr) AS nbprospect" & _
                                " FROM pays,client" & _
                                " WHERE client.codpay = pays.codpay" & _
                                " AND flgprp = 1" & _
                                " AND MONTH(client.datcre) = " & RPT.MOI & _
                                " AND YEAR(client.datcre) = " & RPT.ANN & _
                                " GROUP BY pays.nompay" & _
                                " ORDER BY pays.nompay"


Bon par contre du coup j'essaye de voir pour essayer de paramétrer ma requête, mais je ne suis pas encore sûr des infos que j'ai trouvé !

Pour info voici un site sur lequel je pense pouvoir m'inspirer :

Requêtes paramétrés vers une base de données

 
Messages postés
129
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
26 juillet 2011

Bon alors : je vais vous poster ai trouvé, ça me donne une erreur "Syntax Error" lors de l'exécution de la requete :

Sub Recuperation()
    Dim ss_cmd As ADODB.Command
    Dim ss_parmoi As Parameter
    Dim ss_parann As Parameter
    Dim ss_rst As ADODB.Recordset
    Dim ss_tgtran As Range
    Dim ss_colind As Integer
    
    On Error GoTo SelectSQL_Error
    
        Connexion

        If FLGCNX = True Then
            RESEXE.X = 13
            RESEXE.Y = 3
            'On déclare la command
            Set ss_cmd = New ADODB.Command
            With ss_cmd
                .ActiveConnection = CNXFOX
                .CommandType = adCmdText
                .NamedParameters = True
            End With
            
            ss_cmd.Parameters.Append ss_cmd.CreateParameter("ChoixMois", adInteger, 2)
            ss_cmd.Parameters.Append ss_cmd.CreateParameter("ChoixAnnee", adInteger, 4)
            
            ss_cmd("ChoixMois").Value = RPT.MOI
            ss_cmd("ChoixAnnee").Value = RPT.ANN
            
            SelectionRequete
            
            ss_cmd.CommandText = "PARAMETERS ChoixMois Int, ChoixAnnee Int;" & RESEXE.REQRPT
            
            
            'On déclare le recordset
            Set ss_rst = New ADODB.Recordset
            'Exécute la requête
            With ss_rst
                .CursorLocation = adUseClient
                .CursorType = adOpenStatic
                .LockType = adLockReadOnly
            End With
   
            Set ss_rst =  ss_cmd.Execute
            
            'On efface l'ensemble du contenu précédent
            With Workbooks(NOMFIC).Worksheets(FEUPRP)
    
                'On vérifie que l'on a bien récupéré des enregistrements
                If Not ss_rst.EOF Then
                    ss_rst.MoveFirst
                                                         
                    .Cells(RESEXE.X, RESEXE.Y).CopyFromRecordset ss_rst
                    'On récupère le nombre d'éléments traités :
                    RESEXE.NBRRES = ss_rst.RecordCount
                End If
    
            End With
            ss_rst.Close
                
            Set ss_cmd = Nothing
            Set ss_rst = Nothing
        End If
        
        Deconnexion
   On Error GoTo 0
   Exit Sub

SelectSQL_Error:
    MsgBox "(Erreur n°" & ERR.Number & ") " & ERR.Description
    RESEXE.ERR = ERR.Description
    FLGERR = True
End Sub


Ma fonction selection requete :

Public Sub SelectionRequeteProspect()
    
        Select Case RPT.PER
            Case RPTMEN
                RESEXE.REQRPT = " SELECT DISTINCT pays.nompay,COUNT(client.numctr) AS nbprospect" & _
                                " FROM pays,client" & _
                                " WHERE client.codpay = pays.codpay" & _
                                " AND flgprp = 1" & _
                                " AND MONTH(client.datcre) = [ChoixMois]" & _
                                " AND YEAR(client.datcre) = [ChoixAnnee]" & _
                                " GROUP BY pays.nompay" & _
                                " ORDER BY pays.nompay"
            Case else
                MsgBox "On ne fait rien"
        End Select

End Sub


Voila ! J'aimerais avoir votre avis pour savoir d'où peut venir mon erreur et pour m'assurer que j'ai bien procédé en ce qui concerne la création des paramètres !

Merci d'avance,

Peace :)
Messages postés
828
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
7 mai 2013
1
Bon,

maintenant que tu as compris que l'opérateur LIKE ne fonctionne pas sur des données de type date (mais seulement sur des strings), tu as pu avancer.

je ne pense pas que tu passes correctement tes paramètres, mais là, il te faut voir du côté du forum VB. en .net, je t'aurais aidé, mais en vb, ça fait trop longtemps que j'en ai fait...
Messages postés
129
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
26 juillet 2011

Bonjour !

Oui effectivement je n'avais pas été très attentif avec l'utilisation de mon like^^

J'ai déjà améliorer mon passage de paramètre, car j'arrive à bien voir leurs valeurs quand j'y ajoute un espion, mais j'ai toujours ce Syntax Error..

En tout cas merci, j'ai posté sur le forum vb, et j'attends l'aide d'une personne charitable^^

En tout cas je tiendrais au courant lorsque j'aurais trouvé d'où vient mon erreur !

Peace ;)