J'utilise le code ci-dessous pour sauvegarder une base de données dans ma base de données SqlExpress locale.L'utilisateur n'a pas l'autorisation de restaurer la base de données
procedure RestoreScoreDb(DBName,OldName,BackName : String);
var
cmd : WideString;
SqlBackupDir : String;
SqlDataDir : String;
begin
Try
ConnectionMaster.Connected := False;
ConnectionMaster.Close;
ConnectionMaster.ConnectionString := 'Provider=SQLNCLI11.1;Integrated Security="";Persist Security Info=False;User ID=SA;Password=Tccc1234;OLE DB Services=-2;Initial Catalog="master";Data Source=\SQLEXPRESS;Initial File Name="";Packet Size=4096;Auto Translate=True;Server SPN=""';
SqlBackupDir := ReadIniStr(IniCfg,'Dir','SqlBackup');
SqlDataDir := ReadIniStr(IniCfg,'Dir','SqlData');
cmd := 'RESTORE DATABASE '+DBName;
cmd := Cmd + ' FROM DISK = N'''+SqlBackupDir+'\'+BackName+'''';
cmd := Cmd + ' WITH FILE = 1';
cmd := cmd + ' , MOVE N'''+OldName+''' TO N'''+SqlDataDir+'\'+DBName+'.mdf''';
cmd := cmd + ' , MOVE N'''+OldName+'_log'' TO N'''+SqlDataDir+'\'+DBName+'.ldf''';
cmd := cmd + ' , NOUNLOAD, REPLACE, STATS = 10';
CmdRestore.CommandText := cmd;
CmdRestore.Connection := ConnectionMaster;
CmdRestore.Execute;
except
on E: Exception do
writeln(LogFile,'RestoreScoreDb = '+E.Message);
end;
end;
La commande restore est
cmd ='RESTORE DATABASE score_import FROM DISK =
N''C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Backup\score_import.bak''
WITH FILE = 1 , MOVE N''score_import'' TO
N''C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\score_import.mdf'' ,
MOVE N''score_import_log'' TO N''C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\score_import.ldf'' ,
NOUNLOAD, REPLACE, STATS = 10'
Quand je copier et coller dans studio de gestion, il restaurer la table sans problème. mais quand je lance ce code j'obtiens une erreur:
User does not have permission to RESTORE database "score_import"
SA a l'autorisation complète. Une idée de ce qui me manque? Delphi XE6, Windows 10 Sql 2012.
Incertain si cela vous aidera, mais changez votre sécurité intégrée = "" à la sécurité intégrée = Faux –
Merci @RachellAmber J'ai juste essayé ceci et ai obtenu "l'erreur générée par opération Vérifiez chaque valeur d'état d'OLE, si disponible. –
Vous pourriez essayer le code que j'ai posté ici: stackoverflow.com/questions/43059879/... et voir si vous obtenez le même problème, Si votre version Delphi n'a pas FireDAC, il devrait être possible de faire similaire avec un TAdoQuery, ou même un TAdoConnection par lui-même, mais il provient de votre q comme vous pouvez déjà utiliser Ado – MartynA