Chciałbym poprosić Was o sprawdzenie fragmentu kodu. Problem jest taki, że w ok 1% wywołania zwraca błąd zupełnie z czapy na mój gust:
SQL Error: Access denied for user 'user'@'xxx.xxx.xx.xx' (using password: NO)
naprzemiennie z
SQL Error: Access denied for user 'ODBC'@'xxx.xxx.xx.xx' (using password: NO)
Od razu dodam, że 'user' ma nadane stosowne uprawnienia do bazy/tabeli z wszystkich hostów (@%) i to ten sam użytkownik dla wszystkich instancji aplikacji desktopowej. Skąd się nagle bierze ODBC zamiast 'user' pojęcia nie mam.
Oto fragment bardzo prostego kodu:
var
tempConnection:TZConnection;
tempQuery:TZQuery;
if CreateZeosObjects(tempConnection, tempQuery, rbReplikacja1) = 1 then
begin
try
tempQuery.SQL.Text := TDB.IloscPolaczen(Anumer, DNI_WSTECZ);
tempQuery.Connection.Connect;
tempQuery.Open; // tutaj powstaje wyjątek :)
....
function CreateZeosObjects(var Connection:TZConnection; var Query:TZQuery; Polaczenie:TRodzajBazy):byte;
var
tempConnection:TZConnection;
tempQuery:TZQuery;
begin
result := 0;
try
tempConnection := TZConnection.Create(nil);
tempQuery := TZQuery.Create(nil);
tempQuery.Connection := tempConnection;
case Polaczenie of
rbReplikacja1:
begin
tempConnection.Protocol := 'mysql-5';
tempConnection.Database := FormMain.DB1.Database;
tempConnection.HostName := FormMain.DB1.Host;
tempConnection.User := FormMain.DB1.Login;
tempConnection.Password := FormMain.DB1.Password;
end;
...
Connection := tempConnection;
Query := tempQuery;
result := 1;
Diagnoza jest taka, że albo MySQL zwraca taki błąd z powodu wewnętrznego błędu :D, albo co bardziej prawdopodobne tworzony obiekt TZConnection nie ma uzupełnionego pola User (podstawia sobie sam ODBC), albo pola Password. Pytanie dlaczego (losowość komplikuje sprawę).