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ę).