Pb requete vb sur base foxpro [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 !

Je reviens pour un problème de requête, en esperant que cette fois quelqu'un pouura me venir en aide.

Je vous met ce lien qui reprend un bout de mon code :

Code de ma procédure

Et donc, cette fois j'utilise cette requête :

RESEXE.REQRPT = "SELECT DISTINCT pays.nompay,COUNT(client.numctr) AS nbrprp" & _
                            " FROM pays,client" & _
                            " WHERE client.codpay = pays.codpay" & _
                            " AND client.flgprp = 1" & _
                            " AND TRIM(DTOS(client.datcre)) = " & DEBPER & _
                            " GROUP BY pays.nompay" & _
                            " ORDER BY pays.nompay"


L'erreur qui m'est renvoyé est : "operator operand type mismatch"

Voilà si quelqu'un à une idée ?!

Peace

2 réponses

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

Bon ba ça y est, à force de tourner ça dans tous les sens,j'ai fini ar trouvé ma solution :

            RESEXE.REQRPT = "SELECT DISTINCT pays.nompay,COUNT(client.numctr) AS nbrprp" & _
                            " FROM pays,client" & _
                            " WHERE client.codpay = pays.codpay" & _
                            " AND client.flgprp = 1" & _
                            " AND client.datcre BETWEEN {^" & DEBPER & "}" & _
                            " AND {^" & FINPER & "}" & _
                            " GROUP BY pays.nompay" & _
                            " ORDER BY pays.nompay"


Pour info, DEBPER et FINPER sont des variables qui contiennent des chaines de type : 2010-11-18 ! ! ! Bien faire attention aux délimiteurs :

DEBPER = "2010-11-18"

et non pas
DEBPER = "2010/11/18"


Dernière chose, la date est en américain : donc aaaa-mm-jj !

Voila en esperant que ça en aide certains !!

Peace :)

Ps: je posterais ma version finale où je passerais mes variables en paramètre.
 
Messages postés
129
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
26 juillet 2011

Voici la mise à jour avec l'utilisation des paramètres(procédure de création de paramètre et passage dans la requête) :

Sub RecuperationProspect()
    Dim rp_cmd As ADODB.Command
    Dim rp_debper As ADODB.Parameter
    Dim rp_finper As ADODB.Parameter
    Dim rp_rst As ADODB.Recordset
    
    On Error GoTo RecuperationProspect_Error
        'Procédure de connexion aux tables foxpro  
        Connexion
        'Si le flag me renvoi true, la connexion est ouverte donc..       
        If FLGCNX = True Then            
            Set rp_cmd = New ADODB.Command
            
            With rp_cmd
                .ActiveConnection = CNXFOX
                .CommandType = adCmdText
                .NamedParameters = True
            End With
            'Mes deux paramètres
            Set rp_debper = New ADODB.Parameter
            Set rp_finper = New ADODB.Parameter
            'Leurs propriétés
            With rp_debper
                .Direction = adParamInputOutput
                .Type = adBSTR
                .Name = "DebutPeriode"
            End With
            
            With rp_finper
                .Direction = adParamInputOutput
                .Type = adBSTR
                .Name = "FinPeriode"
            End With

            'On les ajoute à la collection de paramètre de l'objet Command
            rp_cmd.Parameters.Append rp_debper
            rp_cmd.Parameters.Append rp_finper
                        
            'On donne les valeurs, le début et la fin de période(type string)
            rp_debper.Value = DEBPER
            rp_finper.Value = FINPER

            'Procédure qui récupère la requete en y passant les paramètres
            'je la donne plus bas 
            RecuperationRequeteProspect rp_debper, rp_finper

            rp_cmd.CommandText = RESEXE.REQRPT
            
            Set rp_rst = New ADODB.Recordset

            With rp_rst
                .CursorLocation = adUseClient
                .CursorType = adOpenStatic
                .LockType = adLockReadOnly
            End With
            
            rp_rst.Open rp_cmd
            'Ensuite vous faites tous les traitements voulus avec votre recordset
            rp_rst.Close
                
            Set rp_cmd = Nothing
            Set rp_debper = Nothing
            Set rp_finper = Nothing
            Set rp_rst = Nothing
        End If
        'Fonction pr se déconnecter des tables..
        Deconnexion
   On Error GoTo 0
   Exit Sub

Recuperation_Error:
    MsgBox "(Erreur n°" & ERR.Number & ") " & ERR.Description
End Sub


Et donc, ma procédure qui récupère ma requete :

Public Sub RecuperationRequeteProspect(sr_debper As ADODB.Parameter, sr_finper As ADODB.Parameter)
            RESEXE.REQRPT = "SELECT DISTINCT pays.nompay,COUNT(client.numctr) AS nbrprp" & _
                            " FROM pays,client" & _
                            " WHERE client.codpay = pays.codpay" & _
                            " AND client.flgprp = 1" & _
                            " AND client.datcre BETWEEN {^" & sr_debper & "}" & _
                            " AND {^" & sr_finper & "}" & _
                            " GROUP BY pays.nompay" & _
                            " ORDER BY pays.nompay"
End Sub


Et voilà ! En esperant que ça puisse aider certaines personnes !!

Peace ;)