IT NEWS PC REVUE PC FORUM FreeBSDInternet time: @363
Obsah fóra
Pravidlá  •  Kontakt  •  Prihlásenie  •  Registrácia

Mechanické zabezpečenie

Trezory, bezp. dvere, zámky, fólie. Kompletné mechanické zabezpečenie. www.eurosafe.sk

Westend Tower

Kancelárie pre malých i veľkých - prenájom už od 9,50 €/m2/mesačne. www.westendtower.sk

Súťaž o LEGO® duplo®

Vyhrajte prekvapenie pre svoje detičky! LEGO duplo 2 krát deňne do konca mesiaca www.duplo.lego.com

Televízia Magio

Bude vaša len za 0,33€ denne a navyše prvých 100 dní máte úplne zadarmo! Telekom.sk

realitná kancelária - GRAFT

Bratislava - predaj - prenájom: byty, domy, pozemky, chaty, záhrady ... www.graft.sk

ZeosLib - ako na to

Zaslať odpoveď
AutorSpráva
Manny
Užívateľ
Užívateľ

Založený: 01.10.2009
Príspevky: 73
Vek: 22

PríspevokZaslal: Po 20.09.10 9:57Odpovedať s citátomNávrat hore

Zdravím,

vo svojom projekte používam komponenty ZeosLib, ktoré sú určené pre prácu s MySQL. V tomto balíku pracujem s komponentou Connection a Query. V praxi to vyzerá asi nasledovne:

Kód pre pripojenie k MySQL cez komponentu Connection:
kód:
    Connection.HostName := IniConfig.ReadString('mysql', 'host', '127.0.0.1');
Connection.Database := 'db';
Connection.Catalog := 'tabulka';

Connection.User := 'user';
Connection.Password := 'heslo';
Connection.Connect; 


Ak chcem vykonať nejaký príkaz s MySQL, tak použijem komponentu Query:
kód:
Query.SQL.Text := 'SELECT * FROM users;';
Query.Open;
while not Query.EOF do begin
  ShowMessage(Query.FieldByName('UsrName').AsString);
end;


Toto samozrejme funguje výborne. Problém však nastáva, keď potrebujem vykonať viac príkazov v jeden moment cez jednu komponentu Query. Ako najlepší príklad bude, keď chcem použiť Query v Timeri a potom kdekoľvek inde v aplikácii. Ak by došlo k "stretnutiu", vyskočí výnimka.

Riešenie vidím vo vytváraní inštancií Query, teda raz sa vytvorí (programovo) Connection a na ten sa budú už len linkovať vždy nové Query používané v projekte a po ich využití sa z pamäte uvoľnia. No a toto neviem ako spraviť. Možno cez triedy?
Zobraziť informácie o autoroviOdoslať súkromnú správuICQSkypeFacebook
coldak
Skúsený užívateľ
Skúsený užívateľ

Založený: 29.10.2008
Príspevky: 936

PríspevokZaslal: Po 20.09.10 10:33Odpovedať s citátomNávrat hore

tento balik som este nepouzival ale to by nemal byt problem
kód:
Query2 := TZQuery.Create(Self);
Query2.Connection := Connection; // Connection je to ktore uz raz mas vytvorene
Query2.SQL.text ='...';
...
Zobraziť informácie o autoroviOdoslať súkromnú správu
Manny
Užívateľ
Užívateľ

Založený: 01.10.2009
Príspevky: 73
Vek: 22

PríspevokZaslal: Po 20.09.10 14:32Odpovedať s citátomNávrat hore

No toto by mohlo fungovať! Keď to už nebudem potrebovať, tak to uvoľním z pamäte cez Query2.Free? A ešte jedna otázka, treba nejak deklarovať Query2 alebo sa to vykoná už v riadku:
kód:
Query2 := TZQuery.Create(Self);

_________________
Bad news: Time flies. God news: You are the pilot!
Zobraziť informácie o autoroviOdoslať súkromnú správuICQSkypeFacebook
coldak
Skúsený užívateľ
Skúsený užívateľ

Založený: 29.10.2008
Príspevky: 936

PríspevokZaslal: Po 20.09.10 14:54Odpovedať s citátomNávrat hore

ano treba declarovat
kód:

procedurec xy()
var Query2 : TZQuery;
begin
  Query2 := TZQuery.create(self);
  ....
  Query2.Free();
end;
Zobraziť informácie o autoroviOdoslať súkromnú správu
Manny
Užívateľ
Užívateľ

Založený: 01.10.2009
Príspevky: 73
Vek: 22

PríspevokZaslal: Po 20.09.10 15:00Odpovedať s citátomNávrat hore

Díky moc, coldak, funguje to výborne
Zobraziť informácie o autoroviOdoslať súkromnú správuICQSkypeFacebook
Manny
Užívateľ
Užívateľ

Založený: 01.10.2009
Príspevky: 73
Vek: 22

PríspevokZaslal: Ut 21.09.10 9:00Odpovedať s citátomNávrat hore

Ešte mám takú otázku. Môj aktuálny kód pre select je napr.:
kód:

var
  Q: TZQuery;
begin
  Q := TZQuery.Create(Self);
  Q.Connection := Connection;
  Q.SQL.text ='SELECT ...';
  Q.Open;
  while not Q.EOF do begin
    ShowMessage(Q.FieldByName('stlpec').AsString);
  end;
  Q.Close;
  Q.Free;
end;


Dá sa to ešte nejak zjednodušiť?
Zobraziť informácie o autoroviOdoslať súkromnú správuICQSkypeFacebook
coldak
Skúsený užívateľ
Skúsený užívateľ

Založený: 29.10.2008
Príspevky: 936

PríspevokZaslal: Ut 21.09.10 15:35Odpovedať s citátomNávrat hore

no zjednodusit ani nie, skor by som povedal ze by sa ti tam hodilo par testov na osetrenie, napr najprv otestovat ci je connection aj pripojena? pracu s Q by som obalil do bloku try..finaly vo finaly by som dal close a free objektu Q aby doslo k uvolneniu objektu aj v pripade nejakej exception.
Zobraziť informácie o autoroviOdoslať súkromnú správu
Manny
Užívateľ
Užívateľ

Založený: 01.10.2009
Príspevky: 73
Vek: 22

PríspevokZaslal: Pi 24.09.10 8:52Odpovedať s citátomNávrat hore

Ešte sa tu vyskytuje jeden problém - tá komponenta TZQuery (teda jej instancie) sú vytvorené cez "Self", takže sa viažu častokrát na formulár. No a tu zase môže vzniknúť problém prekrytia, lebo ak budem mať spustený Timer1 na Form1 a bude tam tlačidlo, ktoré bude pracovať s názvom rovnakej premennej, tak môže dôjsť k stretu. Nedá sa tá instancia nejak vytvárať nezávisle na názve?
Zobraziť informácie o autoroviOdoslať súkromnú správuICQSkypeFacebook
coldak
Skúsený užívateľ
Skúsený užívateľ

Založený: 29.10.2008
Príspevky: 936

PríspevokZaslal: Pi 24.09.10 9:30Odpovedať s citátomNávrat hore

jednak by sa mala dat vytvarat instancia miesto self pouzi nil.
tiez mozes vytvorit anonymnu instanciu
kód:

begin
  with TZQuery.Create(nil) do begin
    Connection := ConnectionXX;//pozor zmen meno instancie TZConnection alebo sa skus na nu odkazovat cez self.Connection 
    SQL.text ='SELECT ...';
    Open;
    while not EOF do begin
      ShowMessage(FieldByName('stlpec').AsString);
    end;
    Close;
    Free;
  end;
end;
Zobraziť informácie o autoroviOdoslať súkromnú správu
Zobraziť príspevky z predchádzajúcich:    
Zaslať odpoveď
Nemôžete pridávať nové témy do tohto fóra.
Nemôžete odpovedať na témy v tomto fóre.
Nemôžete upravovať svoje príspevky v tomto fóre.
Nemôžete mazať svoje príspevky v tomto fóre.
Nemôžete hlasovať v tomto fóre.

Powered by phpBB 2.x.x © 2005 - 2012 PCforum, webhosting by WebSupport, edited by JanoF

SEO - optimalizácia pre vyhľadávače

Freebsd