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

Requêtes et SQL. Discussion :

Pb syntaxe SQL dans recodset: trop peu de parametre


Sujet :

Requêtes et SQL.

  1. #1
    Membre éclairé
    Directeur technique
    Inscrit en
    Novembre 2006
    Messages
    584
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 584
    Par défaut Pb syntaxe SQL dans recodset: trop peu de parametre
    Bonjour,

    Je fini par poster car j'ai fait vraiment beaucoup d'essais (j'ai même essayé de réfléchir) mais je n'y arrive pas.

    Je cherche le premier numéro disponible pour faire un versement d'archive dans un cadre de classement type Archives départementales.

    Dans un formulaire de "Versement" je saisi un code Série "Serie" et un code Sous-Série "NumeroVOSS".

    La fonction ProchainVersement est lancéee
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     '__ Donne le prochain numéro de série à utiliser
     
        Me.txtProchainVersement.Value = ProchainVersement(Me.Serie, Me.NumeroVOSS)

    et me ramène le numéro
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Public Function ProchainVersement(ByVal Serie As String, ByVal NumeroVOSS As Long)
     
    Dim sqltextPV As String
    Dim ProchainContinuW As String
    Dim ProchainContinuL As String
    Dim rstPV As DAO.Recordset
     
     
    Debug.Print "PV "; sqltextPV
     
     Select Case Serie
            Case "W"
            ' cas d'un classement en série continue, le numéro est à gauche
    sqltextPV = "SELECT ItemID FROM tblItem WHERE ItemID LIKE '*" & Serie & "*' ORDER BY ItemID;"
    Set rstPV = CurrentDb.OpenRecordset(sqltextPV)
    rstPV.MoveLast 'se place sur le dernier record trié
    RenvoiDescriptionPV = rstPV!ItemID
    Debug.Print "ItemID = "; RenvoiDescriptionPV
    rstPV.Close
    ProchainContinu = Left(RenvoiDescriptionPV, (InStr("1", RenvoiDescriptionPV, Serie, vbTextCompare)) - 1) + 1
            Case "L"
           ' cas d 'un classement en série thématique, le numéro est à droite
                Select Case NumeroVOSS
                Case "1"
                    '__ On selectionne les numéros d'articles commençant par 1L
     
    sqltextPV = "SELECT ItemID FROM tblItem WHERE Left(ItemID , (InStr(1, ItemID, '" & Serie & "', vbTextCompare)) + 1) = " & NumeroVOSS & " AND ItemID LIKE '*" & Serie & "*' ORDER BY ItemID;"
     
    Debug.Print sqltextPV
    Set rstPV = CurrentDb.OpenRecordset(sqltextPV)
    rstPV.MoveLast 'se place sur le dernier record trié
    RenvoiDescriptionPV = rstPV!ItemID
    Debug.Print "ItemID = "; RenvoiDescriptionPV
    rstPV.Close
    ProchainContinu = Right(RenvoiDescriptionPV, (InStr("1", RenvoiDescriptionPV, Serie, vbTextCompare)) + 1) + 1
                Case Else
                End Select
            Case Else
    rstPV.Close 'ne pas oublier de refermer le recordset apres
    End Select
     
    'Debug.Print "W"; ProchainContinu
    Debug.Print "Prochain "; ProchainContinu
    ProchainVersement = ProchainContinu
    End Function
    Dans le cas W ca fonctionne
    Dans le cas 1L j'ai l'erreur "Trop peu de param, 1 attendu"
    Le debug print donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ItemID FROM tblItem WHERE Left(ItemID , (InStr(1, ItemID, 'L', vbTextCompare)) + 1) = 1 AND ItemID LIKE '*L*' ORDER BY ItemID;
    Parmi ceux qui veillent, il y en aurait-il un pour me décoincer?
    Merci et bon WE

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Par défaut
    bonjour,

    Essayer de remplacer <vbTextCompare> par sa valeur numérique soit 1.

    Cordialement,

    Philippe

  3. #3
    Membre éclairé
    Directeur technique
    Inscrit en
    Novembre 2006
    Messages
    584
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 584
    Par défaut
    Merci pour ton attention,

    Si je remplace tout le <left...> par 1 je n'ai pas d'erreur.

    Si je remplace <vbTextCompare> par 1 j'ai "type de données incompatible dans l'expression du critère".

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Par défaut
    re bonjour,

    ItemId est un string et numerovoss est un long donc incompatibilité de type dans l'expression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Left(ItemID , (InStr(1, ItemID, '" & Serie & "', vbTextCompare)) + 1) = " & NumeroVOSS
    il faut écrire éventuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Left$(ItemID , (InStr(ItemID, '" & Serie & "')) + 1) = '" & NumeroVOSS & "'"
    cordialement,

    Philippe

  5. #5
    Membre éclairé
    Directeur technique
    Inscrit en
    Novembre 2006
    Messages
    584
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 584
    Par défaut
    Merci pour ta réponse,

    J'ai introduit ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sqltextPV = "SELECT ItemID FROM tblItem WHERE Left$(ItemID , (InStr(ItemID, '" & Serie & "')) + 1) = '" & NumeroVOSS & "' AND ItemID LIKE '" & Serie & "*' ORDER BY ItemID;"
    Je n'ai pas d'erreur mais il ne trouve pas l'enregisttrement.

    Je m'en suis tiré comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim ConcatSerie As String
    ConcatSerie = NumeroVOSS & "" & Serie & "*"
    sqltextPV = "SELECT ItemID FROM tblItem WHERE ItemID LIKE '" & ConcatSerie & "' ORDER BY ItemID;"
    Mais maintenant j'ai une erreur type incompatible sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ProchainContinu = Right(RenvoiPV, (InStr("1", RenvoiPV, Serie, vbTextCompare)) + 1) + 1
    Alors que dans le cas "W" ca fonctionne (avec Left)

    Procedure complete (j'ai simplifié, un peu, l'écriture
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Public Function ProchainVersement(ByVal Serie As String, ByVal NumeroVOSS As Long)
     
    Dim sqltextPV As String
    Dim ProchainContinu As String
    Dim RenvoiPV As String
    Dim rstPV As DAO.Recordset
     
     
    Debug.Print "PV "; sqltextPV
     
     Select Case Serie
            Case "W"
            ' cas d'un classement en série continue, le numéro est à gauche
    sqltextPV = "SELECT ItemID FROM tblItem WHERE ItemID LIKE '*" & Serie & "*' ORDER BY ItemID;"
    Debug.Print sqltextPV
    Set rstPV = CurrentDb.OpenRecordset(sqltextPV)
    rstPV.MoveLast 'se place sur le dernier record trié
    RenvoiPV = rstPV!ItemID
    Debug.Print "ItemIDW = "; RenvoiPV
    rstPV.Close
    ProchainContinu = Left(RenvoiPV, (InStr("1", RenvoiPV, Serie, vbTextCompare)) - 1) + 1
            Case "L"
           ' cas d 'un classement en série thématique, le numéro est à droite
                Select Case NumeroVOSS
                Case "1"
                    '__ On selectionne les numéros d'articles commençant par 1L
    Dim ConcatSerie As String
    ConcatSerie = NumeroVOSS & "" & Serie & "*"
    'Debug.Print "ConcatSerie  =  "; ConcatSerie
     'sqltextPV = "SELECT ItemID FROM tblItem WHERE Left$(ItemID , (InStr(ItemID, '" & Serie & "')) + 1) = '" & NumeroVOSS & "' AND ItemID LIKE '" & Serie & "*' ORDER BY ItemID;"
    sqltextPV = "SELECT ItemID FROM tblItem WHERE ItemID LIKE '" & ConcatSerie & "' ORDER BY ItemID;"
     
    Debug.Print sqltextPV
    Set rstPV = CurrentDb.OpenRecordset(sqltextPV)
    rstPV.MoveLast 'se place sur le dernier record trié
    RenvoiPV = rstPV!ItemID
    Debug.Print "ItemIDL = "; RenvoiPV
    rstPV.Close
    ProchainContinu = Right(RenvoiPV, (InStr("1", RenvoiPV, Serie, vbTextCompare)) + 1) + 1
                Case Else
                End Select
            Case Else
    rstPV.Close
    End Select
     
    Debug.Print "Prochain "; ProchainContinu
    ProchainVersement = ProchainContinu
    End Function
    Le Debug.Print "ItemIDW = "; RenvoiPV donne par exemple 5W1 et le ProchainVersement est 6

    Le Debug.Print "ItemIDL = "; RenvoiPV donne 1L3 et le resultat attendu pour ProchainVersement est 4

    Merci pour ton aide

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Dans un cas similaire, j'avais une légère différence entre les paramètres SQL et les champs de la tables.

    Es-tu certains de tes noms de champ ?
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  7. #7
    Membre éclairé
    Directeur technique
    Inscrit en
    Novembre 2006
    Messages
    584
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 584
    Par défaut
    Bonsoir Heureux oli

    De quels genre de différence parle tu?

    Pour mes noms de champ j'en aussi certain que l'on peut l'être (cet à dire à mon petit niveau d'expertise)

    Ca fctionne dans le cas W
    Dans le cas L seul NumeroVOSS est en plus il j'y trouve la valeur attendue.

  8. #8
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Différence dans les noms.

    passwd au lieu de password.
    C'était l'erreur que j'avais et le message était trop peu de paramètres.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  9. #9
    Membre éclairé
    Directeur technique
    Inscrit en
    Novembre 2006
    Messages
    584
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 584
    Par défaut
    Je crois que mon problème est dans une mauvaise interpretation de Left et Right.
    Le cas qui marche est peut-etre du au hazard?

    Mon problème est le suivant.
    Si mon ItemID est du genre 5W1 le numéro d'ordre est à gauche de la serie (W), le prochain est donc 6.
    Si mon ItemID est du genre 2L3 le numéro d'ordre est à droite de la serie (L), le prochain est donc 4.

    Je pense donc qu'il vaut mieux utiliser split avec W ou L comme séparateur.

    J'y retourne de suite...

  10. #10
    Membre éclairé
    Directeur technique
    Inscrit en
    Novembre 2006
    Messages
    584
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 584
    Par défaut
    Ca y est

    Il fallait bien que j'utilise Split
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    monTab = Split(RenvoiPV, "L")
    Debug.Print "MonTab = "; monTab(1)
    ProchainContinu = monTab(1) + 1
                Case Else
                End Select
            Case Else
    rstPV.Close
    End Select
    Debug.Print "Prochain "; ProchainContinu
    ProchainVersement = ProchainContinu
    End Function
    Plus qu'à mettre tout ca bien propre
    Merci à H oli et Philippe

    JC

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Syntaxe SQL dans le VBA
    Par Pithonnette dans le forum VBA Access
    Réponses: 1
    Dernier message: 27/06/2008, 12h00
  2. erreur de syntaxe sql dans vba
    Par @rkane dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/12/2006, 18h23
  3. [MySQL] Comment écrire une syntaxe SQL dans un echo
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/09/2006, 18h53
  4. [ACCESS] Syntaxe SQL dans un TQuery avec Requestlive=True
    Par Unusual_FL dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/06/2005, 10h51
  5. probleme de syntaxe sql dans VB
    Par njac dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 20/05/2005, 14h41

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