Delphi & MySQL

Delphi & MySQL
2007-04-16T20:38:51+02:00
2007-04-18T19:38:14+02:00
2022-11-04T07:10:38+01:00
GaryLaci
Hi!
Van egy programom ami egy mysql adatbázissal van összekötve. Példa forrás:

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; DataSource1: TDataSource; DBGrid1: TDBGrid; ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; ComboBox1: TComboBox; procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure UsersSQL(SQLstr: string); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.UsersSQL(SQLstr: string); begin if SQLstr='' then SQLstr:='SELECT * FROM users WHERE `active`=1'; with ADOQuery1 do begin Close; SQL.Clear; SQL.Append(SQLstr); Open; end; end; procedure TForm1.FormShow(Sender: TObject); begin ADOConnection1.ConnectionString:='Provider=MSDASQL.1;'+ 'Persist Security Info=True;'+ 'Extended Properties="DATABASE=Adatbázis.neve;'+ 'DRIVER={MySQL ODBC 3.51 Driver};'+ 'OPTION=3;'+ 'PWD=Jelszó;'+ 'PORT=3306;'+ 'SERVER=localhost;'+ 'UID=root"'; ADOConnection1.Connected:=True; UsersSQL(''); ComboBox1.Items.Clear; ADOQuery1.First; while not ADOQuery1.Eof do begin ComboBox1.Items.Add(ADOQuery1.Fields[1].AsString); ADOQuery1.Next; end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ADOConnection1.Connected:=False; end; procedure TForm1.Button1Click(Sender: TObject); begin UsersSQL(''); end; end.
Ez a prog semmi mást nem csinál, csak amikor elindul csatlakozik a mysql adatbázishoz lekérdezi a users tábában lévő adatokat és kész. Eddig megy is, de ha mégegyszer lekérdezek (Button1Click) akkor kifagy 'Meghatározhatatlan hiba'-val.
Mi lehet a gond?

Ami fontos lehet:
- AppServ 2.5.8
-- MySQL Root Password Reset
-- Apache 2.2.4
-- PHP 5.2.1
-- MySQL 5.0.27
-- phpMyAdmin-2.9.2

A segítségeteket előre is köszönöm!
Mutasd a teljes hozzászólást!
Ezt én is csak megerősíteni tudom.

MyODBC-3.51.11-2-win.exe
Mutasd a teljes hozzászólást!

  • Így elsőre, ne az OnShow-t használd, hanem az OnCreate eseményt.

    Kipróbáltam, nekem tökéletesen müxik.
    Mutasd a teljes hozzászólást!
  • Kipróbáltam én is, de nekem még mindig nem mülödik.
    Itt az adatb. is, hátha ezzel van a hiba:

    CREATE TABLE `users` ( `user_idx` int(11) NOT NULL auto_increment, `user_name` varchar(30) collate latin2_hungarian_ci NOT NULL, `user_paswd` varchar(32) collate latin2_hungarian_ci NOT NULL, `user_musz` int(1) NOT NULL, `user_plb` varchar(2) collate latin2_hungarian_ci NOT NULL, `active` int(1) NOT NULL, PRIMARY KEY (`user_idx`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2 COLLATE=latin2_hungarian_ci AUTO_INCREMENT=2 ; -- -- Tábla adatok: `users` -- INSERT INTO `users` VALUES (1, 'garylaci', '12', 1, '03', 1);

    with ADOQuery1 do begin Close; SQL.Clear; SQL.Append(SQLstr); Open; -> Itt akad ki end;
    Kezd már egy kicsit megőrjíteni. A Users táblán kívül van még 4 táblám amit a full progi használ, de azokkol nincs semmi baj. Ezért kezdem lebontani a progit és csak ez az egy tábla xarakszik. Nem értem miért!!
    Mutasd a teljes hozzászólást!
  • Ez helyett:
    begin Close; SQL.Clear; SQL.Append(SQLstr); Open; end;

    Ez kell:
    begin Close; SQL.Clear; SQL.Text(SQLstr); //vagy sql.addstring(sqlstr); Open; end;
    Mutasd a teljes hozzászólást!
  • Kiprobáltam de sehogysem müködik.
    Egyéb ötlet?
    Mutasd a teljes hozzászólást!
  • Változást értem el, bár nem pozitív.
    Most ilyen hibával áll le ->
    r6025 pure virtual function call
    csak nem értem miért?

    ja és kijavítottam a User proc.-t

    procedure TForm1.UsersSQL(SQLstr: string); begin if SQLstr='' then SQLstr:='SELECT * FROM felhasznalok WHERE 1'; with ADOQuery1 do begin Close; SQL.Clear; SQL.Add(SQLstr); Open; end; end;
    Mutasd a teljes hozzászólást!
  • Átraktad az onCreate-be?
    Mutasd a teljes hozzászólást!
  • CREATE TABLE `users`


    INSERT INTO `users`


    SELECT * FROM felhasznalok


    Nem tűnik fel semmi? Kicsit belezavarodtál.
    Mutasd a teljes hozzászólást!
  • de feltünt, de próbálkoztam hogy mi lehet a baj s csináltam egy másik táblát is, de azzal sem mükszik
    Mutasd a teljes hozzászólást!
  • igen átraktam, nincs változás
    Mutasd a teljes hozzászólást!
  • Most itt járok:

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, DBCtrls; type TForm1 = class(TForm) DataSource1: TDataSource; DBGrid1: TDBGrid; ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; ComboBox2: TComboBox; Button2: TButton; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure UsersSQL(SQLstr: string); end; var Form1: TForm1; implementation uses Math; {$R *.dfm} procedure TForm1.UsersSQL(SQLstr: string); begin if SQLstr='' then SQLstr:='SELECT * FROM felhasznalok WHERE 1'; with ADOQuery1 do begin Close; SQL.Clear; SQL.Add(SQLstr); Open; end; end; procedure TForm1.FormCreate(Sender: TObject); begin ADOConnection1.ConnectionString:='Provider=MSDASQL.1;'+ 'Persist Security Info=True;'+ 'Extended Properties="DATABASE=betronix07;'+ 'DRIVER={MySQL ODBC 3.51 Driver};'+ 'SERVER=localhost;'+ 'PORT=3306;'+ 'USER=root;'+ 'PASSWORD=pocok;'+ 'OPTION=3;'+ '"'; ADOConnection1.Connected:=True; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ADOConnection1.Connected:=False; end; procedure TForm1.Button2Click(Sender: TObject); begin UsersSQL(ComboBox2.Text); end; end.
    ComboBox2.items:
    SELECT * FROM felhasznalok WHERE 1 SELECT * FROM helyseg WHERE 1 ORDER BY 'helyseg' SELECT * FROM ugyfel_torzs WHERE 1 ORDER BY 'nev'
    Adatbázis(ok):

    CREATE TABLE `felhasznalok` ( `felh_idx` int(11) NOT NULL auto_increment, `felhnev` varchar(30) collate latin2_hungarian_ci NOT NULL, `jelszo` varchar(32) collate latin2_hungarian_ci NOT NULL, `muszpb` varchar(2) collate latin2_hungarian_ci NOT NULL, `active` int(1) NOT NULL, PRIMARY KEY (`felh_idx`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2 COLLATE=latin2_hungarian_ci AUTO_INCREMENT=2 ; INSERT INTO `felhasznalok` VALUES (1, 'garylaci', '1234', '', 1); CREATE TABLE `helyseg` ( `helyseg_idx` int(11) NOT NULL, `irszam` varchar(4) collate latin2_hungarian_ci NOT NULL, `helyseg` varchar(20) collate latin2_hungarian_ci NOT NULL, `megye` varchar(22) collate latin2_hungarian_ci NOT NULL, PRIMARY KEY (`helyseg_idx`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2 COLLATE=latin2_hungarian_ci; CREATE TABLE `ugyfel_torzs` ( `ugyfel_idx` int(11) NOT NULL auto_increment, `nev` varchar(50) collate latin2_hungarian_ci NOT NULL, `helyseg_idx` int(11) NOT NULL, `cim` varchar(60) collate latin2_hungarian_ci NOT NULL, `adoszam` varchar(13) collate latin2_hungarian_ci NOT NULL, `telefon` varchar(14) collate latin2_hungarian_ci NOT NULL, `mobil` varchar(15) collate latin2_hungarian_ci NOT NULL, `kapcsolatneve` varchar(30) collate latin2_hungarian_ci NOT NULL, `megjegyzes` text collate latin2_hungarian_ci NOT NULL, `create_date` varchar(20) collate latin2_hungarian_ci NOT NULL, `delete_date` varchar(20) collate latin2_hungarian_ci NOT NULL, `active` int(1) NOT NULL, PRIMARY KEY (`ugyfel_idx`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2 COLLATE=latin2_hungarian_ci AUTO_INCREMENT=14 ;
    A helységek 3574 sort tartalmaz
    ugyféltörzs 13 sort jelenleg

    Ebben a felállásban irja ki a felnt említett hiba üzit
    Mutasd a teljes hozzászólást!
  • És a WHERE feltétel vége hol van?


    SQLstr:='SELECT * FROM felhasznalok WHERE active=1';

    szvsz pihenj egy kicsit.
    Mutasd a teljes hozzászólást!
  • Próbáltad az ODBC drivert újra telepíteni? Esetleg megnézni, hogy egy másik gépen megy-e csont nélkül a progi. Én nem szeretem az ODBC-t, helyette MySQLDAC-ot vagy Zeos-t használok.
    Mutasd a teljes hozzászólást!
  • nekem is ilyen meghatározatlan hibát okozott és mindig akkor, ha 3.51.14 -es myodbc driverrel teszteltem a programomat.
    De a 3.51.12-es szuperül megy, sajna a mysql odalán nem lehet letölteni Windows alá.
    A környezet szinte ugyanaz, mint a tiéd, szóval a progid tutira menne. Ha gondolod átküldöm ezt a verziót, ha nem találod meg.
    Mutasd a teljes hozzászólást!
  • Ezt én is csak megerősíteni tudom.

    MyODBC-3.51.11-2-win.exe
    Mutasd a teljes hozzászólást!
  • Köszönöm a segitséget + a linket is.
    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