Delphi 2007 - Ako sa na chvíľu odpojiť od databázy?
Ako som tu už cez leto písal, robím jeden databázový program v Delphi 2007. Momentálne by som potreboval urobiť zálohovanie súborov databázy priamo cez tento program. No pri spustenej databáze sa tie súbory nedajú ani len kopírovať. Ako mám program odpojiť od databázy?
Používam databázu Sybase SQL Anywhere 5.5 a v Delphi sa k nej pripájam cez ADO komponenty. Inak, keď nastavím ADOConnection.Connected := false, tak sa môj program síce odpojí od databázy, ale databáza ešte stále beží a jej súbory sa nedajú kopírovať.
Neviete mi poradiť, čo mám urobiť, aby som mohol kopírovať súbory databázy?
Abys mohl zalohovat soubory SQL serveru, musis zastavit SQL server. Odpojeni z programu nestaci.
Kazdy normalni SQL server ma moznost vytvaret zalohu a ta se vytvari prikazem na bezicim serveru, ne kopirovanim jeho souboru.
Díky, teraz aspoň viem, čo mám hľadať. Predtým som hľadal len spôsob ako zastaviť databázu.
Našiel som použitie jednej DLL knižnice, ktorú mám pri databáze a ktorú na zálohovanie využíval aj pôvodný program (predchodca môjho). Ibaže všetky príklady sú v jazyku C, ktorý veľmi neovládam. Neviete mi poradiť ako to použiť v Delphi?
Inak odkaz na ten návod je tu. Nepíše sa tam síce konkrétne o DLL knižnici, ale starý program využíva presne tie funkcie z DLLka.
Tady se pise o portaci do Delphi:
http://groups.google.com/group/sybase.public.sqlany where.general/browse_thread/thread/c89e5b1ec941fb5a
Píšu tam akurát, že si posielali tie zdrojáky mailom. Okrem iného tam písali aj o tom, že to má byť niekde v dokumentácii k Sybase SQL Anywhere 7.x v ASA Reference --> CHAPTER 9. SQL Statements --> BACKUP statement, no tieto časti už v dokumentácii nie sú. Našiel som nejaké príkazy k zálohovaniu Sybase SQL Anywhere 9.0. Zajtra sa pokúsim napísať si na to zálohovanie procedúru (do databázy). Síce je to k databáze, ktorá je o 4 verzie novšia ako je tá moja, ale skúsim to.
No tak už som si toho zistil viac. Na vytvorenie zálohy musím použiť 3 funkcie knižnice dbtl50t.dll, ktorú mám v PC:
Prvou funkciou je DBToolsInit, druhou DBBackup a treťou DBToolsFini. Všetky potrebujú ako vstupný parameter premennú dátového typu Pointer, ktorý som nikdy nepoužil a veľa toho o ňom neviem. Lenže na čo má ten pointer odkazovať, keď to má byť viacero hodnôt rôzneho typu (integer, string, boolean) ?
Ako mám toto urobiť v Delphi?
No, tak už dávnejšie som zistil, že riešenie cez DLL knižnicu je zbytočne komplikované. Zistil som, že databáza sa dá zálohovať aj spustením pomocného programu dbbackup.exe s určitým parametrom. Konkrétne ide o:
Tento príkaz sa mi podarilo spustiť len cez funkciu WinExec. Lenže ja potrebujem počkať, kým tento zálohovací program urobí to čo má a potom vykonať zopár ďalších vecí. Našiel som na to zdrojový kód funkcie, ktorá využíva funkciu CreateProcess, a čaká kým sa proces neukončí. Lenže táto mi spustí program dbbackup.exe len "prázdny" bez parametrov. Takže ako mám spustiť vyššie uvedený príkaz tak, aby pri spustení programu dbbackup.exe bral do úvahy aj vstupné parametre a aby som vedel počkať na jeho ukončenie?