Je développe une application avec un frontal Access ADP et une base SQL
SERVEUR 2005.
Je dois écrire une routine qui effectue une copie de ma base B1 en une base
historique B2 sur le même serveur.
Les fichiers MDF et LOG doivent être dans le même dossier que la base B1 et
la base B2 doit être attaché au même serveur.
J'ai cherché j'ai fini par utiliser le composant SQL DMO dans le code
suivant.
Public Function CopyDB(ByVal strServer, ByVal strSourceDB As String, ByVal
strDestDB As String)
Dim oSQLServer As SQLDMO.SQLServer2
Dim oDB As SQLDMO.Database2
Dim oTransSpec As SQLDMO.Transfer
Dim dbSrc As New SQLDMO.Database
Set oSQLServer = New SQLDMO.SQLServer2
Set oDB = New SQLDMO.Database2
Set oTransSpec = New SQLDMO.Transfer
With oTransSpec
.DestServer = strServer
.DestDatabase = strDestDB
.DestUseTrustedConnection = True
.CopyAllObjects = True
.CopyData = SQLDMOCopyData_Replace
.DropDestObjectsFirst = True
.Script2Type = SQLDMOScript2_AnsiFile
.CopySchema = True
End With
Set oDB = Nothing
Set dbSrc = Nothing
Set oTransSpec = Nothing
Set oSQLServer = Nothing
End Function
Quand exécute cette routine (trouvée sur internet) la base B2 est créé avec
tous les objets (Tables vides, et tous les autre objets). Mais
l'instruction de transfert des données
(oSQLServer.Databases(strSourceDB).Transfer oTransSpec)
et rien ne se passe. Je ne comprends pas et je rame depuis trois semaines la
dessus.
Quelqu'un pourrait il m'aider ? Avez vous déjà rencontré un problème
similaire ?
BACKUP DATABASE B1 TO DISK = 'C:SAUVERGARDES_DB_SQLMaSauvegardeB1.BAK' WITH INIT, FORMAT;
SET @SQL = SUBSTRING(@SQL, 1, LEN(@SQL) -1);
EXEC (@SQL);
Ce script est valable pour 2000 comme 2005. SI vous voulez une version 2005 => 2008 changez la table sysfiles par sa nouvelle version 2005.
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation *********************** http://www.sqlspot.com *************************
Paulin BANTO a écrit :
Bonjour à tous
Je développe une application avec un frontal Access ADP et une base SQL SERVEUR 2005. Je dois écrire une routine qui effectue une copie de ma base B1 en une base historique B2 sur le même serveur. Les fichiers MDF et LOG doivent être dans le même dossier que la base B1 et la base B2 doit être attaché au même serveur. J'ai cherché j'ai fini par utiliser le composant SQL DMO dans le code suivant.
Public Function CopyDB(ByVal strServer, ByVal strSourceDB As String, ByVal strDestDB As String)
Dim oSQLServer As SQLDMO.SQLServer2 Dim oDB As SQLDMO.Database2 Dim oTransSpec As SQLDMO.Transfer Dim dbSrc As New SQLDMO.Database Set oSQLServer = New SQLDMO.SQLServer2 Set oDB = New SQLDMO.Database2
Set oTransSpec = New SQLDMO.Transfer With oTransSpec .DestServer = strServer .DestDatabase = strDestDB .DestUseTrustedConnection = True .CopyAllObjects = True .CopyData = SQLDMOCopyData_Replace .DropDestObjectsFirst = True .Script2Type = SQLDMOScript2_AnsiFile .CopySchema = True End With
Set oDB = Nothing Set dbSrc = Nothing Set oTransSpec = Nothing Set oSQLServer = Nothing
End Function
Quand exécute cette routine (trouvée sur internet) la base B2 est créé avec tous les objets (Tables vides, et tous les autre objets). Mais l'instruction de transfert des données (oSQLServer.Databases(strSourceDB).Transfer oTransSpec) et rien ne se passe. Je ne comprends pas et je rame depuis trois semaines la dessus.
Quelqu'un pourrait il m'aider ? Avez vous déjà rencontré un problème similaire ?
Je vous remercie par avance.
Il serait infiniment plus simple de faire cela en Transact SQL...
Exemple : (votre base s'apelle B1.
DECLARE @SQL VARCHAR(8000);
SET @SQL = 'RESTORE DATABASE B2 '
+ 'FROM DISK = ''C:SAUVERGARDES_DB_SQLMaSauvegardeB1.BAK'' '
+ 'WITH REPLACE, ';
BACKUP DATABASE B1 TO DISK = 'C:SAUVERGARDES_DB_SQLMaSauvegardeB1.BAK'
WITH INIT, FORMAT;
SET @SQL = SUBSTRING(@SQL, 1, LEN(@SQL) -1);
EXEC (@SQL);
Ce script est valable pour 2000 comme 2005. SI vous voulez une version
2005 => 2008 changez la table sysfiles par sa nouvelle version 2005.
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Paulin BANTO a écrit :
Bonjour à tous
Je développe une application avec un frontal Access ADP et une base SQL
SERVEUR 2005.
Je dois écrire une routine qui effectue une copie de ma base B1 en une base
historique B2 sur le même serveur.
Les fichiers MDF et LOG doivent être dans le même dossier que la base B1 et
la base B2 doit être attaché au même serveur.
J'ai cherché j'ai fini par utiliser le composant SQL DMO dans le code
suivant.
Public Function CopyDB(ByVal strServer, ByVal strSourceDB As String, ByVal
strDestDB As String)
Dim oSQLServer As SQLDMO.SQLServer2
Dim oDB As SQLDMO.Database2
Dim oTransSpec As SQLDMO.Transfer
Dim dbSrc As New SQLDMO.Database
Set oSQLServer = New SQLDMO.SQLServer2
Set oDB = New SQLDMO.Database2
Set oTransSpec = New SQLDMO.Transfer
With oTransSpec
.DestServer = strServer
.DestDatabase = strDestDB
.DestUseTrustedConnection = True
.CopyAllObjects = True
.CopyData = SQLDMOCopyData_Replace
.DropDestObjectsFirst = True
.Script2Type = SQLDMOScript2_AnsiFile
.CopySchema = True
End With
Set oDB = Nothing
Set dbSrc = Nothing
Set oTransSpec = Nothing
Set oSQLServer = Nothing
End Function
Quand exécute cette routine (trouvée sur internet) la base B2 est créé avec
tous les objets (Tables vides, et tous les autre objets). Mais
l'instruction de transfert des données
(oSQLServer.Databases(strSourceDB).Transfer oTransSpec)
et rien ne se passe. Je ne comprends pas et je rame depuis trois
semaines la
dessus.
Quelqu'un pourrait il m'aider ? Avez vous déjà rencontré un problème
similaire ?
BACKUP DATABASE B1 TO DISK = 'C:SAUVERGARDES_DB_SQLMaSauvegardeB1.BAK' WITH INIT, FORMAT;
SET @SQL = SUBSTRING(@SQL, 1, LEN(@SQL) -1);
EXEC (@SQL);
Ce script est valable pour 2000 comme 2005. SI vous voulez une version 2005 => 2008 changez la table sysfiles par sa nouvelle version 2005.
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation *********************** http://www.sqlspot.com *************************
Paulin BANTO a écrit :
Bonjour à tous
Je développe une application avec un frontal Access ADP et une base SQL SERVEUR 2005. Je dois écrire une routine qui effectue une copie de ma base B1 en une base historique B2 sur le même serveur. Les fichiers MDF et LOG doivent être dans le même dossier que la base B1 et la base B2 doit être attaché au même serveur. J'ai cherché j'ai fini par utiliser le composant SQL DMO dans le code suivant.
Public Function CopyDB(ByVal strServer, ByVal strSourceDB As String, ByVal strDestDB As String)
Dim oSQLServer As SQLDMO.SQLServer2 Dim oDB As SQLDMO.Database2 Dim oTransSpec As SQLDMO.Transfer Dim dbSrc As New SQLDMO.Database Set oSQLServer = New SQLDMO.SQLServer2 Set oDB = New SQLDMO.Database2
Set oTransSpec = New SQLDMO.Transfer With oTransSpec .DestServer = strServer .DestDatabase = strDestDB .DestUseTrustedConnection = True .CopyAllObjects = True .CopyData = SQLDMOCopyData_Replace .DropDestObjectsFirst = True .Script2Type = SQLDMOScript2_AnsiFile .CopySchema = True End With
Set oDB = Nothing Set dbSrc = Nothing Set oTransSpec = Nothing Set oSQLServer = Nothing
End Function
Quand exécute cette routine (trouvée sur internet) la base B2 est créé avec tous les objets (Tables vides, et tous les autre objets). Mais l'instruction de transfert des données (oSQLServer.Databases(strSourceDB).Transfer oTransSpec) et rien ne se passe. Je ne comprends pas et je rame depuis trois semaines la dessus.
Quelqu'un pourrait il m'aider ? Avez vous déjà rencontré un problème similaire ?