Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

COPIE D'UNE BASE SQL SERVEUR 2005

5 réponses
Avatar
Paulin BANTO
Bonjour à Tous

Il ya quelques semaines je cherchais comment faire la copie d'une base de
données SQL Serveur. En réponse FRED BROUARD m'a donné une des instructions
et j'ai pu mettre au point la procédure stockée suivante :

PROCEDURE [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE]
(
@DBSCR Varchar(800),
@DBDEST Varchar(800),
@ERREUR Int OUTPUT
)
AS
Begin
Declare @SQL Varchar(8000)
Declare @SQLBCKP Varchar(8000)
Declare @DBDOS Varchar(8000)
Declare @FBCKP Varchar(8000)
Declare FInit Cursor For
Select Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('\', Reverse(FileName), 1))),'') AS DBDOS,
Substring( Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('\', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('\', Reverse(FileName),
1))),1, LEN(Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('\', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('\', Reverse(FileName),
1)))) -4) + '.BAK' AS FBCKP
From master..sysaltfiles Where Name=@DBSCR AND Fileid=1
Set @ERREUR=1
Open FInit
Fetch Next From FInit Into @DBDOS, @FBCKP
If @@Fetch_Status=0
Begin
Set @SQL = 'Restore Database ' + @DBDEST + ' From Disk = ''' + @FBCKP + '''
With Replace, File = 1,'
Select @SQL = @SQL + ' Move ''' + Rtrim(Name) + ''' To ''' + '' +
@DBDOS+@DBDEST + '' + Substring(fileName, LEN(fileName) - 3, 4) + ''','
From master..sysaltfiles Where dbid=(SELECT dbid From SysDatabases Where
Name=@DBSCR);
Set @SQL = Substring(@SQL, 1, LEN(@SQL) -1);
Set @SQLBCKP ='Backup Database ' + @DBSCR + ' TO Disk =''' + @FBCKP + '''
With Init, Format;'
Execute (@SQLBCKP);
If @@Error=0
Begin
Execute (@SQL)
Set @ERREUR=@@Error
Set @SQL = 'master.dbo.xp_cmdshell ''Del '+ @FBCKP +''', NO_OUTPUT '
Execute (@SQL)
End
End
Close FInit
Deallocate FInit
End

Cette procédure reçoit @DBSRC (Nom de base de donnée source) et @DBDEST
(Nom de base de données destination). Elle permet de copier une base B1 en
une base B2 avec les fichiers ldf et mdf de B2 sont dans le même dossier que
les fichier ldf et mdf de B1 puis elle retourne @Erreur pour indiquer une
erreur s'il y en a.
Quand j'execute cette procédure dans Management Studio avec

DELCARE @ERR,
Execute [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE] 'B1','B2', @ERREUR =
@ERR OUTPUT
Select @ERR

Tout ce passe tres bien comme je veux et j'ai en retour 0.
Jusque là pas de soucis....

Par contre quand j'appelle la procedure de mon application VBA par le code
distant suivant :

DBSRC="B1"
DBDEST="B1"

Cmd.CommandType = adCmdStoredProc
Cmd.CommandType = "Master.dbo.SAUVEGARDE_DATABASE_ACTIVE"
Set oParam = Cmd.CreateParameter("DBSCR", adChar, adParamInput,
8000, DBSRC)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("DBDEST", adChar, adParamInput,
8000, DBDEST)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("ERREUR", adInteger,
adParamOutput, , 0)
Call Cmd.Parameters.Append(oParam)
Cmd.Execute
Erreur = Cmd.Parameters.Item("ERREUR").Value


J'ai en retour il commence à me faire un backup puis arrête et me ramène le
code Erreur 3013.(Serveur: Msg 3013, Niveau 16, État 1, Ligne 1
BACKUP DATABASE se termine de façon anormale).

Mon utilisateur a les pleins droits sur la base y compris en Backup
J'ai cherché pendant des heures mais je ne trouve rien qui m'explique que ca
marche dans studio management et que non dans mon code.

Si quelqu'un a une idée j'aimerais qu'il me donne des conseils pour que je
ne m'arrache plus les cheveux (Déjà qu'il n'y en pas beaucoup ....)

