| | |
| Stránka: 1 z 1
| [ Príspevkov: 9 ] | |
Autor | Správa |
---|
Registrovaný: 01.10.09 Prihlásený: 12.03.17 Príspevky: 86 Témy: 18 | Napísal Manny: 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?
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 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 ='...'; ...
|
|
Registrovaný: 01.10.09 Prihlásený: 12.03.17 Príspevky: 86 Témy: 18 | Napísal autor témy Manny: 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! |
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 20.09.2010 14:54 | |
|
ano treba declarovat
Kód: procedurec xy() var Query2 : TZQuery; begin Query2 := TZQuery.create(self); .... Query2.Free(); end;
|
|
Registrovaný: 01.10.09 Prihlásený: 12.03.17 Príspevky: 86 Témy: 18 | Napísal autor témy Manny: 20.09.2010 15:00 | |
|
Díky moc, coldak, funguje to výborne
|
|
Registrovaný: 01.10.09 Prihlásený: 12.03.17 Príspevky: 86 Témy: 18 | Napísal autor témy Manny: 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ť?
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 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.
|
|
Registrovaný: 01.10.09 Prihlásený: 12.03.17 Príspevky: 86 Témy: 18 | Napísal autor témy Manny: 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?
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 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;
|
|
| Stránka: 1 z 1
| [ Príspevkov: 9 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| Ako si nastavim router/modem/wifi? Citaj ako prve! v Siete | 3 | 2865 | 17.07.2015 13:52 Tonko340 | | ako kopirovat text z pdf kde je ako obrazok v Ostatné programy | 1 | 689 | 19.10.2014 20:18 liqua1 | | ako nainstalovat javu do pc s pristupom ako uzivatel v Assembler, C, C++, Pascal, Java | 1 | 832 | 18.03.2008 8:40 redw | | samsung nenajde ako bootovatelne mediun, inak ide ako ma v Optické zariadenia | 0 | 1322 | 27.03.2009 21:53 ejo | | Samsung S8300 ultra touch ako navigacia. ako na to? v Mobilné zariadenia | 6 | 1482 | 26.11.2009 22:25 Jaro | | Ako inštalovať módy ho PHPbb a ako na reklamu !!! v Redakčné systémy | 8 | 3108 | 30.03.2008 15:39 MarkoSVK | | WEB stranka.ako na nu a ako s nou v Ostatné | 13 | 1415 | 12.10.2007 21:54 Tominator | | ako po preinstalovani mat parametre ako minuly uzivatel v Operačné systémy Microsoft | 1 | 460 | 20.08.2008 8:42 shiro | | Ako nastaviť v notebooku výkonnejšiu grafiku ako primárnu. v ATI/AMD grafické karty | 0 | 841 | 12.12.2015 21:10 krakenis | | ČÍ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 | | Ako je možné že maloobchody majú často lepšie ceny ako [ Choď na stránku: 1, 2 ] v Obchody, reklamácie a právo | 36 | 4398 | 20.11.2009 15:49 Googler1 | | Návod: Ako si spravit doma zmrzlinu original ako z obchodu? v Jedlo, pitie a varenie | 7 | 4085 | 22.08.2009 15:55 david3504 | | 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 | | Ako napalit Windows 8 ako bootovatelne DVD [ Choď na stránku: 1, 2 ] v Operačné systémy Microsoft | 32 | 4611 | 04.11.2012 14:09 Ravokman | | Ako zistim ci je trieda ako singleton? v PHP, ASP | 3 | 731 | 20.07.2011 8:30 Ando | | Ako nastaviť video ako pozadie pracovnej plochy? v Operačné systémy Microsoft | 3 | 1521 | 31.03.2010 22:43 Googler1 |
| 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
|
|