Erreur dans ma requete sql [Résolu]

Messages postés
129
Date d'inscription
mardi 27 mai 2008
Dernière intervention
26 juillet 2011
- - Dernière réponse : GarnierFlorian
Messages postés
129
Date d'inscription
mardi 27 mai 2008
Dernière intervention
26 juillet 2011
- 12 nov. 2010 à 11:59
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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
129
Date d'inscription
mardi 27 mai 2008
Dernière intervention
26 juillet 2011
3
Merci
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 ;)
 

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 97 internautes nous ont dit merci ce mois-ci

Commenter la réponse de GarnierFlorian
Messages postés
834
Date d'inscription
mardi 5 octobre 2004
Dernière intervention
7 mai 2013
0
Merci
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.
Commenter la réponse de michelatoutfox
Messages postés
129
Date d'inscription
mardi 27 mai 2008
Dernière intervention
26 juillet 2011
0
Merci
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


 
Commenter la réponse de GarnierFlorian
Messages postés
129
Date d'inscription
mardi 27 mai 2008
Dernière intervention
26 juillet 2011
0
Merci
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

 
Commenter la réponse de GarnierFlorian
Messages postés
129
Date d'inscription
mardi 27 mai 2008
Dernière intervention
26 juillet 2011
0
Merci
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 :)
Commenter la réponse de GarnierFlorian
Messages postés
834
Date d'inscription
mardi 5 octobre 2004
Dernière intervention
7 mai 2013
0
Merci
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...
Commenter la réponse de michelatoutfox
Messages postés
129
Date d'inscription
mardi 27 mai 2008
Dernière intervention
26 juillet 2011
0
Merci
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 ;)

 
Commenter la réponse de GarnierFlorian

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.