Nazwa konta WinXp a %appdata

Nazwa konta WinXp a %appdata
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam,
mój program instaluje się do katalogu Program Files\Nazwa programu, a pliki bazy danych do %appdata%\Nazwa Programu.
Komponent ZConnection.Database pobiera ścieżkę do plików bazy za pomocą kodu:

Kopiuj
ZConnection1.Database:=GetEnvironmentVariable('appdata') + '\Nazwa programu\plik.bazy';

Wszystko pracuje prawidłowo do momentu gdy nazwa konta WindowsXP nie zawiera ogonków.
Np. Na koncie użytkownika Sklad działa ok ale gdy ktoś ma nazwę użytkownika Skład to już komponent ZConnection nie znajduje bazy.

Nie mam pomysłu jak to zrobić, albo gdzie umieścić pliki bazy w innym miejscu. Muszą być w %appdata% bo Win7 blokował mi możliwość manipulowania plikami bazy z poziomu programu

Proszę o pomoc. Pozdrawiam.

PD
  • Rejestracja: dni
  • Ostatnio: dni
0

kodowanie znaków

Kopiuj
ZConnection1.Database:=UTF8Decode(GetEnvironmentVariable('appdata') + '\Nazwa programu\plik.bazy'); 
JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 16
0

Już próbowałem (z encode też). To nie to. Dalej wyrzuca komunikat:
SQL Error: library routine out of sequence

Pozdrawiam
Julius

Opi
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1034
0
Kopiuj
uses ShlObj;

function GetLoginName: string;
var
 lBuffer: array [0..128] of Char;
 lSize: DWORD;
begin
 lSize := SizeOf(lBuffer);
 if GetUserName(lBuffer, lSize) then Result := Trim(lBuffer)
 else Result := 'unknown';
end;

function GetParamDir(Param: Integer): string; overload;
var
 Path: array [0..MAX_PATH] of Char;
begin
 SHGetSpecialFolderPath(0, Path, Param , False);
 Result := Path;
end;

Wynik := ExtractFilePath(GetParamDir(CSIDL_PROFILE)) + GetLoginName + '\Nazwa programu\plik.bazy';
JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 16
0

Sprawdziłem, problem dalej występuje podczas próby z wykorzystaniem kodu powyżej:
To dalej nie to.

Kopiuj
 
ZConnection1.Database:=ExtractFilePath(GetParamDir(CSIDL_PROFILE)) + GetLoginName + '\Dane aplikacji\Program\baza.programu';
ZConnection1.Connected:=True;

Używam Zeos dev 7.0.0-dev na Delphi 2010.

Pozdrawiam
Marek Grylewicz

Problemu wystąpienia błędu (nazwa konta Win z ogonkiem i ZConnection) nie rozwiązałem, ale przeniosłem pliki bazy do folderu C:\Documents and Settings\All user\Dane aplikacji\Program. Tu ogonków nie ma :)
ZConnection1.Database:=ExtractFilePath(GetParamDir(CSIDL_COMMON_APPDATA)) + 'Dane aplikacji\Program\baza.danych
Teraz "wszystko" gra niezależnie od nazwy konta w systemie.

Pozdrawiam
Julius

Opi
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1034
0

Nie możesz odwoływać się w ten sposób do polskiej nazwy folderu "AppData", czyli "Dane aplikacji". Wiesz jakie ma to ograniczenie ?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.