Merci par avance.

5 réponses

Avatar
Med Bouchenafa
Regarde dans le log SQL Server ou encore Windows s'il n'y a pas un message
plus parlant
D'autre part, appeler ce genre de code depuis VBA n'est pas ce que je
recommendeerais
Tu aurais du utiliser SQLDMO, c'est fait exactement pour ce genre de besoins


Bien cordialement
Med bouchenafa

"Paulin BANTO" wrote in message
news:
Bonjour à Tous

Il ya quelques semaines je cherchais comment faire la copie d'une base de
données SQL Serveur. En réponse FRED BROUARD m'a donné une des
instructions et j'ai pu mettre au point la procédure stockée suivante :

PROCEDURE [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE]
(
@DBSCR Varchar(800),
@DBDEST Varchar(800),
@ERREUR Int OUTPUT
)
AS
Begin
Declare @SQL Varchar(8000)
Declare @SQLBCKP Varchar(8000)
Declare @DBDOS Varchar(8000)
Declare @FBCKP Varchar(8000)
Declare FInit Cursor For
Select Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') AS DBDOS,
Substring( Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('', Reverse(FileName),
1))),1, LEN(Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('', Reverse(FileName),
1)))) -4) + '.BAK' AS FBCKP
From master..sysaltfiles Where Name=@DBSCR AND Fileid=1
Set @ERREUR=1
Open FInit
Fetch Next From FInit Into @DBDOS, @FBCKP
If @@Fetch_Status=0
Begin
Set @SQL = 'Restore Database ' + @DBDEST + ' From Disk = ''' + @FBCKP +
''' With Replace, File = 1,'
Select @SQL = @SQL + ' Move ''' + Rtrim(Name) + ''' To ''' + '' +
@DBDOS+@DBDEST + '' + Substring(fileName, LEN(fileName) - 3, 4) + ''','
From master..sysaltfiles Where dbid=(SELECT dbid From SysDatabases Where
Name=@DBSCR);
Set @SQL = Substring(@SQL, 1, LEN(@SQL) -1);
Set @SQLBCKP ='Backup Database ' + @DBSCR + ' TO Disk =''' + @FBCKP + '''
With Init, Format;'
Execute (@SQLBCKP);
If @@Error=0
Begin
Execute (@SQL)
Set @ERREUR=@@Error
Set @SQL = 'master.dbo.xp_cmdshell ''Del '+ @FBCKP +''', NO_OUTPUT '
Execute (@SQL)
End
End
Close FInit
Deallocate FInit
End

Cette procédure reçoit @DBSRC (Nom de base de donnée source) et @DBDEST
(Nom de base de données destination). Elle permet de copier une base B1 en
une base B2 avec les fichiers ldf et mdf de B2 sont dans le même dossier
que les fichier ldf et mdf de B1 puis elle retourne @Erreur pour indiquer
une erreur s'il y en a.
Quand j'execute cette procédure dans Management Studio avec

DELCARE @ERR,
Execute [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE] 'B1','B2', @ERREUR =
@ERR OUTPUT
Select @ERR

Tout ce passe tres bien comme je veux et j'ai en retour 0.
Jusque là pas de soucis....

Par contre quand j'appelle la procedure de mon application VBA par le code
distant suivant :

DBSRC="B1"
DBDEST="B1"

Cmd.CommandType = adCmdStoredProc
Cmd.CommandType = "Master.dbo.SAUVEGARDE_DATABASE_ACTIVE"
Set oParam = Cmd.CreateParameter("DBSCR", adChar, adParamInput,
8000, DBSRC)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("DBDEST", adChar,
adParamInput, 8000, DBDEST)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("ERREUR", adInteger,
adParamOutput, , 0)
Call Cmd.Parameters.Append(oParam)
Cmd.Execute
Erreur = Cmd.Parameters.Item("ERREUR").Value


J'ai en retour il commence à me faire un backup puis arrête et me ramène
le code Erreur 3013.(Serveur: Msg 3013, Niveau 16, État 1, Ligne 1
BACKUP DATABASE se termine de façon anormale).

