Autor Téma: Error - libmysql.dll  (Přečteno 3053 krát)

Offline Fantom007

  • Nováček
  • *
  • Příspěvků: 11
  • Karma: 0
    • Verze Delphi: Lazarus
Error - libmysql.dll
« kdy: 18-01-2021, 16:52:27 »
Na 64-bitových Windows 10 mám nainstalovánu MariaDB 10.4.6 prostřednictvím XAMPP (včetně Apache) a otevírání databází i sql dotazy na nich správně fungují. Napsal jsem si jednoduchoučký program (podle příkladů v internetu) na otevření Sql databáze (MariaDB), vyplnil potřebné vazby mezi komponentami včetně názvu otevírané databáze (vše jsem zkoušel i dynamicky) a jako připojovací komponentu jsem použil TMySQL57Connection. Po nastavení položky Connected (zkoušel jsem i dynamicky - stejné) následuje chybová hláška 'Can not load default MySQL Library ("libmysql.dll" or "libmysql.dll"). Check your installation'. Protože jsou komponenty propojené, stejná hláška se objeví i při SQLTransaction.Active nebo SQLQuery.Open. Z oficiálního zdroje jsem si stáhnul archiv s knihovnou libmysql.dll a tu zkopíroval jak do C:\Windows\System32, tak do adresáře s přeloženým exe programem (Lazarus i Target projektu jsou nastaveny jako 64-bit), ale se stejným výsledkem. Nepomohlo ani přejmenování knihovny na libmariadb.dll. Prosím tedy o pomoc, už jsem bezvýsledně strávil hledáním po internetu spoustu hodin.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7426
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Error - libmysql.dll
« Odpověď #1 kdy: 18-01-2021, 18:14:43 »
Excellent
Rated 1 time
Figu o tom viem, ale z iných diskusií som sa dozvedel, že sa často jedná o boj medzi 32 a 64 bit knižnicami. Pod Win64 32 dll sa spustiť nedá. Nemáš tento problém?
Win11 64b, Delphi 12.2, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline Fantom007

  • Nováček
  • *
  • Příspěvků: 11
  • Karma: 0
    • Verze Delphi: Lazarus
Re:Error - libmysql.dll
« Odpověď #2 kdy: 18-01-2021, 23:16:35 »
Používám Windows 64bit, Lazarus 64bit, při překladu Cílový OS je nastaven na Win64, Cílová rodina na CPU x86_64 (nepomůže ani sestavení Win32 a i386), zmíněná knihovna je z balíku mysql-8.0.23-winx64. Neboli vše mám 64-bitové.

Offline Fantom007

  • Nováček
  • *
  • Příspěvků: 11
  • Karma: 0
    • Verze Delphi: Lazarus
Re:Error - libmysql.dll
« Odpověď #3 kdy: 19-01-2021, 15:22:00 »
a) Stačí jen přidat knihovnu libmysql.dll do \Windows\System32 (nebo k exe přeloženého programu)? Nemusí se knihovna zaregistrovat příkazem regsvr32 libmysql.dll? (to mi taky nešlo).

b) Do .DatabaseName se vyplňuje název databáze nebo název jedné konkrétní tabulky v ní obsažené? V Delphi Paradoxu byly pojmy Tabulka a Databáze identické (zkoušel jsem obojí - bez výsledku).

c) Je zvláštní, že se nikde na disku uvedená knihovna nevyskytuje, ačkoliv jsem nainstaloval XAMPP a databáze s tabulkou mi jde v localhost\phpmyadmin vytvořit, vyplnit i editovat.

d) Zkusil jsem stáhnout i libmariadb.dll, ale bez výsledku.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3530
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Error - libmysql.dll
« Odpověď #4 kdy: 19-01-2021, 16:03:51 »
Excellent
Rated 1 time
Kdysi býval problém s tím, že se u každé verze Parodie jmenovala ta klientská .dll jinak tj. Ve jménu bývalo čislo verze jako sufix. A řešením bylo buď explicitně zadat jméno .dll nebo .dll zkopírovat s výchozím jménem libmysql.dll a soubor dát do adresáře k .exe
 Ale s Parodii jsem zkoušel něco dělat před 10+ lety

Jinak si vždycky můžeš spustit filé monitor a podívat se, po cem to satra

Offline Fantom007

  • Nováček
  • *
  • Příspěvků: 11
  • Karma: 0
    • Verze Delphi: Lazarus
Re:Error - libmysql.dll
« Odpověď #5 kdy: 19-01-2021, 18:00:13 »
Tak jsem spustil Process Monitor a zjistil, že u spousty záznamů s libmysql.dll byl skoro všude SUCCESS, pouze dvakrát FILE LOCKED WITH ONLY READERS, jednou OPLOCK HANDLE CLOSED a několik oblastí s BUFFER OVERFLOW (za kterými pokračoval SUCCESS).

Do adresáře s přeloženým exe jsem postupně dokopíroval devět knihoven dll, které program v danou chvíli volal a nebyly nalezeny.
Nyní jsem se posunul, protože program vrací hlášku:
TMySQL57Connection can not work with the installed MySQL client version: Expected (5.7), got (8.0.23).

Nerad bych přeinstalovával stávající SQL, protože na tom teď z domova dálkově pracuji na firemních věcech. Možná po konzultaci s ajťákem, ale ten asi bude mít spoustu keců. Poradí někdo, co je příčinou chyby programu?.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3530
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Error - libmysql.dll
« Odpověď #6 kdy: 19-01-2021, 19:16:10 »
Great
Rated 1 time
TMySQL57Connection can not work with the installed MySQL client version: Expected (5.7), got (8.0.23).
No vzdyt ti to pisou: s kazdou instalaci MySQL serveru dostanes i odpovidajici verzi klientske .DLL, takze ty mas libmysql z verze 8.0.23, ale ta trida TMySQL57Connection je zastarala a byla vyvinuta pro verzi 5.7. Ale co je to zac nevim, stejne jako nevim, jestli je verze 8.x zpetne kompatibilni. Takze bud sehnat lepsi/jine komponenty nebo downgradovat Parodii, jestli tak zastarala vec jeste nekde existuje.

Nejlepsi bude se na Lazarus zeptat nekde na mezinarodnim foru, tady mam dojem s tim moc lidi nedela.
« Poslední změna: 19-01-2021, 19:36:01 od pf1957 »

Offline Fantom007

  • Nováček
  • *
  • Příspěvků: 11
  • Karma: 0
    • Verze Delphi: Lazarus
Re:Error - libmysql.dll
« Odpověď #7 kdy: 20-01-2021, 16:12:44 »
Tak už mi to chodí. Chybová hláška 'Can not load default MySQL Library ("libmysql.dll" or "libmysql.dll")' se skutečně zobrazuje při použití 32-bitové knihovny pod 64-bitovým programem, hláška 'TMySQL57Connection can not work with the installed MySQL client version: Expected (5.7), got (8.0.23)' nastane při nesouhlasu verze knihovny a připojovací komponenty. Stáhl jsem si starší verzi knihovny, a program začal chodit.

Trochu mě překvapilo, že poslední verze programu Lazarus má poslední připojovací komponentu k SQL databázi pro verzi 5.7, tedy dost zastaralou (naštestí chodí). Kdyby někdo znal odkaz na novější komponentu, budu velmi rád.

Trochu zmatek jsem měl v tom, že pojem Databáze znamená (pod)adresář s tabulkami, a název vlastní tabulky se použije až v sql dotazu. Toto názvosloví je (alespoň pro mě) dost zavádějící. Když jako DatabaseName použiji 'test', program se dívá do adresáře  ..\xampp\mysql\data\test. Pokud tento adresář zkopíruji např. do C:\test a tuto cestu zadám jako DatabaseName, program ohlásí Unknown database 'c:\test'. Nevím tedy, jak zadat úplnou cestu k databázovým tabulkám umístěným ve vlastním adresáři.

Děkuji všem, kdo se mi snažili pomoci.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3530
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Error - libmysql.dll
« Odpověď #8 kdy: 20-01-2021, 16:29:10 »
Trochu zmatek jsem měl v tom, že pojem Databáze znamená (pod)adresář s tabulkami, a název vlastní tabulky se použije až v sql dotazu. Toto názvosloví je (alespoň pro mě) dost zavádějící. Když jako DatabaseName použiji 'test', program se dívá do adresáře  ..\xampp\mysql\data\test. Pokud tento adresář zkopíruji např. do C:\test a tuto cestu zadám jako DatabaseName, program ohlásí Unknown database 'c:\test'. Nevím tedy, jak zadat úplnou cestu k databázovým tabulkám umístěným ve vlastním adresáři.
To je cele pomylene: Jestli si to po 10+ letech pamatuju, tak databaze je v podani MySQL to, co vytvoris DDL prikazem
Kód: SQL [Vybrat]
  1. CREATE DATABASE test
Tim se to dostane do katalogu databazi, kterou si z console muzes zobrazit prikazem
Kód: SQL [Vybrat]
  1. SHOW DATABASES
a jeji pouziti
Kód: SQL [Vybrat]
  1. USE test
A mam dojem, ze zrovna i konektivite se zadava jmeno databaze tj. napr. test

Kde ty databaze jsou, je zalezitost konfigurace RDBMS a v jakem jsou tvaru je ciste zalezitost MySQL. Programatorovi do toho v podstate nic neni.
A tabulka = repository DB entity, to neni zadna databaze a nikdy nebyla, snad ani v dobach dBase...




Offline Fantom007

  • Nováček
  • *
  • Příspěvků: 11
  • Karma: 0
    • Verze Delphi: Lazarus
Re:Error - libmysql.dll
« Odpověď #9 kdy: 20-01-2021, 18:55:26 »
Takže jestli jsem to dobře pochopil, není možné nakonfigurovat místo vytvoření SQL databáze (v zadaném adresáři) a tam s ní pracovat. Pro mne by bylo dobré uschovat si SQL databázi v podadresáři programu (použít relativní cestu), abych si ho mohl zkopírovat na jiný počítač a rovnou spustit i s příslušnou databází, a nezkoumat, ve kterém adresáři systém s SQL databázemi pracuje (byl jsem tak zvyklý pracovat s databázemi Paradoxu).

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3530
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Error - libmysql.dll
« Odpověď #10 kdy: 20-01-2021, 19:12:54 »
Great
Rated 1 time
Takže jestli jsem to dobře pochopil, není možné nakonfigurovat místo vytvoření SQL databáze (v zadaném adresáři) a tam s ní pracovat. Pro mne by bylo dobré uschovat si SQL databázi v podadresáři programu (použít relativní cestu), abych si ho mohl zkopírovat na jiný počítač a rovnou spustit i s příslušnou databází, a nezkoumat, ve kterém adresáři systém s SQL databázemi pracuje (byl jsem tak zvyklý pracovat s databázemi Paradoxu).
Zapomen na to, co sis zapamatoval pri praci s Paradoxem, to ti je spis na obtiz nez k uzitku.

Je treba si uvedomit, ze MySQL je server, ktery se spousti pri startu pocitace jako service a vsechny aplikace s nim komunikuji pres klientskou knihovnu pres TCP/IP komunikaci, a to nejen na tomto pocitaci, ale hlavne z jinych pocitacu. Server pracuje nezavisle na tvoji aplikaci. A vsechny database na tomto pocitaci ma tento server v DataDir, kde kazde DB odpovida jeden podadresar. DataDir se konfiguruje a take ho lze zmenit prikazem --datadir, ale pri zastavenem resp. spoustenem serveru.

Zkratka, mel by sis o SQL serverech precist neco obecne a pak probehnout web MySQL, jinak to bude s tebou nekonecna story a malokdo s tebou bude chtit resit zalezitosti, ktere si muzes snadno vygooglit. A MySQL ma dobrou dokumentaci.


Offline Fantom007

  • Nováček
  • *
  • Příspěvků: 11
  • Karma: 0
    • Verze Delphi: Lazarus
Re:Error - libmysql.dll
« Odpověď #11 kdy: 20-01-2021, 22:15:51 »
Dobrá, díky za všechny informace.

Offline raul

  • Hrdina
  • ****
  • Příspěvků: 468
  • Karma: 15
    • Verze Delphi: FPC :D
Re:Error - libmysql.dll
« Odpověď #12 kdy: 21-01-2021, 10:14:32 »
Great
Rated 1 time
Jen pro doplneni - pak jsou ruzne Embedded databaze, coz je databaze umistena misto v service v dll ci jinak. Tam pak je mozno pristupovat jak pises - nekdy. Zalezi ale opet na danem typu a na dalsich vecech. Obecne jak psal pf - nastuduj si relacni databaze (pojem), client/server architekturu a pak jazyk SQL (lisi se samozrejme mezi jednotlivymi databazemi, ale zaklad je stejny). A na dotaz - ktera db je nejlepsi je jednoducha odpoved - ta, ktera vyhovuje pozadavkum a zaroven k ni pristupujes tak, jak je navrzena - videl jsem aplikaci na accesu, ktera rychlostne dala na prdel mysql/mssql/pgsql, protoze vyuzila presne moznosti accessu. Kdyby ji nekdo prepsal aby sedla mysql, bude rychla tam. (To je obecne receno, samozrejme nektere db jsou horsi, nektere lepsi, nicmene z tech pouzitelnych je to +- jak pisu). Pro rozhodnuti co a jak - mimo pozadavku zadavatele treba - muzes zohlednit i vyuziti - spise vkladani dat ? Spise zmeny dat ? Spis cteni dat ? Pozadavky na rychlost tzn cachovani ? Atd atd atd. Jinak databazi je hafo, treba sloupcove db (bezne jsou radkove), streaming db (ne pro streamovani youtube, ale pro prubezne vypocty v case, kdy nezalezi na vstupnich datech, ale na vysledcich z nich (treba jednoduche pocitani uzivatelu/session ale i slozitych veci), objektove, neobjektove (vypadl mi ten nazev - jedna se o ukladani nejasne strukturovanych JSON dat treba) atd.
Lazarus 1.6.3:), FPC, Intel/Arm, Windows/Linux, (občas Delphi)

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3530
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Error - libmysql.dll
« Odpověď #13 kdy: 21-01-2021, 14:19:08 »
Great
Rated 1 time
Kdyz si nastudujes tu MySQL, tak zjistis, ze s ni dnes jdou delat i divne operace jako umistit DB na per file bazi mimo standarndi datove struktury viz https://dev.mysql.com/doc/refman/8.0/en/innodb-create-table-external.html, ale za me je to znasilnovani client/server architektury k necemu, k cemu se nehodi a clovek by mel mit setsakra dobry duvod se k necemu takovemu uchylovat.

Obecne se databaze u tech vetsich RDBMS na jiny stroj prenaseji pomoci BACKUP/RESTORE apod.