Delphi MySQL connect probléma

Delphi MySQL connect probléma
2007-05-30T12:21:25+02:00
2007-06-04T01:35:55+02:00
2022-11-04T19:10:42+01:00
udin
Sziasztok!

Delphi7 dbExpress-szel próbáltam csatlakozni (EasyPHP-val telepített) MySQL 4.1.9-hez.

Az SQLConnection csatlakozási tesztje sikeres. Az SQLTable aktiválásakor a hiba: Invalid Data Translation, és Active marad False. Ezután vettem csak fel Fields Editorral a mezőket, újabb aktiválási kísérlet: Operation not allowed on a unidirectional dataset, de Active már True lett. Viszont Gridet már nem lehet hozzákötni, mert újra az előbbi hiba. Tettem még egy kísérletet úgy, hogy beállítottam DBGridet, DataSource-t, és utoljára hagytam az SQLTable-t, ekkor már megjelentek a gridben a mezőnevek, és a megfelelő számú rekord, csakhogy üresen, és bármit próbálok tenni a griddel, jön egy újabb hibaüzenet: Invalid Handle.

Gondolom ennek az egész kavarodásnak közös oka lehet, de nem tudok rájönni, hogy micsoda. A gúgli szerint a libmysql.dll-t kellene lecserélni, egyéb ötletet nem találtam. Le is töltöttem néhány verziót, de semmi nem változott, sőt a legtöbbről lepattantam 'Unable Load'-dal.

A tábla egyébként a legprimitívebb, amit ki tudtam találni, egy mező, négy rekord, integer.

Tudnátok segíteni, hogy mit lehet tenni, hogy jó legyen?
Köszi.
Mutasd a teljes hozzászólást!
Hi!
"Megpróbálom PHP-ből elérni, de azt sajnos csak ugatom egyelőre, egy kis idő még rájövök a dolgokra."

Nos én összedobtam neked egy kis MySQL diagnosztikai kódot PHP-ben. A progi mindössze annyit csinál, hogy csatlakozik a szerverhez, megnyitja az adatbázist*, és kilistázza az ott talált táblákat, illetve, hogy azok összesen hány oszloppal és sorral rendelkeznek. Nálam jól működik, és asszem elegendően bőbeszédű.

*
A progi elején van négy konstans deklarálva. Azokat előbb meg kell adnod úgy, hogy a jobb oldali idézőjelpárba beírod a nálad érvényes adatokat.


<?php // Eeket állítsd be úgy, ahogy nálad megy define("HOST", "localhost"); // Gépnév (localhost, vagy 127.0.0.1) define("USER", "root"); // Felhasználónév define("PASSWORD", ""); // Jelszó define("DBNAME", "mysql"); // Az adatbázisod neve print "Start.<br>"; // Csatlakozás a MySQL szerverhez: print "Connecting... "; $ConnectID = mysql_connect(HOST, USER, PASSWORD); if ($ConnectID == FALSE) { print "<br>Could not connect to MySQL server. (". mysql_errno() ."): ". mysql_error() ."<br>"; die; } print "OK.<br>"; // Adatbázis kiválasztása: print "Selecting database... "; $DataBaseID = mysql_select_db(DBNAME, $ConnectID); if ($DataBaseID == FALSE) { print "<br>Could not open database on MySQL server. (". mysql_errno() ."): ". mysql_error() ."<br>"; mysql_close($ConnectID); die; } print "OK.<br>"; // Táblák kilistázása: print "Listing tables... "; $Command = "SHOW TABLES"; $Result = mysql_query($Command, $ConnectID); if ($Result == FALSE) { print "<br>Could not listed tables form this MySQL database. (". mysql_errno() ."): ". mysql_error() ."<br>"; mysql_close($ConnectID); die; } print "OK.<br>"; $n = 0; $Records = 0; while ($Line = mysql_fetch_row($Result)) { $Command = "SELECT * FROM {$Line[0]}"; $Result2 = mysql_query($Command, $ConnectID); $Rows = mysql_num_rows($Result2); $Fields = mysql_num_fields($Result2); $Records += $Fields * $Rows; $n++; print "$n.: {$Line[0]} cols = $Fields, rows = $Rows<br>"; } print "Number of all records in database is $Records.<br>"; //Adatbázis bezárása: mysql_close($ConnectID); print "End."; ?>

Az a lényeg, hogy ha ez a kód valami hibával tér vissza, akkor szinte biztos, hogy a MySQL van nálad rosszul beállítva, ha pedig szépen végigmegy, akkor meg szerintem a DBExpress tényleg felejtős legyen (inkább ZEOS).

Futtatsd le a szkriptet, és szólj, hogy mi az eredménye.

Szerk.: Kicsit hülyén fest Delphi-s topikban egy PHP kód...
Mutasd a teljes hozzászólást!

  • Nincs senkinek ötlete?
    (cseréljem le a MySQL-t, vagy a Delphit, esetleg az asszonyt? )
    Mutasd a teljes hozzászólást!
  • Talán próbáld meg nem csak Delphi alól elérni az adatbázist, hanem más programnyelvben írt programmal. Ha úgy sem jön össze, akkor valószínűleg maga az adatbáziskezelő beállítások nem jók. Ha pedig úgy jó, akkor meg a google-nak lesz igaza, lehet, hogy a libmysql.dll verziója inkompatibilis a Delphi által támogatottal (de ezt nem tudom ellenőrizni, mert ezen a gépen nincs Delphi).

    Ápropó! A MySQL szerver localhost-on van? Mert ha nem és globálisan is hozzáférhető, akkor adhatnál egy IP címet, amin elérjük a szervered és kísérletezhetünk.

    Valamint adhatnál forráskód részleteket, amik nem úgy akarnak működni, ahogy szeretnéd. Lehet, hogy egyszerűbb a hiba, mint gondolnád, csak nem veszed észre (ez velem is így szokott lenni; a bonyolult dolgokat átlátom, de az egyszerű hibákon -az esetek kisebbik hányadában- elvérzek...).

    Jobbat egyelőre nem tudok mondani.
    Mutasd a teljes hozzászólást!
  • Amennyire én ösmerem a dolgokat, a dbexpress nem a legjobb választás...

    Keress rá a neten a ZEOS-ra komponenscsomagra...
    MySQL-hez, InterBase-hez, FireBird-höz is natív kapcsolatot létesít!

    Egy próbát megér...
    Mutasd a teljes hozzászólást!
  • lehet, hogy a libmysql.dll verziója inkompatibilis a Delphi által támogatottal


    Ezzel már szívtam...

    ZEOS !!!
    Mutasd a teljes hozzászólást!
  • Megpróbálom PHP-ből elérni, de azt sajnos csak ugatom egyelőre, egy kis idő még rájövök a dolgokra.
    Localhoston van.
    Milyen kódra gondolsz? Még csak négy komponens van, le akartam csekkolni, hogy egyáltalán visszadja-e a táblát, de már itt elakadt a nagy project. Ha esetleg valami property érdekes lehet, mondjad, hogy melyik, mert én hiába próbálgattam őket.

    A libmysql-ről: mint mondtam, letöltöttem egy párat, de a tulajdonságlapjukon nincs verzió, így csak a méretük alapján tudom megkülönböztetni őket. Ha ennek a Delphivel kell kompatibilisnek lennie, hálás lennék, ha megnézné valaki, hogy melyik bizonyult használhatónak (mármint Delphi7-hez). Esetleg leírhatom, hogy melyikek vannak meg, ha ebből valaki tud segíteni.
    Mutasd a teljes hozzászólást!
  • Igen, pont ez lett volna a következő kérdésem, jobb-e a zeos, mint a dbExpress, merthogy láttam a neten ezt ajánlgatni már. Kicsit azért még erőlködök, nem szeretem feladni, de azt hiszem mindenképpen kipróbálom.

    Ezzel már szívtam...

    És lett megoldása, vagy zeos lett belőle? (ha lett, megoszthatnád velem).
    Mutasd a teljes hozzászólást!
  • Lehet, hogy butaság (mert még ilyet nem próbáltam), de mi lenne, ha lecserélnéd a driver-t?
    DBX4MySQL — Download

    Azt írják, hogy Delphi7-hez (is) és számos MySQL verzióhoz jó (bár nem tudom mit takar a letölthető trial verzió):

    Compatibility:
    DBX4mySQL supports MySQL servers 5.x, 4.1.x, 4.0.x and 3.23.x;
    DBX4mySQL works with Delphi 2005 Win32, Delphi 7, Delphi 6, C++ Builder 6.


    Ha butaságot mondtam, akkor bocs!

    Szerk.: Azt írják, hogy a trial teljes funkcionalitású, de néhány hét után regisztálni kell. Azt már nem tudom, hogy a reg fizetős buli lenne -e. De ha komolyan váltani akarsz (ZEOS), akkor a trial-t nem kell regisztrálni, próbálkozni viszont elég időt ad...
    Mutasd a teljes hozzászólást!
  • Azt nem tudom, hogy mennyire butaság, de mindenesetre kipróbáltam. De hiába telepítettem, nem történt semmi változás. Lehet, hogy még tenni kéne vele valamit, hogy a dbExpress használja is?
    Mutasd a teljes hozzászólást!
  • "Lehet, hogy még tenni kéne vele valamit, hogy a dbExpress használja is?"

    Nem tudom. Esetleg a ReadMe-ben nincs leírva?
    Mutasd a teljes hozzászólást!
  • Volt neki helpje, de sok köszönet nem volt benne, miután sikerült beizzítani, így társalgott velem:

    Information
    ---------------------------
    Successfully Connected


    Warning
    ---------------------------
    Failure to Connect: dbExpress Error: Invalid Time


    Error
    ---------------------------
    dbExpress Error: Invalid Time.


    Error
    ---------------------------
    Access violation at address 40BDCD29 in module 'dbexpress70.bpl'. Read of address 00000000.


    Úgy látszik a dbExpess nem lesz a barátom.
    Vajon látta már valaki működni?
    Mutasd a teljes hozzászólást!
  • Elég sok libmysql.dll verziót kipróbáltam, aztán valahogy a sokadik hajlandó volt működni...

    Rengeteget kerestem a neten (libmysql.dll), míg végre az egyik működött...

    De vagy 3 éve nem foglalkozom a MySQL-el...

    Én a FireBird-öt használom (IBExpress komponensekkel)
    Mutasd a teljes hozzászólást!
  • Hi!
    "Megpróbálom PHP-ből elérni, de azt sajnos csak ugatom egyelőre, egy kis idő még rájövök a dolgokra."

    Nos én összedobtam neked egy kis MySQL diagnosztikai kódot PHP-ben. A progi mindössze annyit csinál, hogy csatlakozik a szerverhez, megnyitja az adatbázist*, és kilistázza az ott talált táblákat, illetve, hogy azok összesen hány oszloppal és sorral rendelkeznek. Nálam jól működik, és asszem elegendően bőbeszédű.

    *
    A progi elején van négy konstans deklarálva. Azokat előbb meg kell adnod úgy, hogy a jobb oldali idézőjelpárba beírod a nálad érvényes adatokat.


    <?php // Eeket állítsd be úgy, ahogy nálad megy define("HOST", "localhost"); // Gépnév (localhost, vagy 127.0.0.1) define("USER", "root"); // Felhasználónév define("PASSWORD", ""); // Jelszó define("DBNAME", "mysql"); // Az adatbázisod neve print "Start.<br>"; // Csatlakozás a MySQL szerverhez: print "Connecting... "; $ConnectID = mysql_connect(HOST, USER, PASSWORD); if ($ConnectID == FALSE) { print "<br>Could not connect to MySQL server. (". mysql_errno() ."): ". mysql_error() ."<br>"; die; } print "OK.<br>"; // Adatbázis kiválasztása: print "Selecting database... "; $DataBaseID = mysql_select_db(DBNAME, $ConnectID); if ($DataBaseID == FALSE) { print "<br>Could not open database on MySQL server. (". mysql_errno() ."): ". mysql_error() ."<br>"; mysql_close($ConnectID); die; } print "OK.<br>"; // Táblák kilistázása: print "Listing tables... "; $Command = "SHOW TABLES"; $Result = mysql_query($Command, $ConnectID); if ($Result == FALSE) { print "<br>Could not listed tables form this MySQL database. (". mysql_errno() ."): ". mysql_error() ."<br>"; mysql_close($ConnectID); die; } print "OK.<br>"; $n = 0; $Records = 0; while ($Line = mysql_fetch_row($Result)) { $Command = "SELECT * FROM {$Line[0]}"; $Result2 = mysql_query($Command, $ConnectID); $Rows = mysql_num_rows($Result2); $Fields = mysql_num_fields($Result2); $Records += $Fields * $Rows; $n++; print "$n.: {$Line[0]} cols = $Fields, rows = $Rows<br>"; } print "Number of all records in database is $Records.<br>"; //Adatbázis bezárása: mysql_close($ConnectID); print "End."; ?>

    Az a lényeg, hogy ha ez a kód valami hibával tér vissza, akkor szinte biztos, hogy a MySQL van nálad rosszul beállítva, ha pedig szépen végigmegy, akkor meg szerintem a DBExpress tényleg felejtős legyen (inkább ZEOS).

    Futtatsd le a szkriptet, és szólj, hogy mi az eredménye.

    Szerk.: Kicsit hülyén fest Delphi-s topikban egy PHP kód...
    Mutasd a teljes hozzászólást!
  • Hát Te egy úr vagy, köszi!
    Lefutott hibátlanul, kipróbáltam több user és db estén is.
    Még az jutott eszembe, hátha lehet frissíteni a dbExpesst, esetleg kipróbálok még néhány libmysql.dll-t, és ha semmi áron nem adja meg magát, akkor jön a zeos.
    Mutasd a teljes hozzászólást!
  • Feltúrtam mindent, kb 20 verziót találtam, ebből talán 5 volt, ami hajlandó volt egyáltalán betöltődni, de ezek is a fennti hibák valamelyikét produkálták. Kezdem unni, de még egy utolsó próbálkozás: nem lenne mégis valaki, aki dbexpress-szel kapcsolódik mysql-hez?
    Mutasd a teljes hozzászólást!
  • Akkor ennyit a dbExpress-ről. Köszi a segítséget mindkettőtöknek!
    Mutasd a teljes hozzászólást!
  • Nagyon szívesen. Bár szerintem 0 pontos lesz a megoldásom, mert az nem megoldás, csak próbálkozás, és az sem Delphi-ben, hanem PHP-ben.
    Mutasd a teljes hozzászólást!
  • Nem feltétlenül a PHP-s kód miatt adtam a pontot, hanem az egész segítség miatt. Úgy tűnik jelen esetben az volt a megoldás, hogy kizárjuk amit lehet, és ami marad, az a rossz. Ennél közelebbit meg senki sem tudott mondani, szerintem jogos az 50 pont, remélem ebből nem lesz levonás. Beleszaladthatnak ebbe még sokan, azoknak is segítség, ami kiderült.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd