[ mmijic @ 02.06.2006. 07:54 ] @
Nabavio sam Borland Developer Suite 2006, imam od prije instaliran AppServ 2.5.5 sa MySQL serverom 5.0.16. Sada se iz Delphija hocu spojiti na MySQL bazu.
Naime koristim dbExpress komponente za spajanje. spojim se na server sa TSQLConnection, odaberem potreban driver te postimam sto je potrebno, nakon toga testiram konekciju i kaze mi da je sve uredu. Ali kad koristim TSQLTable da se povezem na tabelu u bazi, nece da mi prikaze ni jednu, znaci odaberem konkeciju ali tabela nema.

Ima li tko da mi moze pomoci u vezi ovoga?
[ delalt @ 02.06.2006. 08:45 ] @
Za TSQLTable ukucaj sam naziv tabele iz baze u TableName,
naravno, takva tabela u bazi mora stvarno da postoji.
Postavi Active na True za TSQLTable i ako ne prijavi grešku,
onda je sve u redu.
Ako ne radi probaj i sa TSQLQuery pa opiši detaljnije problem.

Inače, postoje problemi sa drajverima za MySQL u zavisnosti od verzije,
pa pogledaj i forum za MySQL i Delphi:
http://forums.mysql.com/read.php?49,81834,81834#msg-81834
[ mmijic @ 02.06.2006. 08:51 ] @
Probavao sam vec prije upisivati sam naziv tabele koja vec postoji u bazi, i kad je hocu staviti na active, javi mi gresku u driverima.
[ mmijic @ 02.06.2006. 09:38 ] @
Probao sam sa tim novim driverima, uspio sam se konektovati na bazu, u TSQLTable upisem rucno ime tabele jer ih opet nema, kad pokusam ukljuciti Active=True javi mi gresku

"dbExpress Error:[0x0005]: Operation Not Supported."

Kad kliknem na details dobijem ovo:

+ $19[523002CC]{dbrtl100.bpl} DB.DB.DatabaseError (Line 2479, "DB.pas" + 3) + $19
+ $5[52BC0D96]{dbexpress100.bpl} SqlExpr.SqlExpr.TCustomSQLDataSet.SQLError (Line 5548, "SqlExpr.pas" + 35) + $5
+ $6[52BC3A9C]{dbexpress100.bpl} SqlExpr.SqlExpr.TCustomSQLDataSet.CheckPrepareError (Line 6630, "SqlExpr.pas" + 4) + $6
+ $2[52BC10A2]{dbexpress100.bpl} SqlExpr.SqlExpr.TCustomSQLDataSet.OpenCursor (Line 5606, "SqlExpr.pas" + 5) + $2
+ $2[52BC6E45]{dbexpress100.bpl} SqlExpr.SqlExpr.TSQLTable.OpenCursor (Line 7888, "SqlExpr.pas" + 1) + $2
+ $0[51F2AC1E]{rtl100.bpl } TypInfo.TypInfo.SetOrdProp (Line 1318, "TypInfo.pas" + 27) + $0
+ $6[20EED30A]{designide100.bpl} DesignEditors.DesignEditors.TEnumProperty.SetValue (Line 1402, "DesignEditors.pas" + 5) + $6
+ $16[20EEB99C]{designide100.bpl} DesignEditors.DesignEditors.TPropertyEditor.Edit (Line 671, "DesignEditors.pas" + 11) + $16
+ $5[20C943EA]{coreide100.bpl} PropInsp.PropInsp.TPropertyInspector.PropListEditDblClick (Line 837, "PropInsp.pas" + 20) + $5
+ $A[20FCD681]{vclide100.bpl} IDEInspListBox.IDEInspListBox.TInspListBox.DoEditDblClick (Line 981, "ideinsplistbox.pas" + 2) + $A
+ $6[5203C998]{vcl100.bpl } Controls.Controls.TWinControl.WndProc (Line 7242, "Controls.pas" + 101) + $6
+ $4[20FCC857]{vclide100.bpl} IDEInspListBox.IDEInspListBox.TPropInspEdit.WndProc (Line 431, "ideinsplistbox.pas" + 7) + $4
+ $0[51F40BB0]{rtl100.bpl } Classes.Classes.StdWndProc (Line 11572, "classes.pas" + 8) + $0
+ $6A[77D48731]{USER32.dll } GetDC + $6A
+ $14A[77D48811]{USER32.dll } GetDC + $14A
+ $122[77D489C8]{USER32.dll } GetWindowLongW + $122
+ $A[77D48A0B]{USER32.dll } DispatchMessageW + $A
[ _deran_ @ 02.06.2006. 10:05 ] @
Ako ne mora dbExpress, Zeos komponente rade sa mysql-om (i sa firebird, interbase, mssql, oracle, postgresql, sqlite, i sybase)
http://sourceforge.net/projects/zeoslib/

ili javi ako ce ti pomoci driver za ODBC
[ mmijic @ 02.06.2006. 11:17 ] @
ODBC mi nije pomogao. A Zeos komponete ne mogu instalirati, pri kompajliranju javlja puno gresakal, neke sam uspio zaobici, ali dosao sam do jedne gdje kaze kao nesto da negdje ima deklarirane 42 varijable, a u fileu se koristi samo 38, nisam siguran za ovo sta je problem, samo znam da ne mogu instalirati Zeos komponente.
[ delalt @ 02.06.2006. 18:55 ] @
Citat:
mmijic: Probao sam sa tim novim driverima, uspio sam se konektovati na bazu, u TSQLTable upisem rucno ime tabele jer ih opet nema, kad pokusam ukljuciti Active=True javi mi gresku

Daj malo detaljnije kako si postavio parametre za TSQLConnections, koristiš li lokalno, na istom računaru,
gdje si sve kopirao dll-ove... Kakva je struktura tabele koju probavaš da učitaš (napravi neku vrlo jednostavnu,
samo za probu)
Ako imaš stariju verziju MySQL 4.0.x bilo bi dobro da probaš i sa njom i sa starim dll koji dolazi uz Delphi.
Ne koristim trenutno MySQL pa nisam ni probao one drajvere... Inače, sa onim drajverom neće ti ni
prikazivati automatski imena tabela, moraš sam unositi.

[ delalt @ 03.06.2006. 11:06 ] @
@mmijic
Upravo sam probao onaj drajver za dbExpress za koji sam ti dao link,
u kombinaciji sa MySQL 5.0.15 verzijom (mislim da treba da radi i sa onom verzijom
koju ti imaš).
Nisam duže testirao, ali sa jednostavnom tabelom koju sam na brzinu sklepao, sve radi normalno.
Dodao sam i povezao i SQLQuery, Provider, ClientDataSet, DataSource i
još DBGrid na Formu i probao upis, izmjenu i brisanje i nisam imao nikakvih
problema.
Ipak, testiraj malo u stvarnom okruženju, sa malo većom bazom...
[ mmijic @ 03.06.2006. 14:31 ] @
Evo malo detaljnije sta i kako koristim.
Koristim AppServ 2.5.4a mozete pogledati detaljnije informacije na http://www.appservnetwork.com/, u biti s AppServ programom dolaze vec konfigurirani Apache 2.0.55, MySQL 5.0.16, PHP 5.1.1 te phpMyAdmin-2.6.4-pl4. Nakon toga koristim phpMyAdmin za kreiranje MySQL baza. i to sve radi sto se tice web stranica, PHP-a i MySQL-a.

Ali inace radio sam sa Delphijem 7 i koristio MIcrosoft Access baze podataka u programima jer do nedavno nisam imao pojma o MySQL-u. Sada kad znam dovoljno, znam i da je puno lakse neke stvari uraditi sa MySQL-om nego ADO bazama podataka, takodjer znam da je moguce i u Delphiju 7 spojiti se na MySQL bazu, ali to nikada nisam probao. Nedavno sam nabavio Borland Developer Suite 2006 i hocu sve buduce sto budem pravio da radi na MySQL bazi podataka.

Napravio sam novu tabelu pod imenom "proba", u njoj tabelu "proba1" i u tabeli kolonu "proba2" koja ima vrijednost VARCHAR=255

Evo parametri za TSQLConnection:

GetDriverFunc=getSQLDriverMYSQL50
LibraryName=dbxopenmysql50.dll
VendorLib=libmysql.dll
HostName=localhost
Database=DBNAME
User_Name=MOJ_USER
Password=MOJ_PASS
BlobSize=-1
ErrorResourceFile=
LocaleCode=0000
Compressed=False
Encrypted=False

Sve koristim lokalno, na jednom racunaru je sve, I BDS2006 i MySQL server

Dll sam kopirao u "C:\Program Files\Borland\BDS\4.0\Bin\dbxopenmysql50.dll", libmysql.dll se nalazi u "C:\Windows\System32\libmysql.dll"

Probavao sam i sa MySQL serverom 4.0.xx i sa 5.0.16 sa starim i novim driverima. cak sam probavao i ovo:

Code:

var
  Connection: TSQLConnection;
begin
  Connection := TSQLConnection.Create(nil);
  Connection.DriverName := 'MySQL';
  Connection.GetDriverFunc := 'getSQLDriverMYSQL50';
  Connection.LibraryName := 'dbxopenmysql50.dll';
  Connection.VendorLib := 'libmysql.dll';
  Connection.Params.Append('Database=NAME_OF_DATABASE);
  Connection.Params.Append('User_Name=NAME_OF_USER');
  Connection.Params.Append('Password=PASSWORD');
  Connection.Params.Append('HostName=localhost');
  Connection.Open;

  Connection.GetTableNames (ListBox1.Items, False);

  Connection.Free;
end;


Ovu proceduru sam stavio na TButton.OnClick i opet mi izbaci istu gresku. "dbExpress Error:[0x0005]: Operation Not Supported."

Pokusavao sam i sa rucnim upisivanjem imena tabele ali kod mene izgleda jednostavno da ne radi.

Eto ako vam treba jos nekih podataka recite, pokusat cu sve.

delalt ako ti nije problem da mi posaljes na mail tu bazu koju si napravio i taj projekt u Delphiju da probam hoce li raditi kod mene, mozda ipak ja radim nesto pogresno. Ako ti nije problem probaj zapakovati sve sto mislis da mi je potrebno svi .dll-ovi koji mi trebaju, sve...
[ delalt @ 03.06.2006. 19:13 ] @
Mislim da sam našao problem. Onaj drajver stvarno ne radi sa TSQLTable komponentom.
U stvari možda i radi ako bi se nešto kodom podešavalo, nisam probao.
Ja sam u stvari stalno koristio kombinaciju:
Citat:
delalt:
Nisam duže testirao, ali sa jednostavnom tabelom koju sam na brzinu sklepao, sve radi normalno.
Dodao sam i povezao i SQLQuery, Provider, ClientDataSet, DataSource i
još DBGrid na Formu i probao upis, izmjenu i brisanje i nisam imao nikakvih
problema.

Znači, izbaci TSQLTable a ubaci TSQLQuery, postavi GetMetadata na False i za SQL ukucaj:
Code:
SELECT * FROM PROBA1;

Ništa i ne gubiš, komponenta TSQLQuery je samo fleksibilnija, a obije su jednosmjerne,
tako da moraš da koristiš i TClientDataSet.
Za TSQLConnection možeš i statički a i kodom da podesiš:
Code:
SQLConnection1.Connected := False;

SQLConnection1.ConnectionName := '';
SQLConnection1.DriverName := 'dbxmysql';
SQLConnection1.GetDriverFunc := 'getSQLDriverMYSQL50';
SQLConnection1.LibraryName := 'dbxopenmysql50.dll';
SQLConnection1.VendorLib := 'libmysql.dll';
SQLConnection1.Params.Values['Database'] := 'Proba';
SQLConnection1.Params.Values['User_Name'] := 'MOJ_USER';
SQLConnection1.Params.Values['Password'] := 'MOJ_PASS';
SQLConnection1.Params.Values['HostName'] := 'localhost';

SQLConnection1.Connected := True;

Probaj još da dbxopenmysql50.dll, libmysql.dll (od verzije MySQL-a koju koristiš), a i midas.dll
kopiraš u folder gdje ti je i tvoj exe fajl, za svaki slučaj.
Ako ti treba baš TSQLTable potraži nekakav drugi drajver, ima ih još...
[ mmijic @ 05.06.2006. 10:14 ] @
Probao sam sa Queryem kompajlirao ga nije mi izbacio nikakvu gresku, ali nisam uspio natjerati TClientDataSet i nisam uspio TDBGrid povezati s tabelom. Ne bi me cudilo da ja negdje grijesim. Ajde ako ti nije problem molim te da napravis neki jednostavan projekt u Delphiju pa da mi ga posaljes, da vidim konkrentno na primjeru sta mi je ciniti.
naravno ako ne trazim puno.
[ delalt @ 05.06.2006. 12:59 ] @
Ako već nisi ranije koristio ClientDataSet, onda ćeš sigurno imati još
pitanja, evo jedan link sa kratkim tutorijalima vezanim za dbExpress.
http://delphi.about.com/od/database/a/dbexpressguide.htm
Tamo imaš i slikovito prikazane i objašnjene veze među komponentama.
Neki od ovih tutorijala su vezani za starije verzije Delphija, ali ih obavezno pogledaj.

Ako si TSQLConnection i TSQLQuery povezao i natjerao da rade, onda
tu nemoj ništa više da mijenjaš. Sve ove druge komponente se kaskadno
vezuju jedna na drugu i čim ih povežeš to bi trebalo da radi.

Znači:
TSQLConnection <- TSQLQuery <- TDatasetProvider <- TClientDataSet <- TDataSource <- TDBGrid

i još samo:
Code:
ClientDataSet1.Active := True;