OS: Windows 2000
Système de base de données: MS SQL Server 2000 et Postgres 8.0
Environnament de développement: Visual Basic 6.0
Bonjour, je ne sais pas tropsi je dois poster ma question dans le forum SQL Server ou le forum Postgres.
J'essaye de copier des tables d'une base SQL Server 2000 vers PostgreSQL 8.0 pour Windows.
J'arrive à le faire relativement facilement (pour des tables non liées par des clés étrangères) via le DTS de SQL Server.
Cependant lorsque je sauve l'instruction DTS dans un module Visual Basic,
je remarque que:
1) les instruction de copie des données sont exécutées à partir des objet de la librairie DTS ("DTS.Package", "DTS.CustomTask", "DTS.Column" etc...) et paramétrable de l'intérieur du code Visual Basic.
2) en revanche les instruction pour définir la structure (DDL) des tables de la base Postgres sont des commandes "Create Table" SQL, apparement écrites par un programme extérieur au package DTS :
par exemple:
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 Public Sub Task_Sub1(ByVal goPackage As Object) Dim oTask As DTS.Task Dim oLookup As DTS.Lookup Dim oCustomTask1 As DTS.ExecuteSQLTask2 Set oTask = goPackage.Tasks.New("DTSExecuteSQLTask") oTask.Name = "Create Table MainTable Task" Set oCustomTask1 = oTask.CustomTask oCustomTask1.Name = "Create Table MainTable Task" oCustomTask1.Description = "Create Table MainTable Task" oCustomTask1.SQLStatement = "CREATE TABLE ""MainTable"" (" & vbCrLf oCustomTask1.SQLStatement = oCustomTask1.SQLStatement & """PK"" varchar (50) NULL, " & vbCrLf oCustomTask1.SQLStatement = oCustomTask1.SQLStatement & """Field1"" varchar (50) NULL, " & vbCrLf oCustomTask1.SQLStatement = oCustomTask1.SQLStatement & """Field2Unique"" varchar (50) NULL, " & vbCrLf oCustomTask1.SQLStatement = oCustomTask1.SQLStatement & """Field3"" varchar (50) NULL, " & vbCrLf oCustomTask1.SQLStatement = oCustomTask1.SQLStatement & """Field4IndexedDuplicate"" varchar (50) NULL" & vbCrLf oCustomTask1.SQLStatement = oCustomTask1.SQLStatement & ")" oCustomTask1.ConnectionID = 2 oCustomTask1.CommandTimeout = 0 oCustomTask1.OutputAsRecordset = False goPackage.Tasks.Add oTask Set oCustomTask1 = Nothing Set oTask = Nothing End Sub
Je voudrais savoir comment le DTS s'y prend pour générer cette instruction SQL et pour faire le mapping des types de données de SQL Server vers ceux de Postgres. Cala reste pour moi assez mystérieux. Je sais qu'il existe une librairie COM ADOX qui permet de créer via VB, C++ des tables dans des bases de données SQL, mais le pilote ADO de Postgres ne la supporte pas. Le DTS de Microsoft utlise donc forcément une autre technique, qu'il ne laisse pas de façon transparente dans le module Visual Basic qu'il génère lui-même.
Le but serait de m'inspirer de ce procédé pour recopier, à partir d'une même procédures VB, la structure de la base de donnée source en SQL Server, et ensuipte pouvoir générer dynamiquement les tables de destination pour Postgres.
Quelqu'un parmi vous aurait-il déjà été confronté au type de problème?
Partager