Bonjour!
Je souhaiterai savoir s'il est possible de copier les données d'une table dans une autre table, déjà créée sur une autre base de données.
Merci d'avance pour vos réponses!
Bonjour!
Je souhaiterai savoir s'il est possible de copier les données d'une table dans une autre table, déjà créée sur une autre base de données.
Merci d'avance pour vos réponses!
oui c'est possibleEnvoyé par maddog2032
Select d'un côté et Insert de l'autre
Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles
Salut!
C'est un peu ce que je pensais...
Mais aurais tu un exemple de requête?
Le point que je ne comprend pas vraiment c'est comment faire le lien direct entre une bd et une autre dans la même requête. Est ce que tu peux m'expliquer please?
Justement çà ne peut pas être une m^me requ^teEnvoyé par maddog2032
Je te renvoie aux tutoriaux concernant les bdd
Tu comprends bien que :
sont bien 2 transactions distinctes
- récupérer des valeurs
- insérer des valeurs
le principe est donc sûrement:
Le code dépendra précisement du type de tes bases de données
- Creer une connection1 pour BDD1, creer une commande1 type SELECT, creer un lecteur1
- Ouvrir connection1
- Executer commande1 en attribuant le resultat à lecteur1
- Fermer connection1
- Creer une connection2 pour BDD2, creer une commande2 type INSERT à partir des valeurs de lecteur1
- Ouvrir connection2
- Executer commande2
- Fermer connection2
par exemple pour sqlserver .Net possèdes des classes toutes faites pour les objets cités ci-dessus
http://msdn.microsoft.com/library/fr...asqlclient.asp
neguib
PS: bien sûr j'ai supposé que tu voulais faire celà en code par ton application vb; une autre solution serait de le faire faire par ta BDD1 si elle a accès à BDD2 en créant une procédure stockée capable de réaliser les 2 requêtes mais là tu n'est pas vraiment dans le bon forum
Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles
Déjà, merci pour ton aide !
Je vais tout de suite suivre le lien que tu m'a donné!
Ca me rassure de voir qu j'ai bien fait! Mon prog correspond au schema que tu m'a énoncé.
Les petits truc qui m'ont fait me demandé si j'avançais dans le bon sens sont tout les tests que j'ai mis en place à chaque débug (un peu bricolage j'avoue, mais je fais avec ce que je connais )
Voilà mon code : (si ça te di de jeter un coup d'oeil )
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124 Dim i As Integer = 0 Dim strCnxSrc As String = "Data Source=localhost; Integrated Security=SSPI; Initial Catalog=" & TxtBoxBdSrc.Text Dim strCnxFnl As String = "Data Source=localhost; Integrated Security=SSPI; Initial Catalog=" & TxtBoxBdFnl.Text Dim strRequete As String = "SELECT * FROM " & TxtBoxTblSrc.Text Dim RqtCreatTbl 'As String = "" Dim RqtFillTbl 'As String = "" Dim RqtRmpTbl 'As String = "" Dim tmpRqtRmpTbl 'As String = "" Dim RowNbr As Double = 0 Try Dim CnxSrc As New SqlConnection(strCnxSrc) Dim CmdSrc As New SqlCommand(strRequete, CnxSrc) CnxSrc.Open() Dim RdrSrc As SqlDataReader = CmdSrc.ExecuteReader() Dim schema As Data.DataTable = RdrSrc.GetSchemaTable 'Elaboration de la requête pour créer la table de sauvegarde suivant la structurede la table initiale RqtCreatTbl = "CREATE TABLE " & TxtBoxTblFnl.Text & " (" RqtFillTbl = "INSERT INTO " & TxtBoxTblFnl.Text & " (" For Each myRow As Data.DataRow In schema.Rows For Each myCol As Data.DataColumn In schema.Columns If myCol.ColumnName = "ColumnSize" Then RqtCreatTbl += myRow(0) & " " & RdrSrc.GetDataTypeName(i).ToUpper If RdrSrc.GetDataTypeName(i).ToUpper <> "SMALLINT" And RdrSrc.GetDataTypeName(i).ToUpper <> "TINYINT" And RdrSrc.GetDataTypeName(i).ToUpper <> "DATETIME" And RdrSrc.GetDataTypeName(i).ToUpper <> "NTEXT" And RdrSrc.GetDataTypeName(i).ToUpper <> "IMAGE" And RdrSrc.GetDataTypeName(i).ToUpper <> "INT" And RdrSrc.GetDataTypeName(i).ToUpper <> "MONEY" And RdrSrc.GetDataTypeName(i).ToUpper <> "BIT" And RdrSrc.GetDataTypeName(i).ToUpper <> "UNIQUEIDENTIFIER" Then RqtCreatTbl += "(" & myRow(2) & ")" End If i += 1 RqtCreatTbl += "," End If Next Next RqtCreatTbl = Mid(RqtCreatTbl, 1, Len(RqtCreatTbl) - 1) & ")" Label1.Text = "Creation de " & TxtBoxBdFnl.Text & " / " & TxtBoxTblFnl.Text & " à partir de " & TxtBoxBdSrc.Text & " / " & TxtBoxTblSrc.Text TextBox2.Text = RqtCreatTbl 'Creation de la requête de remplissage de la nouvelle table RqtRmpTbl = "INSERT INTO " & TxtBoxTblFnl.Text & " VALUES (" i = 0 Do While RdrSrc.Read() Do While i < RdrSrc.FieldCount 'Dim testvar = RdrSrc.GetDataTypeName(i).ToUpper If RdrSrc.GetDataTypeName(i).ToUpper <> "MONEY" And RdrSrc.GetDataTypeName(i).ToUpper <> "BIT" Then RqtRmpTbl += "'" & Replace(RdrSrc.Item(i).ToString, "'", "''") & "'," Else If RdrSrc.GetDataTypeName(i).ToUpper = "BIT" Then 'Dim tmpverif As String = RdrSrc.Item(i).ToString If RdrSrc.Item(i).ToString = "0" Or RdrSrc.Item (i).ToString = "NULL" Or RdrSrc.Item(i).ToString = "" Or RdrSrc.Item (i).ToString = "False" Then RqtRmpTbl += "0," Else RqtRmpTbl += "1," End If Else RqtRmpTbl += Replace(Replace(RdrSrc.Item (i).ToString, ",", "."), "'", "''") & "," End If End If i += 1 Loop i = 0 RqtRmpTbl = Mid(RqtRmpTbl, 1, Len(RqtRmpTbl) - 1) & ") *+*+*+* INSERT INTO " & TxtBoxTblFnl.Text & " VALUES (" RowNbr += 1 Loop RdrSrc.Close() CnxSrc.Close() 'Création de la table sur la deuxième base de données Dim CnxFnl As New SqlConnection(strCnxFnl) Dim CmdFnl As New SqlCommand(RqtCreatTbl, CnxFnl) CnxFnl.Open() Dim RdrFnl As SqlDataReader = CmdFnl.ExecuteReader() RdrFnl.Close() TextBox1.Text = RqtRmpTbl 'Remplissage de la nouvelle table Dim Target As String = "*+*+*+*" Do While i < RowNbr tmpRqtRmpTbl = Mid(RqtRmpTbl, 1, InStr(RqtRmpTbl, Target) - 1) RqtRmpTbl = Mid(RqtRmpTbl, InStr(RqtRmpTbl, Target) + 8, RqtRmpTbl.Length) Dim CmdRmp As New SqlCommand(tmpRqtRmpTbl, CnxFnl) Dim RdrRmp As SqlDataReader = CmdRmp.ExecuteReader() RdrRmp.Close() i += 1 Loop i = 0 CnxFnl.Close() MsgBox("La copie de la table s'est bien déroulée.") Catch e As Exception MsgBox("L'erreur suivante a été rencontrée :" & Chr(13) & Chr (13) & e.Message) End Try
j'avoue que j'ai parcouru en diagonal ton code
et tablant sur le fait qur tu sais lire je te fais confiance pour l'implementation si une erreur survient alors tu peux compter sur moi
j'ai juste en passant quelque petite remarques
1. Quand tu declare un string pour une requete je te conseille quelquechose du genre
2. ton try catch j'ai pas bien vu peut également contenir un Finally
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 dim requete as string = string.empty ' plutot que dim requete as string ="" 'sinon ne mets rien c plus simple
3. pourquoi ne pas déclarer toutes tes requêtes au départ comme des constantes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 try catch ex as exceptio finally 'ici fermer tout ce qui a à fermer quelquesoit ce qui se passe If not(MaConnection Is Nothing) Then MaConnection .Close end try
Bon a+ si necessaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Const maRequete1 as string = "SELECT * FROM ? WHERE" ' de façon complète ou partielle quitte à utiliser replace pour la compléter dynamiquement
n'oublie pas de mettre le tag Resolu
Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles
Ok! Merci pour tes conseils! Je vais arranger tout ça et me replonger dans le flou artistique 8)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager