Forum Clubic

Comment coder en visual basic 2008

Bonjour,

il y a deux ans j’avais créer une application en VB6, il y avait une connection à une base de données ACCESS. (j’utilise ACCESS 2007)

Aujourd’hui, je suis en train de réecrire(recréer) cette application en visual basic 2008 mais j’ai quelques soucis au niveau du chargement d’un formulaire qui permet d’enregistrer des informations sur une personne.
Sous ACCESS ma base s’appelle : TDNF

Voici le code que j’avais créé sous VB6 pour ce formulaire :

'**************************************************************************************
’ FORMULAIRE DE CREATION DE PERSONNE
'**************************************************************************************

’ CHARGEMENT DU FORMULAIRE
'*************************
’ INITIALISE LA VARIABLE GLOBALE CONTENANT LE NOM DU DSN DE LA BASE DE DONNEES
’ ATTENTION: UNIQUEMENT LES VARIABLES GLOBALES VALORISEES PAR CE FORMULAIRE
’ On va chercher dans la table " foyer " de la base le numéro du foyer (foyer.N° foyer)

Private Sub Form_Load()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim RequeteSQL As String

'Connection a la base
Set conn = New ADODB.Connection
 
'Définition de la chaîne de connexion
conn.ConnectionString = "DSN=" & MYDSN & ";UID=;PWD=;"

'Ouverture de la base de données
conn.Open
    
'Ouverture du recordset
Set rs = New ADODB.Recordset
 
' Construction de la requete SQL
RequeteSQL = "SELECT NoFoyer FROM Foyer"
 
'Ouverture du recorset et execution de la requete sql
'valorisation de TbxFoyer avec la valeur lue dans la table
rs.Open RequeteSQL, conn, adOpenForwardOnly
TbxFoyer.Text = rs!NoFoyer
    
'fermeture base
conn.Close

CentrerForm Me

End Sub

’ BOUTON QUITTER
'***************
’ 1) DEMANDE CONFIRMATION
’ SI OUI ALORS DECHARGEMENT DU FORMULAIRE

Private Sub BtnQuitter_Click()
'Arrêt du programme
If MsgBox("Voulez-vous abandonner votre saisie? ", vbOKCancel, “FIN DE SAISIE”) = vbOK Then
Unload Me
End If
End Sub

’ BOUTON VALIDER
'***************
’ 1) CONTROLES DES CHAMPS DE SAISIE OBLIGATOIRE
’ 2) OUVERTURE DE LA CONNEXION A LA BASE DE DONNEES
’ 3) INSERTION D’UN ENREGISTREMENT DANS LA TABLE PERSONNE

