Nazwa konta WinXp a %appdata

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:

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.

0

kodowanie znaków

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

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

Pozdrawiam
Julius

0
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';
0

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

 
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

0

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

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