Mon utilisateur a les pleins droits sur la base y compris en Backup
J'ai cherché pendant des heures mais je ne trouve rien qui m'explique que
ca marche dans studio management et que non dans mon code.

Si quelqu'un a une idée j'aimerais qu'il me donne des conseils pour que je
ne m'arrache plus les cheveux (Déjà qu'il n'y en pas beaucoup ....)

Merci par avance.








Avatar
Paulin BANTO
Bonjour


En effet j'ai été dans le log de SQL serveur et j'ai les détails suivants

1) 12/20/2008 21:34:55,,Unknown,Database backed up. Database: COMPTA<c/>
creation date(time): 2008/10/14(16:50:10)<c/> pages dumped: 112530<c/> first
LSN: 182:4138:37<c/> last LSN: 182:4154:1<c/> number of dump devices: 1<c/>
device information: (FILE=1<c/> TYPE=DISK:
{'D:DATASSQLDATASCOMPTA.BAK'}). This is an informational message only. No
user action is required.,

2) Pour ce qui est de SQLDMO J'avais en effet fait des recherches et j'avais
mis au point une procedure dans VBA qui appelle
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

oSQLServer.LoginSecure = True
oSQLServer.Connect strServer
Set dbSrc = objSQLServerDMO.Databases(strSourceDB)
oSQLServer.Databases.Add oDB
oSQLServer.Databases(strSourceDB).ScriptTransfer oTransSpec

'============================================================="
oSQLServer.Databases(strSourceDB).Transfer oTransSpec
"============================================================="

oSQLServer.Disconnect

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 plusieurs
semaines la
dessus.


3) Pour finir dans ma routine de clôture d'exercice ou de période
commerciale je dois faire une sauvegarde des bases active. Un traitement
doit être effectué afin d'avoir les mouvements de l'exercice N-1 ou de la
période N-1 En ligne pour une consultation.

Je vous serai infiniment reconnaissant si vous pouviez me donner un coup de
main.

Merci par avance


"Med Bouchenafa" a écrit dans le message de groupe
de discussion : #
Regarde dans le log SQL Server ou encore Windows s'il n'y a pas un message
plus parlant
D'autre part, appeler ce genre de code depuis VBA n'est pas ce que je
recommendeerais
Tu aurais du utiliser SQLDMO, c'est fait exactement pour ce genre de
besoins


Bien cordialement
Med bouchenafa

"Paulin BANTO" wrote in message
news:
Bonjour à Tous

Il ya quelques semaines je cherchais comment faire la copie d'une base de
données SQL Serveur. En réponse FRED BROUARD m'a donné une des
instructions et j'ai pu mettre au point la procédure stockée suivante :

PROCEDURE [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE]
(
@DBSCR Varchar(800),
@DBDEST Varchar(800),
@ERREUR Int OUTPUT
)
AS
Begin
Declare @SQL Varchar(8000)
Declare @SQLBCKP Varchar(8000)
Declare @DBDOS Varchar(8000)
Declare @FBCKP Varchar(8000)
Declare FInit Cursor For
Select Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') AS DBDOS,
Substring( Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('', Reverse(FileName),
1))),1, LEN(Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('', Reverse(FileName),
1)))) -4) + '.BAK' AS FBCKP
From master..sysaltfiles Where Name=@DBSCR AND Fileid=1
Set @ERREUR=1
Open FInit
Fetch Next From FInit Into @DBDOS, @FBCKP
If @@Fetch_Status=0
Begin
Set @SQL = 'Restore Database ' + @DBDEST + ' From Disk = ''' + @FBCKP +
''' With Replace, File = 1,'
Select @SQL = @SQL + ' Move ''' + Rtrim(Name) + ''' To ''' + '' +
@DBDOS+@DBDEST + '' + Substring(fileName, LEN(fileName) - 3, 4) + ''','
From master..sysaltfiles Where dbid=(SELECT dbid From SysDatabases Where
Name=@DBSCR);
Set @SQL = Substring(@SQL, 1, LEN(@SQL) -1);
Set @SQLBCKP ='Backup Database ' + @DBSCR + ' TO Disk =''' + @FBCKP +
''' With Init, Format;'
Execute (@SQLBCKP);
If @@Error=0
Begin
Execute (@SQL)
Set @ERREUR=@@Error
Set @SQL = 'master.dbo.xp_cmdshell ''Del '+ @FBCKP +''', NO_OUTPUT '
Execute (@SQL)
End
End
Close FInit
Deallocate FInit
End

Cette procédure reçoit @DBSRC (Nom de base de donnée source) et @DBDEST
(Nom de base de données destination). Elle permet de copier une base B1
en une base B2 avec les fichiers ldf et mdf de B2 sont dans le même
dossier que les fichier ldf et mdf de B1 puis elle retourne @Erreur pour
indiquer une erreur s'il y en a.
Quand j'execute cette procédure dans Management Studio avec

DELCARE @ERR,
Execute [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE] 'B1','B2', @ERREUR =
@ERR OUTPUT
Select @ERR

Tout ce passe tres bien comme je veux et j'ai en retour 0.
Jusque là pas de soucis....

Par contre quand j'appelle la procedure de mon application VBA par le
code distant suivant :

DBSRC="B1"
DBDEST="B1"

Cmd.CommandType = adCmdStoredProc
Cmd.CommandType = "Master.dbo.SAUVEGARDE_DATABASE_ACTIVE"
Set oParam = Cmd.CreateParameter("DBSCR", adChar,
adParamInput, 8000, DBSRC)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("DBDEST", adChar,
adParamInput, 8000, DBDEST)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("ERREUR", adInteger,
adParamOutput, , 0)
Call Cmd.Parameters.Append(oParam)
Cmd.Execute
Erreur = Cmd.Parameters.Item("ERREUR").Value


J'ai en retour il commence à me faire un backup puis arrête et me ramène
le code Erreur 3013.(Serveur: Msg 3013, Niveau 16, État 1, Ligne 1
BACKUP DATABASE se termine de façon anormale).

Mon utilisateur a les pleins droits sur la base y compris en Backup
J'ai cherché pendant des heures mais je ne trouve rien qui m'explique que
ca marche dans studio management et que non dans mon code.

Si quelqu'un a une idée j'aimerais qu'il me donne des conseils pour que
je ne m'arrache plus les cheveux (Déjà qu'il n'y en pas beaucoup ....)

Merci par avance.











Avatar
Med Bouchenafa
1) Apparemment, tu arrives bien á faire le backup de ta base COMPTA
C'est tout ce que je peux en conclure á la lecture de ton log

2) Ton script me parait correct
Il doit y avoir un probleme avec la base que tu essaies de transferer
J'essayerai avec une petite base qui ne contient qu'une table et voir si
cela fonctionne

3) Je ne sais pas si j'ai vraiment compris ton probleme
Tu veux archiver les données de l'exercice precedent?
C'est quoi exactement le probleme que tu cherches á resoudre?

Bien cordialement
Med bouchenafa

"Paulin BANTO" wrote in message
news:ewmnB%
Bonjour


En effet j'ai été dans le log de SQL serveur et j'ai les détails suivants

1) 12/20/2008 21:34:55,,Unknown,Database backed up. Database: COMPTA<c/>
creation date(time): 2008/10/14(16:50:10)<c/> pages dumped: 112530<c/>
first LSN: 182:4138:37<c/> last LSN: 182:4154:1<c/> number of dump
devices: 1<c/> device information: (FILE=1<c/> TYPE=DISK:
{'D:DATASSQLDATASCOMPTA.BAK'}). This is an informational message only.
No user action is required.,

2) Pour ce qui est de SQLDMO J'avais en effet fait des recherches et
j'avais mis au point une procedure dans VBA qui appelle
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

oSQLServer.LoginSecure = True
oSQLServer.Connect strServer
Set dbSrc = objSQLServerDMO.Databases(strSourceDB)
oSQLServer.Databases.Add oDB
oSQLServer.Databases(strSourceDB).ScriptTransfer oTransSpec

'============================================================="
oSQLServer.Databases(strSourceDB).Transfer oTransSpec
"============================================================="

oSQLServer.Disconnect

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 plusieurs
semaines la
dessus.


3) Pour finir dans ma routine de clôture d'exercice ou de période
commerciale je dois faire une sauvegarde des bases active. Un traitement
doit être effectué afin d'avoir les mouvements de l'exercice N-1 ou de la
période N-1 En ligne pour une consultation.

Je vous serai infiniment reconnaissant si vous pouviez me donner un coup
de main.

Merci par avance


"Med Bouchenafa" a écrit dans le message de
groupe de discussion : #
Regarde dans le log SQL Server ou encore Windows s'il n'y a pas un
message plus parlant
D'autre part, appeler ce genre de code depuis VBA n'est pas ce que je
recommendeerais
Tu aurais du utiliser SQLDMO, c'est fait exactement pour ce genre de
besoins


Bien cordialement
Med bouchenafa

"Paulin BANTO" wrote in message
news:
Bonjour à Tous

Il ya quelques semaines je cherchais comment faire la copie d'une base
de données SQL Serveur. En réponse FRED BROUARD m'a donné une des
instructions et j'ai pu mettre au point la procédure stockée suivante :

PROCEDURE [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE]
(
@DBSCR Varchar(800),
@DBDEST Varchar(800),
@ERREUR Int OUTPUT
)
AS
Begin
Declare @SQL Varchar(8000)
Declare @SQLBCKP Varchar(8000)
Declare @DBDOS Varchar(8000)
Declare @FBCKP Varchar(8000)
Declare FInit Cursor For
Select Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') AS DBDOS,
Substring( Replace(FileName, Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1))),'') +
Reverse(Substring(Reverse(FileName), 0, CharIndex('',
Reverse(FileName), 1))),1, LEN(Replace(FileName,
Reverse(Substring(Reverse(FileName), 0, CharIndex('',
Reverse(FileName), 1))),'') + Reverse(Substring(Reverse(FileName), 0,
CharIndex('', Reverse(FileName), 1)))) -4) + '.BAK' AS FBCKP
From master..sysaltfiles Where Name=@DBSCR AND Fileid=1
Set @ERREUR=1
Open FInit
Fetch Next From FInit Into @DBDOS, @FBCKP
If @@Fetch_Status=0
Begin
Set @SQL = 'Restore Database ' + @DBDEST + ' From Disk = ''' + @FBCKP +
''' With Replace, File = 1,'
Select @SQL = @SQL + ' Move ''' + Rtrim(Name) + ''' To ''' + '' +
@DBDOS+@DBDEST + '' + Substring(fileName, LEN(fileName) - 3, 4) + ''','
From master..sysaltfiles Where dbid=(SELECT dbid From SysDatabases Where
Name=@DBSCR);
Set @SQL = Substring(@SQL, 1, LEN(@SQL) -1);
Set @SQLBCKP ='Backup Database ' + @DBSCR + ' TO Disk =''' + @FBCKP +
''' With Init, Format;'
Execute (@SQLBCKP);
If @@Error=0
Begin
Execute (@SQL)
Set @ERREUR=@@Error
Set @SQL = 'master.dbo.xp_cmdshell ''Del '+ @FBCKP +''', NO_OUTPUT '
Execute (@SQL)
End
End
Close FInit
Deallocate FInit
End

Cette procédure reçoit @DBSRC (Nom de base de donnée source) et
@DBDEST (Nom de base de données destination). Elle permet de copier une
base B1 en une base B2 avec les fichiers ldf et mdf de B2 sont dans le
même dossier que les fichier ldf et mdf de B1 puis elle retourne @Erreur
pour indiquer une erreur s'il y en a.
Quand j'execute cette procédure dans Management Studio avec

DELCARE @ERR,
Execute [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE] 'B1','B2', @ERREUR =
@ERR OUTPUT
Select @ERR

Tout ce passe tres bien comme je veux et j'ai en retour 0.
Jusque là pas de soucis....

Par contre quand j'appelle la procedure de mon application VBA par le
code distant suivant :

DBSRC="B1"
DBDEST="B1"

Cmd.CommandType = adCmdStoredProc
Cmd.CommandType = "Master.dbo.SAUVEGARDE_DATABASE_ACTIVE"
Set oParam = Cmd.CreateParameter("DBSCR", adChar,
adParamInput, 8000, DBSRC)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("DBDEST", adChar,
adParamInput, 8000, DBDEST)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("ERREUR", adInteger,
adParamOutput, , 0)
Call Cmd.Parameters.Append(oParam)
Cmd.Execute
Erreur = Cmd.Parameters.Item("ERREUR").Value


