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 :

Faute dans Insert Into [AC-2013]


Sujet :

Requêtes et SQL.

  1. #1
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 135
    Points : 497
    Points
    497
    Par défaut Faute dans Insert Into
    Bonjour membres du forum !
    Très heureux de vous retrouver.

    Mon code Insert Into
    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
    Sub ProgrammerUnSalaire(xIdta As Long, NumSalBase As Long, xMle As Long, xMois As String)
    Dim NoEnreg As Long
    Dim vSB As Double
    Dim vSJ As Variant
     
    NoEnreg = F_NumPrgSalaire()
    vSB = Replace(SalaireBaseEmployé(NumSalBase, xIdta, xMle), ",", ".")
     
    vSJ = Replace(Round(vSB / 30, 2), ",", ".")
    strSql = "INSERT INTO PrgSalaires(Num_Sal,Etabl_Employeur,Num_emp,Mois_prog,Id_NumSalaireBase,Salaire_B,salairej,restapayer) " _
    & "VALUES(" & NoEnreg & "," & xIdta & "," & xMle & ",'" & xMois & "'," & NumSalBase & "," & vSB & "," & vSJ & "," & vSB & ")"
    DoCmd.SetWarnings False
    DoCmd.RunSQL strSql
    DoCmd.SetWarnings True
    End Sub
    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
     
    Function SalaireBaseEmployé(NumSalBase As Long, idet As Long, no As Long) As Double
    On Error GoTo Rama
    Dim db As Database
    Dim rst As Recordset
    Dim sql As String
        Set db = CurrentDb
        sql = "select * from SalairesEmploye where Num_SB = " & NumSalBase & " and Ident_Employeur = " & idet & " and Num_Emp = " & no & " order by Date_Maj DESC;"
        Set rst = db.OpenRecordset(sql)
            If Not rst.EOF Then
                rst.MoveFirst
                SalaireBaseEmployé = rst.Fields("Salaire_base")
            Else
                SalaireBaseEmployé = 0
            End If
    Exit Function
    Rama:
        MsgBox "Erreur n° " & err.Number & vbCrLf & err.description, vbCritical + vbOKOnly, "Une erreur est survenue"
    End Function
    regorge des fautes.
    Voir capture d'erreurs:
    Nom : GestionPersonnelECIND2.PNG
Affichages : 300
Taille : 28,5 KoNom : GestionPersonnelECIND.PNG
Affichages : 273
Taille : 26,5 Ko
    Nom : GestionPersonnelECIND3.PNG
Affichages : 249
Taille : 10,6 Ko
    Indiquez moi où se trouve les erreurs.
    Cordialement.

  2. #2
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Votre req INSERT INTO concerne-t-elle qu'un seul et même NumSal ou alors vous insérez en tuple un même NumSal ?
    Si cas 2 alors normal que votre req vous jette, puisque NumSal est pk dans votre tbl et donc interdit les doublons !

  3. #3
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 135
    Points : 497
    Points
    497
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    Votre req INSERT INTO concerne-t-elle qu'un seul et même NumSal ou alors vous insérez en tuple un même NumSal ?
    Si cas 2 alors normal que votre req vous jette, puisque NumSal est pk dans votre tbl et donc interdit les doublons !
    Je vous envoie la pièce jointe de mon application afin de trouver un solution adéquate.
    Nom : GestionPersonnelECIND4.PNG
Affichages : 263
Taille : 93,5 Ko
    Cordialement.
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 859
    Points : 14 977
    Points
    14 977
    Par défaut
    bonjour,
    commence par remplacer cette partie de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim vSB As Double
    Dim vSJ As Variant
     
    NoEnreg = F_NumPrgSalaire()
    vSB = Replace(SalaireBaseEmployé(NumSalBase, xIdta, xMle), ",", ".")
     
    vSJ = Replace(Round(vSB / 30, 2), ",", ".")
    strSql = "INSERT INTO PrgSalaires(Num_Sal,Etabl_Employeur,Num_emp,Mois_prog,Id_NumSalaireBase,Salaire_B,salairej,restapayer) " _
    & "VALUES(" & NoEnreg & "," & xIdta & "," & xMle & ",'" & xMois & "'," & NumSalBase & "," & vSB & "," & vSJ & "," & vSB & ")"
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim vSB As Variant 
    Dim vSJ As Variant
     
    NoEnreg = F_NumPrgSalaire()
    vSB = SalaireBaseEmployé(NumSalBase, xIdta, xMle)
     
    vSJ = Replace(Round(vSB / 30, 2), ",", ".")
    vSB = Replace(vSB, ",", ".")
     
    strSql = "INSERT INTO PrgSalaires(Num_Sal,Etabl_Employeur,Num_emp,Mois_prog,Id_NumSalaireBase,Salaire_B,salairej,restapayer) " _
    & "VALUES(" & NoEnreg & "," & xIdta & "," & xMle & ",'" & xMois & "'," & NumSalBase & "," & vSB & "," & vSJ & "," & vSB & ")"

  5. #5
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 135
    Points : 497
    Points
    497
    Par défaut
    Bonsoir Tee_grandbois !
    Bonsoir membres du forum !

    J'ai effectué le changement tel que suggéré. Mais il ramène le Num_Empl dans le champ "Id_NumSalaireBase" et vis versa "Id_NumSalaireBase"
    dans celui du "Num_Empl".

    Les salaires non plus ne sont pas insérés dans le champ "Salaire_B" de la table "PrgSalaires".
    Voir capture d'écran:
    Nom : GestionPersonnelECIND5.PNG
Affichages : 245
Taille : 107,0 Ko

    Il n'y a pas de message d'erreur qui apparaît.
    Cordialement.

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 859
    Points : 14 977
    Points
    14 977
    Par défaut
    'ai effectué le changement tel que suggéré. Mais il ramène le Num_Empl dans le champ "Id_NumSalaireBase" et vis versa "Id_NumSalaireBase"
    dans celui du "Num_Empl".
    il ne te reste plus qu'à remettre de l'ordre dans les colonnes dans l'instruction INSERT, soit les colonnes de la table, soit les valeurs
    Les salaires non plus ne sont pas insérés dans le champ "Salaire_B" de la table "PrgSalaires".
    utilise Debug.Print vsb dans ton code pour vérifier que le montant est bien ramené

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 859
    Points : 14 977
    Points
    14 977
    Par défaut
    l'inversion se situe dans le passage des paramètres:
    Nom : _0.JPG
Affichages : 372
Taille : 74,7 Ko
    par rapport au code appelé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub ProgrammerUnSalaire(xIdta As Long, NumSalBase As Long, xMle As Long, xMois As String)

  8. #8
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 135
    Points : 497
    Points
    497
    Par défaut
    Salut Tee_grandbois !
    Citation Envoyé par tee_grandbois Voir le message
    il ne te reste plus qu'à remettre de l'ordre dans les colonnes dans l'instruction INSERT, soit les colonnes de la table, soit les valeurs
    Sauf votre respect,
    après plusieurs tentatives, je n'arrive pas à réaliser ce que vous me suggérez.

    Pourriez vous l'appliquer à la dernière pièce jointe envoyée.

    J'ai beaucoup de difficultés avec le Insert Into.

    utilise Debug.Print vsb dans ton code pour vérifier que le montant est bien ramené
    A partir de quel ligne du code dois je utiliser Debug.Print vsb ?

    Le code suivant provoque un message d'erreur (voir capture d'écran).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VraiFaux(EstNull([ID_Num_SB];[IdentifEtablisEmployeur];[NumMle_emp]);0;SalaireBaseEmployé([ID_Num_SB];[IdentifEtablisEmployeur];[NumMle_emp]))
    Nom : GestionPersonnelECIND6.PNG
Affichages : 225
Taille : 51,7 Ko

    Cordialement.

  9. #9
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 135
    Points : 497
    Points
    497
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    l'inversion se situe dans le passage des paramètres:
    Nom : _0.JPG
Affichages : 372
Taille : 74,7 Ko
    par rapport au code appelé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub ProgrammerUnSalaire(xIdta As Long, NumSalBase As Long, xMle As Long, xMois As String)
    Merci Tee_grandbois !
    Je viens de recevoir ce post. Et ai corrigé mon erreur. Merci infiniment;
    Ça marche !

    Le temps de faire des essais.

    A+
    Cordialement.

  10. #10
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 135
    Points : 497
    Points
    497
    Par défaut Toujours dans l'ordre de la même discussion "ramener le dernier salaire programmé"
    Bonjour membres du forum !

    Je souhaite appeler depuis la table "SalairesEmploye" le dernier salaire programmé d'un employé avec le code suivant:
    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
     
    'Fonction ramenant le dernier salaire programmé
    'd'un employé.
    Public Function DernierSalaireProgrammeEmploye(NumSalBase As Long, idet As Long, no As Long) As Double
    Dim bd As Database
    Dim R As Recordset
    Dim sql As String
    Set bd = CurrentDb
    sql = "select * from SalairesEmploye  where Num_SB = " & NumSalBase & _
    " and Ident_Employeur = " & idet & _
    " and Num_Emp = " & no & " order by Date_Maj DESC;"
    Set R = bd.OpenRecordset(sql)
    With R
        If Not .EOF Then
        DernierSalaireProgrammeEmploye = R.Fields("Salaire_base")
        End If
    End With
    End Function
    mais il me renvoie le premier.

    Voici les captures de la table "SalairesEmploye":

    Nom : GestionPersonnelECIND7.PNG
Affichages : 218
Taille : 41,6 Ko
    Nom : GestionPersonnelECIND8.PNG
Affichages : 202
Taille : 9,6 Ko

    Cordialement.

  11. #11
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 859
    Points : 14 977
    Points
    14 977
    Par défaut
    bonjour,
    je tiens à te faire remarquer que ce message n'a rien à voir avec le problème précédent, il faudrait donc éviter les PAPM (*)..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VraiFaux(EstNull([ID_Num_SB];[IdentifEtablisEmployeur];[NumMle_emp]);0;SalaireBaseEmployé([ID_Num_SB];[IdentifEtablisEmployeur];[NumMle_emp]))
    le VraiFaux() utilise 3 paramètres : Vraifaux( condition ;expression si vrai ;expression si faux) le Estnull() n'a qu'un paramètre: EstNull(expression), donc on ne devrait pas trouver de séparateur: EstNull([ID_Num_SB];[IdentifEtablisEmployeur];[NumMle_emp])
    pour tester si les 3 champs sont nuls c'est cette méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VraiFaux(EstNull([ID_Num_SB]) and EstNull([IdentifEtablisEmployeur]) and EstNull([NumMle_emp]);...
    ou éventuellement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VraiFaux(EstNull([ID_Num_SB]&[IdentifEtablisEmployeur]&[NumMle_emp]);...
    par contre, si au moins une expression n'est pas nulle, cela risque de ne pas fonctionner correctement ...

    (*) PAPM: post à problèmes multiples ...

  12. #12
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 859
    Points : 14 977
    Points
    14 977
    Par défaut
    Je souhaite appeler depuis la table "SalairesEmploye" le dernier salaire programmé d'un employé
    mais il me renvoie le premier.

    Voici les captures de la table "SalairesEmploye":
    et à quoi correspond la sélection sur l'identifiant Num_SB (clé unique) si tu veux obtenir le dernier ?

  13. #13
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    (*) PAPM: post à problèmes multiples ...
    Salut,
    Je ne connaissais pas cette expression, comme quoi cela a du bon de venir sur DEV.
    Sinon, nous devrions conseiller un peu de lecture à nos ouailles
    La bible ici 1395 pages de lecture ou bien que 154 pages une belle petite synthèse.
    Et j'espère que nos ouailles aime lire Shakespeare

  14. #14
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 859
    Points : 14 977
    Points
    14 977
    Par défaut
    salut hyperion13,
    Je ne connaissais pas cette expression, comme quoi cela a du bon de venir sur DEV.
    avec tout ce que l'on trouve dans ce forum, il faut bien créer de nouvelles normes ...

  15. #15
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 135
    Points : 497
    Points
    497
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    bonjour,
    je tiens à te faire remarquer que ce message n'a rien à voir avec le problème précédent, il faudrait donc éviter les PAPM (*)..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VraiFaux(EstNull([ID_Num_SB];[IdentifEtablisEmployeur];[NumMle_emp]);0;SalaireBaseEmployé([ID_Num_SB];[IdentifEtablisEmployeur];[NumMle_emp]))
    le VraiFaux() utilise 3 paramètres : Vraifaux( condition ;expression si vrai ;expression si faux)le Estnull() n'a qu'un paramètre: EstNull(expression), donc on ne devrait pas trouver de séparateur: EstNull([ID_Num_SB];[IdentifEtablisEmployeur];[NumMle_emp])pour tester si les 3 champs sont nuls c'est cette méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VraiFaux(EstNull([ID_Num_SB]) and EstNull([IdentifEtablisEmployeur]) and EstNull([NumMle_emp]);...
    ou éventuellement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VraiFaux(EstNull([ID_Num_SB]&[IdentifEtablisEmployeur]&[NumMle_emp]);...
    par contre, si au moins une expression n'est pas nulle, cela risque de ne pas fonctionner correctement ...

    (*) PAPM: post à problèmes multiples ...
    Bonsoir Tee_grandbois,
    bonsoir hyperion13,
    bonsoir membres du forum !

    Je voudrais éviter d'ouvrir plusieurs posts ou post doublons concernant mon application.
    Désolé d'avoir été hors sujet. Je m'arrangerais prochainement à éviter le PAPM: post à problèmes multiples ....
    Suis vraiment heureux et reconnaissant du progrès que vos enseignements me confèrent.
    Leçon comprise. Votre code marche. Je vous en remercie infiniment.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VraiFaux(EstNull([ID_Num_SB]&[IdentifEtablisEmployeur]&[NumMle_emp]);0;SalaireBaseEmployé([ID_Num_SB];[IdentifEtablisEmployeur];[NumMle_emp]))
    Cordialement.

  16. #16
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 135
    Points : 497
    Points
    497
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    et à quoi correspond la sélection sur l'identifiant Num_SB (clé unique) si tu veux obtenir le dernier ?
    Nom : GestionPersonnelECIND8.PNG
Affichages : 195
Taille : 9,6 Ko

    Dans cette table "SalairesEmploye", le Num_SB est le numéro automatique d'enregistrement.
    Cette table est conçue pour enregistrer les salaires de chaque employer au fur et à mesure d'augmentation sur ces salaires.
    Donc en générant les salaires d'un mois, l'application doit charger le dernier salaire programmé dans la table "SalairesEmploye" pour chacun des employés.
    Voila le pourquoi de ce code
    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
    Function SalaireBaseEmployé(NumSalBase As Long, idet As Long, no As Long) As Double
    On Error GoTo Rama
    Dim db As Database
    Dim rst As Recordset
    Dim sql As String
        Set db = CurrentDb
        sql = "select * from SalairesEmploye where Num_SB = " & NumSalBase & " and Ident_Employeur = " & idet & " and Num_Emp = " & no & " order by Date_Maj DESC;"
        Set rst = db.OpenRecordset(sql)
            If Not rst.EOF Then
                rst.MoveFirst
                SalaireBaseEmployé = rst.Fields("Salaire_base")
            Else
                SalaireBaseEmployé = 0
            End If
    Exit Function
    Rama:
        MsgBox "Erreur n° " & err.Number & vbCrLf & err.description, vbCritical + vbOKOnly, "Une erreur est survenue"
    End Function
    ou

    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
     
    'Fonction ramenant le dernier salaire programmé
    'd'un employé.
    Public Function DernierSalaireProgrammeEmploye(NumSalBase As Long, idet As Long, no As Long) As Double
    Dim bd As Database
    Dim R As Recordset
    Dim sql As String
    Set bd = CurrentDb
    sql = "select * from SalairesEmploye  where Num_SB = " & NumSalBase & _
    " and Ident_Employeur = " & idet & _
    " and Num_Emp = " & no & " order by Date_Maj DESC;"
    Set R = bd.OpenRecordset(sql)
    With R
        If Not .EOF Then
        DernierSalaireProgrammeEmploye = R.Fields("Salaire_base")
        End If
    End With
    End Function
    Cordialement.

  17. #17
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 859
    Points : 14 977
    Points
    14 977
    Par défaut
    Dans cette table "SalairesEmploye", le Num_SB est le numéro automatique d'enregistrement.
    dans ton exemple, il te renverra le premier salaire si Num_SB est valorisé à 1, il faudrait que tu aies 2 pour obtenir le dernier.
    Donc vérifie comment tu récupères le paramètre NumSalBase dans ta fonction DernierSalaireProgrammeEmploye()

  18. #18
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 135
    Points : 497
    Points
    497
    Par défaut
    Bonsoir Tee_grandbois !

    Je viens d'y ajouter ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     If Not .EOF Then
        R.MoveLast
        DernierSalaireProgrammeEmploye = R.Fields("Salaire_base")
    Else
        DernierSalaireProgrammeEmploye = 0
    à la fonction

    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
     
    'Fonction ramenant le dernier salaire programmé
    'd'un employé.
    Public Function DernierSalaireProgrammeEmploye(NumSalBase As Long, idet As Long, no As Long) As Double
    Dim bd As Database
    Dim R As Recordset
    Dim sql As String
    Set bd = CurrentDb
    sql = "select * from SalairesEmploye  where Num_SB = " & NumSalBase & _
    " and Ident_Employeur = " & idet & _
    " and Num_Emp = " & no & " order by Date_Maj DESC;"
    Set R = bd.OpenRecordset(sql)
    With R
        If Not .EOF Then
        R.MoveLast
        DernierSalaireProgrammeEmploye = R.Fields("Salaire_base")
    Else
        DernierSalaireProgrammeEmploye = 0
        End If
    End With
    End Function
    Mais sans suite favorable.
    Cordialement.

  19. #19
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 859
    Points : 14 977
    Points
    14 977
    Par défaut
    rajouter ce bout de code (qui d'ailleurs ne sert absolument à rien, car 0 c'est la valeur par défaut pour le type Double), cela ne correspond pas à ce que je te conseillais, c'est à dire vérifier où et comment tu détermines la valeur de NumSalBase ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function DernierSalaireProgrammeEmploye(NumSalBase As Long, idet As Long, no As Long) As Double
    car actuellement ton code sélectionne l'enregistrement avec un NumSalBase passé en paramètre, si ce n'est pas le bon, cela ne sert pas à grand chose de faire un MoveLast puisqu'il n'y a qu'un seul enregistrement sélectionné avec cette clé unique.
    Ce n'est pas grave, on va faire autrement, si c'est le dernier salaire que tu recherches, il faut chercher uniquement avec ident_Employeur, Num_Emp et la valeur maxi de num_SB (ou éventuellement avec Date_Maj), essaie comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Function DernierSalaireProgrammeEmploye(NumSalBase As Long, idet As Long, no As Long) As Double
    Dim bd As Database
    Dim R As Recordset
    Dim sql As String
    Set bd = CurrentDb
     
    sql = "SELECT SE.Salaire_base FROM SalairesEmploye AS SE WHERE SE.Ident_Employeur = " & idet & " AND SE.Num_Emp = " & no & _
    " AND SE.Num_SB = (select max(Num_SB) from [SalairesEmploye] where Ident_Employeur = SE.Ident_Employeur and Num_emp = SE.Num_emp);"
    Set R = bd.OpenRecordset(sql)
    If Not R.EOF Then DernierSalaireProgrammeEmploye = R.Fields("Salaire_base")
     
    End Function
    normalement, si l'enregistrement existe pour un employé et un établissement, il devrait trouver un seul enregistrement et ce sera celui qui aura la clé (ou la date) la plus récente

  20. #20
    Membre confirmé Avatar de morobaboumar
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2009
    Messages
    1 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 135
    Points : 497
    Points
    497
    Par défaut Remerciement
    Merci infiniment Tee_grangbois,
    merci hyperion13,
    merci à toute la famille developpez.net.





    Cordialement.

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

Discussions similaires

  1. Insertion valeur non de valeur NULL dans 'INSERT INTO'
    Par jacopasto dans le forum Développement
    Réponses: 4
    Dernier message: 26/11/2008, 00h09
  2. Date/heure dans INSERT INTO
    Par Skangell dans le forum IHM
    Réponses: 10
    Dernier message: 25/06/2008, 14h41
  3. Erreur de syntaxe dans INSERT INTO VALUES
    Par Mariboo dans le forum Access
    Réponses: 4
    Dernier message: 25/05/2006, 19h57
  4. Syntaxe d'une variable boolean dans INSERT INTO en SQL
    Par frevale dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 13/05/2006, 20h26
  5. ajouter des dates délémitées dans INSERT INTO ?
    Par samlepiratepaddy dans le forum Access
    Réponses: 8
    Dernier message: 27/09/2005, 09h12

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