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] Insertion SQL


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Par défaut [VB] Insertion SQL
    Bonjour à tous,


    J'ai un petit problème d'insertion SQL dans mon programme en VB6, voici le 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Private Sub BtnValider_Click()
        Dim Db As Database
        Dim RS, rsEnreg As DAO.Recordset
        Dim nenreg, compteur As String
        Dim num As Integer
        Dim Nom, Reponse As String
        Dim requete As String
        Set Db = OpenDatabase("projet.mdb")
        Set rsEnreg = Db.OpenRecordset("PROJET", dbOpenTable)
     
        If (rsEnreg.RecordCount > 0) Then
            rsEnreg.MoveFirst
            Do Until rsEnreg.EOF
                nenreg = rsEnreg("NumProjet").Value
                rsEnreg.MoveNext
            Loop
            num = CInt(Right(nenreg, 2)) + 1
            If (num < 10) Then
                compteur = Left(nenreg, 1) + "0" + CStr(num)
            Else
                compteur = Left(nenreg, 1) + CStr(num)
            End If
        Else
            compteur = "P01"
        End If
     
        requete = "INSERT INTO PROJET (NumProjet,CodeCategorie,Nom,Lien,Prix,Technologie,Image,Sold,Description) VALUES ('" & compteur & "',1,'" & TxtNom.Text & "','" & TxtLien.Text & "'," & TxtPrix.Text & ",'techno','image','oui','description')"
        Debug.Print requete
        Db.Execute (requete)
     
        rsEnreg.Close
        Set rsEnreg = Nothing
        Set Db = Nothing
     
        Reponse = MsgBox("Votre projet a été ajouté", vbOKOnly, "Succès")
    End Sub
    Ma bdd projet.mdb existe bien, et mes champs sont correct. Le programme ne me donne pas d'erreur, mais lorsque j'ouvre projet.mdb avec access l'enregistrement ne s'y trouve pas.

    Pourquoi l'enregistrement ne s'effectue pas correctement?


    Merci.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Par défaut
    Bonjour,

    Plein de petites choses à revoir à mon sens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'Vu et revu, "nenreg" est ici déclaré en tant que Variant et non string
    Dim nenreg, compteur As String
     
    'La bonne syntaxe :
    Dim nenreg As String, compteur As String
    Ensuite tu ouvres un recordset pour parcourir tous les enregistrements afin d'obtenir la plus grande valeur d'un champ.
    Primo : un accès de type "Table" n'est pas nécessaire si tu n'écris pas à travers le recordset, pour un accès rapide voir plutôt dbOpenForwardOnly
    Secundo : Qui te dit que ton recordset est trié par ordre ascendant du champ "NumProjet" lorsque tu l'ouvres ?
    Tertio : J'utiliserai un champ numérique de type compteur, qu'il soit auto-incrémentiel ou pas pour réaliser ce genre d'indexation
    Quatkekchose : tu trouveras peut-être plus facilement la plus grande valeur d'un champ en passant par une requête SQL (cf. SELECT MAX...) qu'avec ta méthode qui t'oblige à balayer tous les enregistrements !
    Cinqueccento (Fiat) : Par contre, pour la mise à jour de ta table, là tu peux avantageusement utiliser les méthodes du recordset (cf. Addnew) qu'une requête SQL de type INSERT TO qui n'est pas très intuitive et source d'erreur, même si dans l'absolu, il est préférable de faire comme tu le fais.

    Tu as un peu codé à l'envers on dirait

  3. #3
    Membre Expert
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Par défaut
    Essai l'execution pas a pas pour voir ou ca cloche, car ton code a l'air bon.

    Mais essai de remplacer ce bout de code
    Citation Envoyé par Xen3r0 Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            rsEnreg.MoveFirst
            Do Until rsEnreg.EOF
                nenreg = rsEnreg("NumProjet").Value
                rsEnreg.MoveNext
            Loop
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            rsEnreg.last
            nenreg = rsEnreg("NumProjet").Value
    car a la fin dans la variable nenreg tu as toujours la valeur du dernier enregistrement.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Par défaut
    Voici mon code actuel, il ne fonctionne toujours pas :

    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
    Private Sub BtnValider_Click()
        Dim Db As Database
        Dim RS, rsEnreg As DAO.Recordset
        Dim nenreg As String, compteur As String
        Dim num As Integer
        Dim Nom, Reponse As String
        Dim requete As String
        Set Db = OpenDatabase("projet.mdb")
        Set rsEnreg = Db.OpenRecordset("SELECT * FROM PROJET ORDER BY NumProjet ASC", dbOpenForwardOnly)
     
        If (rsEnreg.RecordCount > 0) Then
            rsEnreg.MoveFirst
            Do Until rsEnreg.EOF
                nenreg = rsEnreg("NumProjet").Value
                rsEnreg.MoveNext
            Loop
            num = CInt(Right(nenreg, 2)) + 1
            If (num < 10) Then
                compteur = Left(nenreg, 1) + "0" + CStr(num)
            Else
                compteur = Left(nenreg, 1) + CStr(num)
            End If
        Else
            compteur = "P01"
        End If
     
        requete = "INSERT INTO PROJET (NumProjet,CodeCategorie,Nom,Lien,Prix,Technologie,Image,Sold,Description) VALUES ('" & compteur & "',1,'" & TxtNom.Text & "','" & TxtLien.Text & "'," & TxtPrix.Text & ",'techno','image','oui','description')"
     
        Db.Execute (requete)
     
        rsEnreg.Close
        Set rsEnreg = Nothing
        Set Db = Nothing
     
        Reponse = MsgBox("Votre projet a été ajouté", vbOKOnly, "Succès")
    End Sub
    @sovo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rsEnreg.last
    nenreg = rsEnreg("NumProjet").Value
    Ne fonctionne pas

    Merci encore pour vos réponses.

  5. #5
    Membre Expert
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Par défaut
    Bon essai 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Private Sub BtnValider_Click()
        Dim Db As Database
        Dim RS, rsEnreg As DAO.Recordset
        Dim nenreg, compteur As String
        Dim num As Integer
        Dim Nom, Reponse As String
        Dim requete As String
        Set Db = OpenDatabase("projet.mdb")
        Set rsEnreg = Db.OpenRecordset("PROJET", dbOpenTable)
     
        If (rsEnreg.RecordCount > 0) Then
            rsEnreg.last
            nenreg = rsEnreg("NumProjet").Value
            num = CInt(Right(nenreg, 2)) + 1
            If (num < 10) Then
                compteur = Left(nenreg, 1) + "0" + CStr(num)
            Else
                compteur = Left(nenreg, 1) + CStr(num)
            End If
        Else
            compteur = "P01"
        End If
     
        rsEnreg.addnew
        rsEnreg!NumProjet = compteur 
        rsEnreg!CodeCategorie = 1
        rsEnreg!Nom = TxtNom.Text
        ......
        'Idem pour les autres champs
        ......
        rsEnreg.update
     
        rsEnreg.Close
        Set rsEnreg = Nothing
        Set Db = Nothing
     
        Reponse = MsgBox("Votre projet a été ajouté", vbOKOnly, "Succès")
    End Sub

  6. #6
    Membre expérimenté Avatar de AdHoc
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 245
    Par défaut
    Bonjour,
    1) tu n'as pas d'erreur et pour cause
    Citation Envoyé par MSDN
    Dans un espace de travail Microsoft Jet, si vous fournissez une instruction SQL dont la syntaxe est correcte et si vous disposez des autorisations appropriées, la méthode Execute n'échoue jamais, même si aucune ligne ne peut être modifiée ou supprimée. Utilisez donc toujours l'option dbFailOnError avec la méthode Execute pour exécuter une requête de mise à jour ou de suppression. Cette option engendre une erreur d'exécution et révoque toutes les modifications réussies si l'un des enregistrements concerné est verrouillé et ne peut être mis à jour ou supprimé.
    2) Quand tu execute la requete (recupérée dans la fenetre debug grace à ton Debug.print ou en mettant un espion sur ta variable requete) directement dans la base de données, est ce qu'elle marche ?

Discussions similaires

  1. [MySQL] Problème d'apostrophes dans insertion sql
    Par 12_darte_12 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 30/05/2006, 16h20
  2. [Conception] insertion sql en php, dans une base de donnée ?
    Par artotal dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 24/10/2005, 04h34
  3. Lenteur lors d'une insertion (sql server)
    Par shiners300 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 16/09/2005, 09h09
  4. Réponses: 24
    Dernier message: 31/05/2005, 15h07
  5. Export sous forme d'INSERT SQL
    Par Kraken dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 04/09/2003, 11h40

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