Private Sub btnValider_Click()
Dim MYDSN As String
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim RequeteSQL As String
Dim erreur As Boolean
erreur = False
If TBxNomPers.Text = “” Then
MsgBox “Nom personne obligatoire”, vbOKOnly, “Contrôle de saisie”
erreur = True
Else
If TBxPrenomPers.Text = “” Then
MsgBox “Prénom personne obligatoire”, vbOKOnly, “Contrôle de saisie”
erreur = True
Else
If TBxDatenaiss.Text = “” Then
MsgBox “Date naissance obligatoire”, vbOKOnly, “Contrôle de saisie”
erreur = True
Else
If Len(TBxDatenaiss.Text) <> LONGDATE Then
MsgBox “Date sur " & LONGDATE & " positions S.V.P !”, vbOKOnly, “Contrôle de saisie”
erreur = True
Else
If Controledate(TBxDatenaiss.Text) Then
MsgBox "DATE INVALIDE!! ", vbOKOnly, “Contrôle de saisie”
erreur = True
Else
MYDSN = “DNF”
'Connection a la base
Set conn = New ADODB.Connection

                    'Définition de la chaîne de connexion
                    conn.ConnectionString = "DSN=" & MYDSN & ";UID=;PWD=;"
                
                    'Ouverture de la base de données
                    conn.Open
                        
                    'Ouverture du recordset
                    Set rs = New ADODB.Recordset
                    Dim sSexe As String
                    If obSexe(0).Value Then
                        sSexe = "F"
                    Else: sSexe = "M"
                    End If
                    Dim sPos As String
                    If obPosFoy(0).Value Then
                        sPos = "PARENT"
                    Else: sPos = "ENFANT"
                    End If
                    ' Construction de la requete SQL
                    RequeteSQL = "INSERT INTO personne (NomPers,PrenomPers,DateNaissPers,ProfPers,SexePers,NoFoyer,PosFoyer) VALUES (" & _
                      "'" & TBxNomPers.Text & "','" & TBxPrenomPers.Text & "'" & _
                      ",#" & Format(TBxDatenaiss.Text, "dd/mm/yyyy") & "#" & _
                      ",'" & TBxProfActivite.Text & "','" & sSexe & "'" & _
                      ",'" & TbxFoyer.Text & "'" & _
                      ",'" & sPos & "')"
                
                    'Ouverture du recorset et execution de la requete sql
                    rs.Open RequeteSQL, conn
                        
                    RequeteSQL = "SELECT max(N°) as NoPers FROM Personne;"
                    rs.Open RequeteSQL, conn
                    NUMPERS = rs!NoPers
                    
                    'fermeture base
                    conn.Close
                    MsgBox "Enregistrement effectué", vbOKOnly, "Saisie Personne"
                End If
            End If
        End If
    End If
End If
If Not erreur Then
    SaisieDocument.Show vbModal
End If

End Sub


’ CHANGEMENT DE LA DATE DE NAISSANCE
'***********************************
’ 1) CONTROLE DU FORMAT DE LA DATE SI DATE SAISIE (DATE OBLIGATOIRE)

Private Sub TBxDatenaiss_Change()
If Len(TBxDatenaiss.Text) > LONGDATE Then
MsgBox “Date sur " & LONGDATE & " positions S.V.P !”, vbOKOnly, “Contrôle de saisie”
Else
If Controledate(TBxDatenaiss.Text) Then
MsgBox "DATE INVALIDE!! ", vbOKOnly, “Contrôle de saisie”
End If
End If
End Sub

’ VALIDATION DE LA DATE DE NAISSANCE
'***********************************
’ 1) CONTROLE DU FORMAT DE LA DATE SI DATE SAISIE (DATE OBLIGATOIRE)

Private Sub TBxDatenaiss_Validate(Cancel As Boolean)
If Len(TBxDatenaiss.Text) <> LONGDATE Then
MsgBox “Date sur " & LONGDATE & " positions S.V.P !”, vbOKOnly, “Contrôle de saisie”
Else
If Controledate(TBxDatenaiss.Text) Then
MsgBox "DATE INVALIDE!! ", vbOKOnly, “Contrôle de saisie”
End If
End If
End Sub

Private Sub TBxNomPers_Change()
saisiealpha (TBxNomPers.Text)
End Sub

Private Sub TBxPrenomPers_Change()
saisiealpha (TBxPrenomPers.Text)
End Sub

Private Sub TBxProfActivite_Change()
If Not IsNull(TBxProfActivite.Text) Then
saisiealphanum (TBxProfActivite.Text)
End If
End Sub

Et voici maintenant le code que je suis en train de faire sous visual basic:
j’ai mis des smiley la ou Visual basic 2008 me dit qu’il y a un problème

Public Class DNF_saisiepersonne
'On initialise la variable globale contenant le nom du DSN de la base de données
'On va chercher dans la table Foyer de la base le numéro de foyer (foyer.N° foyer)

Private Sub DNF_saisiepersonne_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    CenterToScreen()
    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim RequeteSQL As String

    'Connection à la base 
    conn = New ADODB.Connection

    'Définition de la chaîne de connexion
    Dim MYDSN As String = "DNF"
    conn.ConnectionString = "DSN=" & MYDSN & ";UID=;PWD=;":paf:

    'ouverture de la base de données
    conn.Open()

    'ouverture du recordset
    rs = New ADODB.Recordset

    'construction de la requête SQL
    RequeteSQL = "SELECT NoFoyer FROM Foyer"

    'Ouverture du recordset et execution de la requête sql
    'valorisation de TbxFoyer avec la valeur dans la table
    rs.Open(RequeteSQL, conn, ADODB.CursorTypeEnum.adOpenForwardOnly)
    TBxFoyer.Text = RequeteSQL

    'fermeture de la base
    conn.Close()
End Sub

Private Sub BtnValider_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnValider.Click
    Dim MYSDN As String
    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim RequeteSQL As String

    If TBxNomPers.Text = "" Then
        MsgBox("Le nom de la personne est obligatoire !", vbOKOnly, "Contrôle de saisie")
    Else
        If
            TBxPrenomPers.Text="" Then
            MsgBox("Le prénom de la personne est obligatoire !", vbOKOnly, "Contrôle de saisie")
        Else
            If
                TBxDateNaiss.Text="" then
                MsgBox("La date de naissance est obligatoire !", vbOKOnly, "Contrôle de saisie")
            Else
                MYSDN = "DNF"
                'connection à la base'
                conn = New ADODB.Connection

                'Définition de la chaine de connexion
                conn.ConnectionString = "DSN=" & MYSDN & ";UID=;PWD=;"

                'Ouverture de la base de données
                conn.Open()

                'Ouverture du recordset
                rs = New ADODB.Recordset

                Dim sSexe As String
                If RDBtnSexeFeminin.Checked = True Then
                    sSexe = "F"
                Else
                    sSexe = "M"
                End If
                Dim sPos As String
                If RDBtnFoyerEnfant.Checked = True Then
                    sPos = "ENFANT"
                Else
                    sPos = "ENFANT"
                End If

                'Construction de la requête SQL
                RequeteSQL = "INSERT INTO personne(NomPers,PrenomPers,DateNaissPers,ProfPers,SexePers,NoFoyer,PosFoyer)Values ( "& _
                "'"& TBxNomPers"','"var2"') ":paf:         //j'ai arrêté de coder ici, parce que Môsieur Visual Basic 2008 n'aime pas la strusture de ma requête.


            End If

End Sub

Private Sub BtnFermer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnFermer.Click
    'Si on répond OK au message alors
    If MsgBox("Voulez vous abandonner votre saisie?", vbOKCancel, "FIN DE SAISIE") = vbOK Then
        'On ferme le formulaire de saisie
        Me.Close()
    End If
End Sub

Private Sub TBxNomPers_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBxNomPers.TextChanged

End Sub

Private Sub TBxPrenomPers_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBxPrenomPers.TextChanged

End Sub

Private Sub TBxDateNaiss_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBxDateNaiss.TextChanged

End Sub

Private Sub TBxProfActivite_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TBxProfActivite.TextChanged

End Sub

End Class

Déjà en VB.NET tu n’es plus censé passer par ADODB.Connection et ADODB.Recordset. Tu dois maintenant utiliser les objets se trouvant dans System.Data (en l’occurence pour Access : System.Data.Oledb).

Petit exemple de code :

        
        Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & filename

        Using connection As New OleDb.OleDbConnection(connectionString)

            Dim command As New OleDb.OleDbCommand
            command.Connection = connection
            command.Connection.Open()

            command.CommandText = "SELECT * FROM repertoire"

            Using reader As OleDb.OleDbDataReader = command.ExecuteReader()
                While reader.Read()
                    Console.WriteLine(reader(0))
                End While
            End Using
        End Using

Je te laisse bricoler à partir de là :slight_smile:

Merci beaucoup!!
Aller, c’est parti pour réparer tout ça :kaola: :smiley:

une dernière question,

pour le nom du fichier (en l’occurence la base de données ACCESS dans ce cas) , dois je mettre le chemin ou se trouve mon fichier ou dois je simplement mettre le nom de mon fichier?
Edité le 31/01/2010 à 17:52

Le chemin complet :slight_smile: