[Delphi] Restore database with SQL

Pagina: 1
Acties:

  • Quitter3
  • Registratie: Januari 2001
  • Laatst online: 13-02 16:30
Ik probeer vanuit een Delphi applicatie een database te restoren in Microsoft SQL Server 7.0
Dat gebeurt met de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  DB_MSSQL := TDataBase.Create(self);
  Q_MSSQL  := TQuery.Create(self);
  // Fill in username + password + odbc for DB connectie
  DB_MSSQL.Params.Add('USER NAME = ' + '''' + s_UsrCode + '''');
  DB_MSSQL.Params.Add('PASSWORD = ' + '''' + s_PassWrd + '''');
  DB_MSSQL.LoginPrompt := FALSE;
  DB_MSSQL.DatabaseName := s_ODBC;
  // Fill odbc + db name for query
  Q_MSSQL.DatabaseName := s_ODBC;
  Q_MSSQL.SQL.Add('RESTORE DATABASE ' + s_DBName);
  Q_MSSQL.SQL.Add('FROM DISK = ' + '''' + s_DBFile + '''');
  Q_MSSQL.SQL.Add('WITH NORECOVERY ,');
  Q_MSSQL.SQL.Add('MOVE ' + '''' + s_LogicDb + '''' + ' TO ''C:\DB_AUTO.mdf'',');
  Q_MSSQL.SQL.Add('MOVE ' + '''' + s_LogicLog + '''' + ' TO ''C:\DB_AUTO.ldf''');
  Q_MSSQL.SQL.Add('GO');
  // Connect and execute CREATE DATABASE, then disconnect
  DB_MSSQL.Connected := TRUE;
  Q_MSSQL.ExecSQL();
  DB_MSSQL.Connected := FALSE;


Probleem is, dat de database wel aanwezig is, maar de status van de database blijft op loading staan (In Enterprise Manager). Ik kan nu niets met de DB, ook niet deleten.
Enige wat ik kan doen is de DB nog een keer restoren, maar nu vanuit Enterprise Manager. Nu is de DB er en kan ik hem weer weggooien.

Na bijna alle tutorials en voorbeelden (ook in andere talen, maar geen Delphi) gezien te hebben kom ik er nog niet uit wat ik fout doe. ;(

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Volgens mij heeft dit vrij weinig met Delphi te maken... Post gewoon es de SQL, die je code uiteindelijk naar de server stuurt. Daar kunnen we over het algemeen veel meer mee.

日本!🎌


  • Quitter3
  • Registratie: Januari 2001
  • Laatst online: 13-02 16:30
code:
1
2
3
4
5
  RESTORE DATABASE TESTDB
  FROM DISK = 'DBBACKUP'
  WITH NORECOVERY
  MOVE 'TESTDB_Logic' TO 'C:\DB_AUTO.mdf',
  MOVE 'TESTDB_Log' TO 'C:\DB_AUTO.ldf'


Dit is de kale SQL.

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

De NORECOVERY parameter gebruik je als je na de restore van de database nog extra log backups of differentials wil restoren. Dat verklaard ook de loading status.
Gebruik WITH RECOVERY of laat deze helemaal weg (RECOVERY is default).

Zie ook de books online voor meer info.

Today's subliminal thought is:


  • Quitter3
  • Registratie: Januari 2001
  • Laatst online: 13-02 16:30
Ik had het norecovery verhaal verkeerd begrepen.
Nu werkt het perfect. Bedankt.