Witam serdecznie mam sobie taki skrypcik do tworzenia bazy danych. Sek w tym ze to RAZ dziala poprawnie a raz nie.
Na poczatku funkcja
OpenKeyReadOnly
nie znajduje klucza. Gdy w konsoli wpisze regedit i klikne sobie w ten klucz to po ponownym uruchomieniu klucz juz jest znajdowany poprawnie niestety w dalszym przejsciu funkcja ShellExecute zwraca liczbe 42 (czyli teorytycznie wykonala sie poprawnie) i backup sie nie tworzy...
Kod ponizej:
procedure TfmUstawienia.btnStworzKopieClick(Sender: TObject);
var
t: Cardinal; // tymczasowa do sprawdzenia wartosci shellexecute
begin
if ZnajdzPgDump then
begin
if SelectDirectory('Wybierz katalog do archiwizacji','\',katalog) then
begin
{ShellExecute(Handle, 'open', 'pg_dump.exe', pchar('-f '+katalog+'\kopia.sql -U postgres nazwadb'),
pchar(sciezka_pgdump), SW_HIDE); //backup w postaci sql tez dziala jak chce}
t := ShellExecute(Handle,
'open', 'pg_dump.exe',
pchar('--host localhost --port 5432 --username xxx --format custom --blobs --oids --file '+katalog+'\nazwadb_'+ DateTimeToStr(Now) + '.backup nazwadb'),
pchar(sciezka_pgdump), SW_HIDE);
Self.Caption := IntToStr(t); // tu sprawdzalem co to zwraca
ShowMessage('Backup wykonany poprawnie');
end;
end
else
begin
ShowMessage('Nie da sie utworzyc backupa');
end;
end;
Funkcja do znajdowania kluczy w rejestrze:
function TfmUstawienia.ZnajdzPgDump(): Boolean;
var reg : TRegistry ;
lista : TStringList ;
i : integer ;
wersja, maxwersja : Double ;
decimal : char ;
begin
Result := true;
maxwersja :=-1;
decimal := DecimalSeparator ;
DecimalSeparator := '.';
reg := TRegistry.Create ;
lista := TStringList.Create ;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
if reg.OpenKeyReadOnly('SOFTWARE\\PostgreSQL\\Installations') = False then
Result := False
else
begin
reg.GetKeyNames(lista);
if lista.Count > 0 then
for i := 0 to lista.Count -1 do
begin
if not reg.OpenKeyReadOnly(lista[i]) then
Result := False
else
if reg.ValueExists('Version') then
begin
wersja := StrToFloatDef(reg.ReadString('Version'),-1) ;
if wersja > maxwersja then
begin
maxwersja := wersja;
sciezka_pgdump := reg.ReadString('Base Directory') ;
Result := True;
end;
end;
end;
sciezka_pgdump := sciezka_pgdump + '\bin\';
end;
finally
DecimalSeparator := decimal ;
reg.CloseKey;
reg.Free ;
lista.Free ;
end;
end;
Tak jak pisalem wczesniej nie mam pojecia dlaczego to raz dziala raz nie ... Nie wiem czy to pomoze mam delphi 2009 uzywam zeosow na postgresql 8.4 nie pisalbym posta gdyby nie to ze funkcja dziala jak jej sie podoba