Base ACCESS connection ADO [Résolu]

Messages postés
86
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
14 février 2011
- - Dernière réponse : abderrahimbenaya
Messages postés
2
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
8 avril 2008
- 7 mai 2007 à 00:14
déja bonjour tout le monde et merci pour l'aide que vous m'avez déja apporté et pour celui qui viens ...
je vous explique mon problement...
j'ai créer une base qui contient une table T_Client avec les champs ID,nom,prenom et mail. mo champ id est défini comme numerique et le reste comme texte.
j'arrive à rentrer mes client , les supprimer , les modifier ...J'arrive aussi à détecter le fait qu'on rentre un identifiant déja existant dans la base... et je voudrais pouvoir remplacer la personne qui avait l'id détecter par une nouvelle et incrémenter ceux ki sont en dessous de 1
exemple : nous avons un client id=2,nom =paul.
               si on rentre comme nouveau client id=2,nom jean
   on demande si on vx le remplacer paul par jean. si oui , paul passe en id 3 et jean en 2
j'espere que c'est claire
je débute en Vb ( plus habituer au C-builder-) dc j'ai vraiment besoin d'aide... c'est pour mon stage .
je vous remercie d'avance ....
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
23
3
Merci
 Bonjour à tous,

Je suis nul en ADO et SQL, mais je  propose le code ci-dessous (en vbs).

Ma table avant modif:
<!--[if gte vml 1]><v:shapetype id="_x0000_t75"
coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"
filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:315pt;
height:147pt'>
<v:imagedata src="file:///C:\DOCUME~1\ollivier\LOCALS~1\Temp\msohtml1\01\clip_image001.png"
o:title=""/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->T_Client

, ----
ID

, nom

, prénom

, mail

, ----
1, JEAN, jean (prenom), jean (mail), ----
2, PIERRE, pierre(prenom), pierre(mail), ----
3, PAUL, paul (prenom), paul (mail), ----
4, JACQUES, jacques (prenom), jacques (mail), ----
5, CLAUDE, claude(prenom), claude(mail), ----
6, SOPHIE, sophie (prenom), sophie (mail), ----
7, ISABELLE, isabelle(prenom), isabelle(mail)

Ma table après modif:
T_Client

, ----
ID

, nom

, prénom

, mail

, ----
1, JEAN, jean (prenom), jean (mail), ----
2, PIERRE, pierre(prenom), pierre(mail), ----
3, PAUL, paul (prenom), paul (mail), ----
5, JACQUES, jacques (prenom), jacques (mail), ----
6, CLAUDE, claude(prenom), claude(mail), ----
7, SOPHIE, sophie (prenom), sophie (mail), ----
8, ISABELLE, isabelle(prenom), isabelle(mail), ----
4, JEAN-MARC, jean-marc (prénom), jean-marc (mail)

Option Explicit
'
'Valeurs de Type Curseur
'-----------------------Const adOpenForwardOnly 0, adOpenKeyset 1, adOpenDynamic = 2, adOpenStatic = 3
'
'Valeurs de Type Verrou
'----------------------Const adLockReadOnly 1, adLockPessimistic 2, adLockOptimistic = 3, adLockBatchOptimistic = 4
'
Const Path_Base = "D:\Mes_scripts_VBFrance\Test\the_little_big_man.mdb"
Const MaTable = "T_Client"
'
Dim strID, strNom
strID = 4
strNom = "JEAN-MARC"
'
Call UpdateMDB(strID, strNom)

Sub UpdateMDB(strID, strNom)
Dim Db, Rs, strAccess, reponse, i
Set Db = CreateObject("ADODB.Connection")
strAccess = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Path_Base
Db.Open(StrAccess)

Set Rs = CreateObject("ADODB.Recordset")
Rs.CursorType = adOpenStatic
Rs.LockType = adLockOptimistic
Rs.Open "SELECT * FROM " & MaTable & " ORDER BY ID", strAccess

If Rs.EOF = False Then
   Rs.MoveFirst
   do while not Rs.EOF

      If Rs.Fields("ID") = strID Then
         If Rs.Fields("nom") <> strNom Then
       
            reponse = MsgBox("Voulez-vous attribuer ID=" & strID & " pour nom=" & _
                             strNom & " et incrémenter les ID suivantes ",vbYesNo, _
                             "ID=" & Rs.Fields("ID") & " existe déjà mais nom=" & Rs.Fields("nom"))
     
            If reponse = vbNo Then Exit Do
     
            'MsgBox Rs.RecordCount,,"Nombre de RecordSet"
            For i=strID To Rs.RecordCount
                Rs.Fields.Item("ID").Value = Rs.Fields.Item("ID")+1
                Rs.Update
                Rs.MoveNext    
            Next 
            Rs.AddNew
            Rs.Fields("ID").Value = strID
            Rs.Fields("nom").Value = strNom
            Rs.Fields("prénom").Value = InputBox("Veuillez saisir le prénom de " & strNom) 
            Rs.Fields("mail").Value = InputBox("Veuillez saisir l'adresse mail de " & strNom) 
            Rs.Update
            Exit Do  
         End If
      End If
      Rs.MoveNext
   Loop
End If

Rs.Close
Db.Close
Set Rs = Nothing
Set Db= Nothing
End Sub

 A toi de rajouter le test de vérification sur l'existence dans la table de strNom

jean-marc

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 126 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_JMO
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
0
Merci
Salut, montre le code STP car partir de rien, ca m'enchante pas trop merci.
Commenter la réponse de cs_Nicko11
Messages postés
4824
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
11
0
Merci
Salut the_little_big_man ,

Effectivement, comme le dit Nicko11, il faudrait avoir un peu plus de détail de code, pour avoir une réponses précise de la part des menbres qui regardent le post...
A+
Exploreur

 
Commenter la réponse de cs_Exploreur
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
1
0
Merci
y a qu'a voir, 28 lu, 2 reponses.

Allez Exploreur plus qu'un message pour passer le rodage LOL.
Commenter la réponse de cs_Nicko11
Messages postés
2
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
8 avril 2008
0
Merci
merci
Commenter la réponse de abderrahimbenaya