ADO problème d'update (renseigner une table à partir d'une autre)
amerok
Messages postés2Date d'inscriptionlundi 15 novembre 2004StatutMembreDernière intervention16 novembre 2004
-
15 nov. 2004 à 23:22
amerok
Messages postés2Date d'inscriptionlundi 15 novembre 2004StatutMembreDernière intervention16 novembre 2004
-
16 nov. 2004 à 19:38
Après avoir beaucoup cherché (oui, ici aussi ;) ), voici ma question :
Je voudrais pouvoir créer des enregistrements dans ma table finale à partir de ma table originale, pour ce faire j'essaye d'abord de :
1. Pouvoir lire à partir de ma table originale un recordset (c'est bon)
2. Pouvoir écrire dans ma table destination (aïe, c'est ma question)
3. Ecrire dans la table destination les originaux (j'y suis pas encore)
En sachant que ma table finale est vide pour l'instant mais que ses champs existent. Je voudrais déjà pouvoir écrire dedans à l'aide de VB... Mais il me dit qu'il y a un risque de doublons... ma clé primaire est No d'identification et les 2 champs sexe et date de naissance ne peuvent être null: voici mon code :
Option Explicit ' Déclaration obligatoire des variables
'Dim cnnOriginale As New ADODB.Connection
'Dim cmdOriginale As New ADODB.Command
'Dim recOriginale As New ADODB.Recordset ' Ancien jeu d'enregistrements
Dim cnnFinale As New ADODB.Connection
Dim cmdFinale As New ADODB.Command
Dim recFinale As New ADODB.Recordset ' Nouveau jeu d'enregistrements
Dim Test As Integer
Private Sub Form_Load()
Test = 1
' Connexion à la BD originale
'cnnOriginale.Provider = "Microsoft.jet.OLEDB.4.0" ' Fournisseur de la BD
'cnnOriginale.ConnectionString = "D:\ExempleDeTransfert\Originale.mdb" ' Chemin de la BD
'cnnOriginale.Open ' Ouverture de la BD
' Commande SQL à envoyer à la base de données pour récupérer les informations des cas
'cmdOriginale.ActiveConnection = cnnOriginale ' Pour relier la connexion ouverte à la commande
'cmdOriginale.CommandText = "SELECT * FROM tbl_chd_stammdaten" ' Configuration de la commande avec requete SQL
' Curseur sur le recordset des cas d'origine
'recOriginale.CursorLocation = adUseClient ' Initialisation du Curseur Client
'recOriginale.CursorType = adOpenDynamic ' Utilisation d'un Curseur Client Dynamique
'recOriginale.Open cmdOriginale ' Transmission de la commande à la méthode Open
' Connexion à la BD finale
cnnFinale.Provider = "Microsoft.jet.OLEDB.4.0" ' Fournisseur de la BD
cnnFinale.ConnectionString = "D:\ExempleDeTransfert\Finale.mdb" ' Chemin de la BD
cnnFinale.Open ' Ouverture de la BD
recFinale.LockType = adLockOptimistic
' Commande SQL à envoyer à la base de données pour ouvrir un pointeur sur les cas d'arrivée
cmdFinale.ActiveConnection = cnnFinale ' Pour relier la connexion ouverte à la commande
cmdFinale.CommandText = "SELECT * FROM tbl_Cas" ' Configuration de la commande avec avec requete SQL
' Curseur sur le recordset des cas finaux
recFinale.CursorLocation = adUseClient ' Initialisation du Curseur Client
recFinale.CursorType = adOpenDynamic ' Utilisation d'un Curseur Client Dynamique
recFinale.Open cmdFinale ' Transmission de la commande à la méthode Open
End Sub
Private Sub cmdTransfert_Click()
'rec.MoveNext
recFinale.AddNew
recFinale.Fields("No identification") = "1"
recFinale.Fields("Sexe") = "2"
recFinale.Fields("Date de naissance") = "12.10.1980"
Test = Test + 1
recFinale.Update
'Text1.Text = recFinale("Sexe")
End Sub
Private Sub Command1_Click()
'cnnOriginale.CommitTrans
'recOriginale.Close
'cnnOriginale.Close
recFinale.Close
cnnFinale.Close
'Set cnnOriginale = Nothing
'Set recOriginale = Nothing
Set cnnFinale = Nothing
Set recFinale = Nothing
Unload Me
End Sub
A voir également:
ADO problème d'update (renseigner une table à partir d'une autre)
cs_ITALIA
Messages postés2169Date d'inscriptionvendredi 20 avril 2001StatutMembreDernière intervention30 juin 20099 16 nov. 2004 à 09:38
ton code est franchement pas lisible....
poses question par question et vire les commentaires inutiles à ton premier souci....
Peu de monde prendrons la peine de lire ton post vu la longueur...
c'est normal que ca ne fonctionne pas quand tu click la premiere fois sur cmdTransfert ca te crée ton enregistrement ...si tu reclick il y a un risque de doublon sur le No identification..
change se champ en num Auto dans ta base et vire cette ligne de code : recFinale.Fields("No identification") = "1"
amerok
Messages postés2Date d'inscriptionlundi 15 novembre 2004StatutMembreDernière intervention16 novembre 2004 16 nov. 2004 à 19:38
Salut,
je sais qu'il est franchement pas lisible, j'ai voulu utiliser la fonction "code" pour le mettre dans ma question mais ça n'a pas marché...
Et après je ne pouvais plus éditer mon message... mais c'est bon j'ai résolu mon problème.... l'erreur était le chemin d'accès à la base : j'en avais deux exemplaires : D:\Test.mdb et D:\Tests\Test.mdb par exemple et je modifiais la mauvaise... d'où le doublon : je l'avais déjà créé....
Sinon pour ceux qui veulent créer des enregistrements à l'aide de VB et d'ADO pour remplir une table à partir d'une autre, voici comment faire :
' Déclaration des variables
Dim cnnOriginale As New ADODB.Connection
Dim cmdOriginale As New ADODB.Command
Dim recOriginale As New ADODB.Recordset
Private Sub Form_Load()
' Connexion à la base de données
cnnOriginale.Provider = "Microsoft.jet.OLEDB.4.0"
cnnOriginale.ConnectionString = "D:\Path\Originale.mdb"
cnnOriginale.Open
' Commande SQL à envoyer à la base de données
cmdOriginale.ActiveConnection = cnnOriginale
cmdOriginale.CommandText = "SELECT * FROM Ma_Table"
' Curseur sur le recordset
recOriginale.CursorLocation = adUseClient
recOriginale.CursorType = adOpenDynamic
recOriginale.Open cmdOriginale
' On fait la même chose pour la base (vide) qui recevra les données
cnnFinale.Provider = "Microsoft.jet.OLEDB.4.0"
cnnFinale.ConnectionString = "D:\Path\Finale.mdb"
cnnFinale.Open
' Commande SQL à envoyer à la base de données pour ouvrir un pointeur sur les cas d'arrivée
cmdFinale.ActiveConnection = cnnFinale
cmdFinale.CommandText = "SELECT * FROM Table_Destination"
' Curseur sur le recordset de destination
recFinale.CursorLocation = adUseClient
recFinale.CursorType = adOpenDynamic
recFinale.LockType = adLockOptimistic
recFinale.Open cmdFinale
End Sub
Private Sub cmdTransfert_Click()
' Copie champ à champ et enregistrement à enregistrement
While Not recOriginale.EOF
recFinale.AddNew
recFinale.Fields("Monchamp") = recOriginale.Fields("AutreChamp")
recFinale.Fields("MonChamp2") = recOriginale.Fields("AutreChamp2")
' Et ainsi de suite....
recFinale.Update
recOriginale.MoveNext
Wend
End Sub
' A la fermeture ne pas oublier de fermer tout ça
recOriginale.Close
cnnOriginale.Close
Set cnnOriginale = Nothing
Set recOriginale= Nothing
recFinale.Close
cnnFinale.Close
Set cnnFinale = Nothing
Set recFinale = Nothing
Et voilà... si il y a des erreurs ou si ce n'est pas clair n'hésitez pas...