Backup bazy i rejestr

0

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

0

pchar(sciezka_pgdump), SW_HIDE);

Masz błąd, nie otworzyłeś jednego nawiasu.

Pzdr

0

mmmm to chyba nie ten blad albo ja nie widze o jaki nawias chodzi bo jesli od shellexecute to jest wyzej

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

<span style="color: red">)</span>
```delphi
;

1 użytkowników online, w tym zalogowanych: 0, gości: 1