Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 9 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
ZeosLib - ako na to

Registrovaný: 01.10.09
Prihlásený: 12.03.17
Príspevky: 86
Témy: 18
Príspevok NapísalOffline : 20.09.2010 9:57

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?


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 20.09.2010 10:33

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 ='...';
...


Offline

Užívateľ
Užívateľ
ZeosLib - ako na to

Registrovaný: 01.10.09
Prihlásený: 12.03.17
Príspevky: 86
Témy: 18
Príspevok Napísal autor témyOffline : 20.09.2010 14:32

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!
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 20.09.2010 14:54

ano treba declarovat
Kód:
procedurec xy()
var Query2 : TZQuery;
begin
  Query2 := TZQuery.create(self);
  ....
  Query2.Free();
end;


Offline

Užívateľ
Užívateľ
ZeosLib - ako na to

Registrovaný: 01.10.09
Prihlásený: 12.03.17
Príspevky: 86
Témy: 18
Príspevok Napísal autor témyOffline : 20.09.2010 15:00

Díky moc, coldak, funguje to výborne :)


Offline

Užívateľ
Užívateľ
ZeosLib - ako na to

Registrovaný: 01.10.09
Prihlásený: 12.03.17
Príspevky: 86
Témy: 18
Príspevok Napísal autor témyOffline : 21.09.2010 9:00

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ť?


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 21.09.2010 15:35

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.


Offline

Užívateľ
Užívateľ
ZeosLib - ako na to

Registrovaný: 01.10.09
Prihlásený: 12.03.17
Príspevky: 86
Témy: 18
Príspevok Napísal autor témyOffline : 24.09.2010 8:52

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?


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 24.09.2010 9:30

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;


Odpovedať na tému [ Príspevkov: 9 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Ako si nastavim router/modem/wifi? Citaj ako prve!

v Siete

3

2865

17.07.2015 13:52

Tonko340 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. ako kopirovat text z pdf kde je ako obrazok

v Ostatné programy

1

689

19.10.2014 20:18

liqua1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. ako nainstalovat javu do pc s pristupom ako uzivatel

v Assembler, C, C++, Pascal, Java

1

832

18.03.2008 8:40

redw Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. samsung nenajde ako bootovatelne mediun, inak ide ako ma

v Optické zariadenia

0

1322

27.03.2009 21:53

ejo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Samsung S8300 ultra touch ako navigacia. ako na to?

v Mobilné zariadenia

6

1482

26.11.2009 22:25

Jaro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ako inštalovať módy ho PHPbb a ako na reklamu !!!

v Redakčné systémy

8

3108

30.03.2008 15:39

MarkoSVK Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. WEB stranka.ako na nu a ako s nou

v Ostatné

13

1415

12.10.2007 21:54

Tominator Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. ako po preinstalovani mat parametre ako minuly uzivatel

v Operačné systémy Microsoft

1

460

20.08.2008 8:42

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ako nastaviť v notebooku výkonnejšiu grafiku ako primárnu.

v ATI/AMD grafické karty

0

841

12.12.2015 21:10

krakenis Zobrazenie posledných príspevkov

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie. ČÍTAJ AKO PRVÉ: Ako sa správne pýtať pri skladaní počítača?

v PC zostavy

0

14806

28.09.2007 12:38

eXistenZ Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ako je možné že maloobchody majú často lepšie ceny ako

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Obchody, reklamácie a právo

36

4398

20.11.2009 15:49

Googler1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Návod: Ako si spravit doma zmrzlinu original ako z obchodu?

v Jedlo, pitie a varenie

7

4085

22.08.2009 15:55

david3504 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. AMD Athlon 64 3800+ 2,41Ghz ako a ako vela pretaktovat

v Biosy a ladenie výkonu

8

1110

23.10.2010 21:04

reDo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ako napalit Windows 8 ako bootovatelne DVD

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Operačné systémy Microsoft

32

4611

04.11.2012 14:09

Ravokman Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ako zistim ci je trieda ako singleton?

v PHP, ASP

3

731

20.07.2011 8:30

Ando Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ako nastaviť video ako pozadie pracovnej plochy?

v Operačné systémy Microsoft

3

1521

31.03.2010 22:43

Googler1 Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra