Nieudane połączenie z bazą danych na maszynie bez lazarusa

0

Witam
Wyprodukowałem w ostatnim Lazarusie (dokładnie w CodeTyphon) za pomocą komponentu zeos prostą apkę która łączy się z mysql. Wszystko działa, biblioteka libmysql.dll łącznie ze ścieżką do niej jest poprawna (plik jest w tym samym katalogu co exe, LibraryLocation ustawione) . Mam dziwny objaw. Po kompilacji program uruchamia się na innych kompach, ale nie łączy się z bazą. Przepuściłem połączenie przez try/except, aby wyłuskać jakiś błąd ale nie dostaje żadnej informacji o błędzie. Zaobserwowałem, że program łączy się z bazą tylko tam gdzie zainstalowany jest Lazarus - jeśli go nie ma na kompie nie ma połączenia. Zalogowanie się na innego użytkownika w danym systemie (gdzie jest Lazarus) również nie pozwala połączyć się z bazą mimo iż exe-c uruchamia się bez problemu. Ktoś wie co muszę doinstalować na gołym windowsie, żeby połączenie z bazą działało ? Testowałem na Windows 11, 2022, 2016 - MySQL jest w wersji 8.x x64.

0
chickendev napisał(a):

Lazarus - jeśli go nie ma na kompie nie ma połączenia. Zalogowanie się na innego użytkownika w danym systemie (gdzie jest Lazarus) również nie pozwala połączyć się z bazą mimo iż exe-c uruchamia się bez problemu.

A "nie pozwala się połączyć", to znaczy co konkretnie?

Dostajesz wyjątek? Czy późniejsze wysłanie query również kończy się wyjątkiem?

1
Riddle napisał(a):
chickendev napisał(a):

Lazarus - jeśli go nie ma na kompie nie ma połączenia. Zalogowanie się na innego użytkownika w danym systemie (gdzie jest Lazarus) również nie pozwala połączyć się z bazą mimo iż exe-c uruchamia się bez problemu.

A "nie pozwala się połączyć", to znaczy co konkretnie?

Dostajesz wyjątek? Czy późniejsze wysłanie query również kończy się wyjątkiem?

Pogrzebałem i mam w momencie wywołania ZConnection.connect; wyjątek

System error (OS code 126)
2

a masz klienta mysqla zainstalowanego na tym innym kompie? Jest też coś takiego https://www.dependencywalker.com - pokaże CI jakich bibliotek CI brakuje

0

Goole + blad 126 sugerują odpowiedz "Specified module could not be found"

biblioteka musi być znaleziona przez EXE , a EXE szuka w folderze aplikacji oraz w PATH

generalnie kazde polaczenie z baza danych zazwyczaj (bo nie zawsze albo jest to ukryte w postaci statycznego linkowania) wymaga biblioteki do nawiązania połączenia i trzeba to doinstalować/dystrybuować wraz z EXE

w skrócie: Skopiuj DLL do folderu aplikacji i sprawdź czy zadziała

0

Tak mam zrobione od pierwszych linii kodu:

procedure TForm1.bazaBeforeConnect(Sender: TObject);
var
	slib:string;
begin
	slib := ExtractFilePath(Application.ExeName)+'libmysql.dll';
	baza.HostName := 'x.x.x.x';
        baza.Database := 'baza';
	baza.User := 'dbuser';
	baza.Password := 'dbpassword';
	baza.Port := 3306;
	baza.Protocol := 'mysql';
	baza.ClientCodePage := 'utf8mb4';
	baza.LibraryLocation:= slib;
    //baza.LibraryLocation:='libmysql.dll';
    //Form1.Caption := slib;

end;  

Ścieżka jest poprawna. Zabieram dwa pliki na inny czysty komputer (program.exe i libmysql.dll) i program wywala błąd 126 w momencie wywołania baza.connect;. Jak zainstaluje na czystym systemie lazarusa program się łączy, ale tylko na profilu użytkownika na którym lazarus został zainstalowany. Nie ważne jest konto i jego uprawnienia (sprawdzałem różne konfigurację) Gogiel marudził o bibliotekach od visual c++ - przerobiłem wszystkie od wersji 2010 do najnowszej. Instalowanie bibliotek mysql nic nie daje. DependencyWalker wywala kilkadziesiąt błędów - gogiel sugeruje, że to dll-ki z .NET więc wgrałem wszystko i zaktualizowałem wszystko zgodnie z sugestiami.

0

Wszystko wskazuje na to, że problem jest z najnowszą biblioteką libmysql.dll. Ponieważ program jest na własne potrzeby zamiast mysql 8 użyłem wersji z linii 5.x i biblioteki do niej.
Problem nie wystąpił i wszystko łączy się idealnie więc tak to zostawiam - bardzo dziękuje za podpowiedzi.

0

Najprawdopodobniej problem był nie z biblioteką tylko brakuje zainstalowanego pakietu MS Visual C++ Redistributable tylko trzeba by sprawdzić w jakiej wersji a tego mozesz sie dowiedzieć używajać Dependency Walker jak sugerował @abrakadaber
Zainstalowanie w ciemno ostatniej wersji 2015-2022 https://learn.microsoft.com/en-US/cpp/windows/latest-supported-vc-redist?view=msvc-170 prawdopodobnie rozwiązałoby sprawę.

1

warto też sprawdzić PATH
bo często u developera jest dużo więcej niż u śmiertelników i dlatego działa i nie działa

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