J'ai en retour il commence à me faire un backup puis arrête et me
ramène le code Erreur 3013.(Serveur: Msg 3013, Niveau 16, État 1, Ligne
1
BACKUP DATABASE se termine de façon anormale).

Mon utilisateur a les pleins droits sur la base y compris en Backup
J'ai cherché pendant des heures mais je ne trouve rien qui m'explique
que ca marche dans studio management et que non dans mon code.

Si quelqu'un a une idée j'aimerais qu'il me donne des conseils pour que
je ne m'arrache plus les cheveux (Déjà qu'il n'y en pas beaucoup ....)

Merci par avance.













Avatar
BIGZYBIG
Bonjour

Je vous explique. J'avais une application comptable sous access avec
une BD access. Vu les limites de access au niverau volume j'ai décidé
de passer sous sql serveur. Résultat j'ai un frontal Access ADP et un
dorsal SQL server 2005.
En fin d'année ou fin d'exercice l'utilisateur clôturer sa période
comptable et passer à l'exercice suivant. Pendant cette clôture les
comptes de classe 6, 7, 8, et 9 sont remis a zéro et il ya mise à jour
des comptes de résultats.
Une fois la clôture faite (donc l'exercice N+1 en ligne) l'utilisateur
doit pouvoir aller dans l'exercice N pour y consulter les mouvements
avant clôture en cas de besoin.
D'ou il me faut lancer une procédure de copie de la base Active COMPTA
en COMPTA_2007 (Pour l'exercice 2007 par exemple)
COMPTA_2007 doit etre en ligne sur le même serveur que COMPTA et ses
fichiers doivent être dans le même dossier que ceux de COMPTA.
Vu que cette routine de clôture comptable doit être par le chef
comptable, elle est lancée à partir d'un poste client.
Pour info tout fonctionne très bien sauf cette routine qui me prends
la tête depuis pas mal de temps.

Si quelqu'un a une idée ou une procédure me permettant d'envoyer
NOM_BASE et NOM_BASE_COPY afin de faire la copie de NOM_BASE je serais
ravi qu'il m'aide.

Merci par avance.
Avatar
BIGZYBIG
Après des heures de debogage je viens de trouver MA CONNERIE


Ma procedure stockée [MAster].[dbo].[SAUVEGARDE_DATABASE_ACTIVE]
reçoit les parametres

@DBSCR Varchar(800),
@DBDEST Varchar(800),
@ERREUR Int OUTPUT

Dans mon appel en VBA je me suis TROMPE comme un debutant

Cmd.CommandType = adCmdStoredProc
Cmd.CommandType = "Master.dbo.SAUVEGARDE_DATABASE_ACTIVE"
Set oParam = Cmd.CreateParameter("DBSCR", adChar,
adParamInput, 8000, DBSRC)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("DBDEST", adChar,
adParamInput, 8000, DBDEST)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("ERREUR", adInteger,
adParamOutput, , 0)
Call Cmd.Parameters.Append(oParam)
Cmd.Execute
Erreur = Cmd.Parameters.Item("ERREUR").Value

IL FALLAIT Ecrire

Cmd.CommandType = adCmdStoredProc
Cmd.CommandType = "Master.dbo.SAUVEGARDE_DATABASE_ACTIVE"
Set oParam = Cmd.CreateParameter("DBSCR", adVarChar,
adParamInput, 800, DBSRC)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("DBDEST", adVarChar,
adParamInput, 800, DBDEST)
Call Cmd.Parameters.Append(oParam)
Set oParam = Cmd.CreateParameter("ERREUR", adInteger,
adParamOutput, , 0)
Call Cmd.Parameters.Append(oParam)
Cmd.Execute
Erreur = Cmd.Parameters.Item("ERREUR").Value

Voilà comment on perd stupidement du temps.....

Tout marche à merveille je vous remercie tous pour votre aide.

Plus particulierement je remercie
Med bouchenafa Et FRED BROUARD