IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB] - Requête SQL


Sujet :

VB 6 et antérieur

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 160
    Par défaut [VB] - Requête SQL
    Bonjour à tous,

    J'ai une appli VB qui utilise une BD FileMaker pro 5.5. Mon souci est que la requête ci-après me retourne toujours quoi qu'il arrive "-1"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "select count(*) from " & TronqueFichier(LireINI(SectFile, "fichier")) & " where code_article=" & Chr(34) & "ME007" & Chr(34) & ""), cnx
    Mes objets ADO fonctionnent car j'ai un insert qui fonctionne très bien. En loccurrence ici je dois faire un insert si et seulement si le numéro que je veux insérer n'existe pas déjà dans la base.

    Ma requête ici est : "select count(*) from GT_Inventaire_BouteilleARI where code_article="ME007"

    Dans ce cas elle devrait me retourner environ 1300. Pourquoi me retourne t-elle uniquement -1 ?

    Merci d'avance pour votre soutien.

    Guillaume.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 160
    Par défaut
    En complément voici ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Function existeDDSIS(numDDSIS As String) As Boolean
        dsTmp.Open ("select count(*) from " & TronqueFichier(LireINI(SectFile, "fichier")) & " where code_article=" & Chr(34) & "ME007" & Chr(34) & ""), cnx
        MsgBox Trim$(" & Chr(34) & 'ME007' & Chr(34) & ")
        MsgBox Trim$(Str$(dsTmp.RecordCount))
        If dsTmp.RecordCount > 0 Then
            existeDDSIS = True
            dsTmp.Close
        Else
            existeDDSIS = False
            dsTmp.Close
        End If
    End Function
    Et voici l'interface :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Private Sub acquisition()
    Dim ret() As String
        If fonction.SaisieArticle(TxtScan.Text, ret) Then
            If Not fonction.existeDDSIS(TxtScan.Text) Then
                Dim codeArticle As String
                Dim n°sdis As String
                Dim n°ddsis As String
                codeArticle = UCase$(Left$(TxtScan.Text, 5))
                n°sdis = Right$(TxtScan.Text, 4)
                n°ddsis = UCase$(TxtScan.Text)
                Call fonction.enregistreAcquisition(codeArticle, "test", n°ddsis)
                If fonction.existeDDSIS(TxtScan.Text) Then
                    Call Beep(Ok)
                    Lblmessage.Text = "Article ajouté dans la base !"
                Else
                    Call Beep(erreur)
                    Lblmessage.Text = "Une erreur est survenue ..."
                End If
            Else
                Call fonction.Beep(erreur)
                Lblmessage.Text = "Le numéro DDSIS : " & TxtScan.Text & " existe déjà dans la base de données !"
            End If
        Else
            Call fonction.Beep(erreur)
            Lblmessage.Text = "Le numéro DDSIS n'a pas un format valide !"
        End If
    End Sub

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 160
    Par défaut
    J'ai modifié ma fonction. Je viens de me rendre compte qu'elle génère une erreur je crois. Mais où est l'erreur ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Public Function existeDDSIS(numDDSIS As String) As Boolean
        'Initialisation du RecordSet
        If dsTmp.State <> adStateClosed Then dsTmp.Close
        dsTmp.Open ("select count(code_article) from " & TronqueFichier(LireINI(SectFile, "fichier")) & " where code_article=" & Chr(34) & "ME007" & Chr(34) & ""), cnx
        On Error GoTo erreur
        If dsTmp.RecordCount > 0 Then
            existeDDSIS = True
            dsTmp.Close
        Else
            existeDDSIS = False
            dsTmp.Close
        End If
    erreur:
        existeDDSIS = False
        MsgBox "ADOManager.existeDDSIS:erreur" & vbCr & vbCr & Err.Description, vbCritical
    End Function

  4. #4
    Membre éprouvé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Par défaut
    J'ai modifié ma fonction. Je viens de me rendre compte qu'elle génère une erreur je crois. Mais où est l'erreur ???
    Je te repose la question
    Fais un msgbox de ta requête pour voir s'il n'y a pas d'erreur de syntaxe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     msgbox "select count(code_article) from " & TronqueFichier(LireINI(SectFile, "fichier")) & " where code_article=" & Chr(34) & "ME007" & Chr(34) & ""

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 160
    Par défaut
    Je viens de voir en mettant des goto erreur partout que j'avais un autre problème dès le commencement. En effet j'ai une procédure init() qui fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub Init()
        On Error GoTo Erreur
        If cnx.State <> adStateClosed Then
            cnx.Close
        End If
        cnx.ConnectionString = "DRIVER={FileMaker Pro};FILEDSN=" & App.Path & "\ff.dsn;PASSWORD=" & LireINI("main", "mdp")
        cnx.Open
    Erreur:
        MsgBox "ADOManager.init:erreur" & vbCr & vbCr & Err.Description, vbCritical
    End Sub
    Etant donné que j'ai le msgBox qui s'affiche, y'a un souci. Mais ça fait pas mal de temps que je suis dessus et je vois pas ou est le problème. En plus de cela, dans l'interface suivante, j'ai un insert qui passe très bien alors ma connexion est censé ne pas être ouverte puisque erreur comme je l'ai dit plus haut...

    De l'aide !

    Merci à toi en tout cas

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 160
    Par défaut
    sinon la synthaxe de la requête est impeccable ...

  7. #7
    Membre éprouvé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Par défaut
    Pourquoi appeler des fonctions dans la chaine de connexion ? Tu peux juste les récuprérer dans des variables pour rendre ton code plus lisible.

    En faisant par exemple pour le mot de passe : pwd = LireINI("main", "mdp")

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 160
    Par défaut
    oui d'accord mais je suppose que ca revient strictement au même ...

  9. #9
    Membre éprouvé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Par défaut
    Qu'est ce que tu as comme message d'erreur ? SGBD ?

  10. #10
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Même si tu n'as pas d'erreur, tu passeras dans le message...

    Il faut mettre un Exit Sub avant l'étiquette Erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        ...
        cnx.ConnectionString = "DRIVER={FileMaker Pro};FILEDSN=" & App.Path & "\ff.dsn;PASSWORD=" & LireINI("main", "mdp")
        cnx.Open
        Exit Sub
    Erreur:
        MsgBox "ADOManager.init:erreur" & vbCr & vbCr & Err.Description, vbCritical
        ...
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 160
    Par défaut
    j'ai aucun message d'erreur c'est la requête "select count(*) ..." qui me renvoie toujours -1. C'est surement filemaker, sgbd complètement pourri qui fait ça. Enfin j'en sais rien mais ca commence sérieusement à me gaver.

    C'est bizarre parce que c'est une requête toute bête! La preuve j'ai un insert qui marche et le select marche pas. Pour le insert j'utilise un objet command et pour le select j'utilise un dataset.

  12. #12
    Membre éprouvé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Par défaut
    j'ai aucun message d'erreur c'est la requête "select count(*) ..." qui me renvoie toujours -1.
    Essaye d'ajouter les paramètres curseur et type de verrou au moment d'ouverture de la requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     rs.Open nomRequete, nomConnexion, adOpenForwardOnly, adLockReadOnly

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 160
    Par défaut
    ok bujuman j'essaie avec les paramètres dont tu parle. Et oui Alain je viens de voir ton message je savais pas que ca passait obligatoirement par erreur même s'il n'y en a pas. Ca m'arrange ca veut dire que j'ai pas d'erreur ! c'est donc seuelemtn cette requête qui marche pas..

    Un count marche avec fileMaker ?

    Vraiment merci à vous en tout cas

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 160
    Par défaut
    ça ne change rien avec les paramètres que tu m'a dit ... satané requête !!!

  15. #15
    Membre éprouvé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Par défaut
    J'ai complètement pélanger les médales.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs.Open nomRequete, nomConnexion, adOpenKeyset, adLockReadOnly
    adOpenKeyset au lieu de adOpenForwardOnly

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 160
    Par défaut
    J'ai rajouté ce que tu m'a mis et j'ai eu un message d'erreur :

    "ce pilote ODBC ne prends pas en charge les propriétés demandées"

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 160
    Par défaut
    Une question :

    J'ai mis des objet ADO. Cela suffit-il ou faut-il mettre aussi un concepteur dataEnvironment ou les objets ADO remplacent cet élément ?

Discussions similaires

  1. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/07/2024, 15h41
  2. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 19h42
  3. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  4. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo