Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

dbExpress i MySQL

[es] :: Pascal / Delphi / Kylix :: dbExpress i MySQL

[ Pregleda: 3766 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

rms
Bgd

Član broj: 41483
Poruke: 65
*.vdial.verat.net.



Profil

icon dbExpress i MySQL08.07.2005. u 14:41 - pre 228 meseci
Ćao,

Pokušavam da u Delphiju 6 napravim jednostavan program koji pomoću dbExpress tehnologije prikazuje u gridu podatke iz tabele sa MySQL servera (ver. 3.23.58).
Iskopirao sam neophodni libmysql.dll u windows\system, podesio i aktivirao konekciju, ali ne uspevam da podesim SQLDataSet. Ako Command Type podesim na ctTable u drop-down listi Commnad Texta se ne pojavljuje ni jedna tabela iz selektovane baze a ako izaberem ctQuery i upišem upit onda dobijem grešku tipa access violation at address X in module 'dbexpmys.dll'...

Da li neko iz opisa prepoznaje situaciju i način na koji se može prevazići?
Unapred hvala.
 
Odgovor na temu

Toyo

Član broj: 45193
Poruke: 227
*.kovnet.co.yu.



+1 Profil

icon Re: dbExpress i MySQL08.07.2005. u 15:48 - pre 228 meseci
Probaj http://delphi.about.com/gi/dyn...om%2Fsamples%2F1540%2F1540.htm

[Ovu poruku je menjao Toyo dana 08.07.2005. u 16:48 GMT+1]
 
Odgovor na temu

rms
Bgd

Član broj: 41483
Poruke: 65
*.vdial.verat.net.



Profil

icon Re: dbExpress i MySQL08.07.2005. u 20:57 - pre 228 meseci
Hvala Toyo, članak zaista sadrži odgovor na ovo pitanje; tj. pošto sam skinuo i upotrebio dbexpmysql.dll sa neta (nema ga u instalaciji Delphija 6) program je korektno proradio.
 
Odgovor na temu

rms
Bgd

Član broj: 41483
Poruke: 65
*.vdial.verat.net.



Profil

icon Re: dbExpress i MySQL09.07.2005. u 13:26 - pre 228 meseci
Imam još samo jedno pitanje u labavijoj vezi sa prethodnim ali se odnosi na dbExpress i MySQL:

Dodao sam DBNavigator kontrolu. Kad pokušam da dodam novi slog iskoči exception da polje id (koje je u MySQL tabeli definisano kao auto increment) ne sme biti prazno. Pokušavao sam da taj field u SQLClientDataSetu redefinišem kao AutoInc ali bez ikakvog efekta (sa istom greškom).

Šta u ovoj situaciji?
Unapred hvala.
 
Odgovor na temu

dekys
Dejan Stevanović

Član broj: 464
Poruke: 104



+1 Profil

icon Re: dbExpress i MySQL09.07.2005. u 16:58 - pre 228 meseci
Jednostavno u polje ID ne upisuj nista, odnosno u upitu ili tabeli nemoj da ga tretiras.
 
Odgovor na temu

rms
Bgd

Član broj: 41483
Poruke: 65
*.vdial.verat.net.



Profil

icon Re: dbExpress i MySQL10.07.2005. u 10:59 - pre 228 meseci
Pa, to sam i ja pomislio po nekoj analogiji sa PHP-om. Na žalost Dekys, čak i kad to polje izbacim iz FieldDefs SQLDataSeta dobijam istu grešku!

[Ovu poruku je menjao rms dana 10.07.2005. u 12:00 GMT+1]
 
Odgovor na temu

burner
Dragiša Rakić
BG

Član broj: 898
Poruke: 150
*.neobee.net.



+1 Profil

icon Re: dbExpress i MySQL10.07.2005. u 12:33 - pre 228 meseci
DBExpress tehnologija uopšte nije loša (naprotiv), samo što su ljudi ostavili neke stvari malo nedorađene. Jedna od tih stvari je i insert/updtate problem AutoInc Fielda, koje radi korektno samo kad je ciljni RDBMS Interbase/firebird. Više o tome ima na Borland Developers Network , a ja obično rešavam problem na sledeći način.
1. Postavi se sledeći "niz" komponenti: TSQLDataSet (dbExpress paleta) -> TDataSetProvider (DataAcess paleta) -> TClietDataSet (DataAcess komponenta) -> DataSource.

2. Kao "Command Text" TSQLDataSeta se napiše text upita;

3. U "BeforeUpdateRecord" eventu TDataSetProvidera se upiše sledeći kod:


....
var i:integer;
nValue:variant;
tmpStr:string;
actiontype:integer;
Kveri: TSQLQuery;
SQLInsert, SQLUpdate, SQLDelete: String;
begin

Kveri:=TSQLQuery.Create(Self);

With Kveri do
begin
SQLConnection:=SQLConn;

case updatekind of
ukinsert:
begin
SQL.Clear;
SQL.Text:=SQLinsert;
actiontype:=0;
end; // insert
ukmodify:
begin
SQL.Clear;
SQL.Text:=SQLupdate;
actiontype:=0;
end; // update

ukdelete:
begin
SQL.Clear;
SQL.Text:=SQLdelete;
actiontype:=1;
end; // delete
end;

case actiontype of
0: begin
for i:=0 to deltads.FieldCount-1 do
begin
nvalue:=deltads.Fields.NewValue;
tmpstr:=deltads.Fields.FieldName;
if (assigned(Params.FindParam(tmpstr))) then
begin
Params.ParamValues[tmpstr]:=deltads.Fields.Value;
if VarIsEmpty(nvalue) then
Params.ParamValues[tmpstr]:=deltads.Fields.OldValue
else
Params.ParamValues[tmpstr]:=nvalue;
end; // if
end; // for
end; //case 0

1: begin
for i:=0 to deltads.FieldCount-1 do
begin
tmpstr:=deltads.Fields.FieldName;
if (assigned(Params.FindParam(tmpstr))) then
Params.ParamValues[tmpstr]:=deltads.Fields.Value;
end;// for
end; //case 1

end; // case

ExecSQL(false);
applied:=True;

end; // with Kveri

Kveri.Free;
end;

SQLInsert, SQLUpdate & SQLDelete su upiti za operacije Ubacivanja, menjanja odnosno brisanja podataka iz odgovarajuće tabele, i njih morate definisati samui u slučaju da koristite ovaj pristup, jer DbExpress "ne ume" sam da generiše ove sql upite kad su autinc polja u pitanju.

Ova zavrzlama važi u slučaju da vam je autoinc polje iz baze podataka potrebno iz nekih razloga u vašoj aplikaciji. Ukoliko nije, postupak je mnogo lakši :)
Kao CommandText property TSQLDataseta navedete u select upitu sva polja iz tabele SEM AUTOINC polja (npr. umesto select * from Zaposleni, treba select Ime, Prezime,...... from Zaposleni, ukoliko recimo tabela Zaposleni ima AutoInc polje IDZaposlenog), i to je to. U tom slučaju nema potrebe za modifikacijom BeforeUpdateRecord eventa TDatasetProvider komponente.

BTW, ovih dana bih trebao da završim DBExpress - HOWTO (Čim prođe EXIT i sa gajbe mi se raziđe hipi komuna :)), tako da to mogu da postujem ovde ukoliko ima zainteresovanih.
 
Odgovor na temu

rms
Bgd

Član broj: 41483
Poruke: 65
213.244.197.*



Profil

icon Re: dbExpress i MySQL10.07.2005. u 15:10 - pre 228 meseci
Citat:
burner:
BTW, ovih dana bih trebao da završim DBExpress - HOWTO (Čim prođe EXIT i sa gajbe mi se raziđe hipi komuna :)), tako da to mogu da postujem ovde ukoliko ima zainteresovanih.

Please!
 
Odgovor na temu

rms
Bgd

Član broj: 41483
Poruke: 65
*.vdial.verat.net.



Profil

icon Re: dbExpress i MySQL13.07.2005. u 16:33 - pre 228 meseci
Ćao,

U vezi gore pomenutog problema sa insertom i auto increment poljem u MySQL tabeli...
Pošto se prilikom inserta MySQL server žali da neće prazno auto increment polje, rekoh 'ajde da mu poturim 0 i to radi!

Evo šta treba:
Code:

procedure TForm1.SQLClientDataSet1AfterPost(DataSet: TDataSet);
begin
  SQLClientDataSet1.ApplyUpdates(-1);
  SQLClientDataSet1.Refresh;
end;

procedure TForm1.SQLClientDataSet1AfterInsert(DataSet: TDataSet);
begin
  SQLClientDataSet1.FieldByName('id').Value := 0;
end;

end.

 
Odgovor na temu

burner
Dragiša Rakić
BG

Član broj: 898
Poruke: 150
*.neobee.net.



+1 Profil

icon Re: dbExpress i MySQL13.07.2005. u 23:26 - pre 228 meseci
Da... to može da bude rešenje, ali ne u opštem slučaju:( Konkretno, kod MSSQL servera ovo ne pali nikako. Jedna od ideja datih na BDN-u je da se unutar Data Modula i li forme koja sadrži ClientDataSet, deklariše neka integer promenljiva (inicijalna vrednost -1) koja će posle svakog AfterInsert eventa biti umanjena za -1. Probaj insert više slogova u DataSet, pa onda uradi ApplyUpdates i vidi šta se dešava. Nemam instaliran trenutno MYSQL, baš me zanima šta se dešava u višestrukom insertu :)

[Ovu poruku je menjao burner dana 14.07.2005. u 00:27 GMT+1]
 
Odgovor na temu

rms
Bgd

Član broj: 41483
Poruke: 65
*.vdial.verat.net.



Profil

icon Re: dbExpress i MySQL17.07.2005. u 08:53 - pre 228 meseci
@burner

Citat:

Nemam instaliran trenutno MYSQL, baš me zanima šta se dešava u višestrukom insertu :)


Ćao,

Radi bez problema uz obavezan poziv Refresh metode. Naravno, svaka baza je priča za sebe.

[Ovu poruku je menjao rms dana 17.07.2005. u 09:57 GMT+1]
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: dbExpress i MySQL

[ Pregleda: 3766 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.