begin process at 2012 05 24 09:38:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Foxpro

 > 

Divers

 > 

Général

 > 

Erreur dans ma requete sql


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Erreur dans ma requete sql

mardi 9 novembre 2010 à 14:28:34 | Erreur dans ma requete sql

GarnierFlorian

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 :

Code Visual Basic :
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 (
Code Visual Basic :
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 :

Code Visual Basic :
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
mardi 9 novembre 2010 à 17:30:13 | Re : Erreur dans ma requete sql

MichelAtoutFox

Membre Club
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.
mercredi 10 novembre 2010 à 08:38:45 | Re : Erreur dans ma requete sql

GarnierFlorian

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


 
mercredi 10 novembre 2010 à 10:32:10 | Re : Erreur dans ma requete sql

GarnierFlorian

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

Code Visual Basic :
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

 
mercredi 10 novembre 2010 à 12:22:27 | Re : Erreur dans ma requete sql

GarnierFlorian

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

Code Visual Basic :
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 :

Code Visual Basic :
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 :)
mercredi 10 novembre 2010 à 17:20:04 | Re : Erreur dans ma requete sql

MichelAtoutFox

Membre Club
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...
vendredi 12 novembre 2010 à 10:04:17 | Re : Erreur dans ma requete sql

GarnierFlorian

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 ;)

 
vendredi 12 novembre 2010 à 11:59:53 | Re : Erreur dans ma requete sql

GarnierFlorian

Réponse acceptée !
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 ;)
 


Cette discussion est classée dans : code, requete, pays, rpt, nompay


Répondre à ce message

Sujets en rapport avec ce message

Probleme d'etat et de requete !!! [ par spoutnic_37 ] aloha , Je voudrais savoir si il etait possible de copier les infos d'un grid pour les afficher dans un etat ? En fait pour ceux qui veulent m'aider, probleme se "SUM" !!! [ par spoutnic_37 ] aloha,J'ai un bug d'affichage généré par une fonction sum présente dans un code.Le code ci vfp9 vues distantes [ par samirba ] Bonjour, J'utilise une vue distante composé de deux tables relié entres-elles par un code champ et une jointure left join. Une valeur null est renvoyé erreur sur creation de table [ par ducker88 ] Bonjour,Voila je veux creer une table dans une database existente, je me suis inspiré de l'aide de VFP et j'en ai tiré le code suivant : CREATE TABLE probleme requete et date [au secours] [ par ducker88 ] bonjour,Voila j'ai creer la requete suivante : select num_di,libe_di,date_dema where date_dema >={2006/01/19}et quand elle est executer elle fait l'er Creation de table mais pas a l'endroit voulu [ par ducker88 ] Bonjour,Voila je souhaiterai creer une table dans une base specifique.J'ai donc tapé le code suivant : CLOSE DATABASES SET PATH TO C_che Relation 0 a plusieurs [ par ducker88 ] Bonjour, Je pense que cette question releve plus du code SQL que du code foxpro.J'aimerai savoir comment creer une relation entre deux table du type z chargement de combobox [ par brunaux ] Bonjourje charge un combobox avec toutes les communes de france ( +de 36 000 enregis.) avec le code suivant mais cela prends un peu de temps, y-a-t-il message d'erreur [ par jee0404 ] Bonjour ,            J'ai un problème , je voudrais afficher les erreures et la ligne de code ou l'erreure est générer , cela marche bien quand je le If not [ par jemanirambe ] Bonjour,je suis débutant et j'ai un problème, mais qui n'en a pas...j'aimerai vérifier dans un code si une variable existe, j'ai essayé" IF Not xxx "


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales