Thread View: pl.comp.lang.delphi.bazy-danych
13 messages
13 total messages
Started by Ciekawy
Tue, 27 May 2014 15:55
odwołania do obiektu - podstawy
Author: Ciekawy
Date: Tue, 27 May 2014 15:55
Date: Tue, 27 May 2014 15:55
27 lines
2073 bytes
2073 bytes
Witam serdecznie Szczerze rzadko korzystam z interfaców, i list generycznych, więc może pytanie wyda się cholernie naiwne. Ale mam takie zagadnienie. Połączenie z inną bazą danych: fexternalConectionList:TDictionary<string,TRRDatabase>; TRRDatabase to kontener zawierający klasę dostępu do danych, jest fajnie bo jak jakiś proces w bazie danych chce dostępu do konkretnego połącznia z inną bazą (TRRDatabase) to sprawdza na liście czy już takie jest, jak nie ma to go tworzy. Tylko problem mój polega na prostym zliczaniu czy dla danej connection(TRRDatabase) coś w programie potrzebuje jeszcze połączenia czy nie. Teoretycznie sprawę powinny mi załatwić interfacy. Tylko nie mam zielonego pojęcia jak to implementować. Czyli jak zamykam ostantie połączenie związane z TRRDatabase to obiekt połączania jest niszczony. Tak mi się coś zdaje że to abecadło, a ja przespałem lekcje, więc proszę mądrzejszych kolegów o ściągę. Pozdrawiam Ciekawy --- Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna. http://www.avast.com
Re: odwołania do obiektu - podstawy
Author: Arivald
Date: Tue, 27 May 2014 16:34
Date: Tue, 27 May 2014 16:34
56 lines
3378 bytes
3378 bytes
W dniu 2014-05-27 17:55, Ciekawy pisze: > Witam serdecznie > > Szczerze rzadko korzystam z interfaców, i list generycznych, więc może > pytanie wyda się cholernie naiwne. > Ale mam takie zagadnienie. > Połączenie z inną bazą danych: > > fexternalConectionList:TDictionary<string,TRRDatabase>; > > TRRDatabase to kontener zawierający klasę dostępu do danych, jest fajnie > bo jak jakiś proces w bazie danych chce dostępu do konkretnego połącznia > z inną bazą (TRRDatabase) to sprawdza na liście czy już takie jest, jak > nie ma to go tworzy. > Tylko problem mój polega na prostym zliczaniu czy dla danej > connection(TRRDatabase) > coś w programie potrzebuje jeszcze połączenia czy nie. > Teoretycznie sprawę powinny mi załatwić interfacy. Tylko nie mam > zielonego pojęcia jak to implementować. > Czyli jak zamykam ostantie połączenie związane z TRRDatabase to obiekt > połączania jest niszczony. Tak mi się coś zdaje że to abecadło, a ja > przespałem lekcje, więc proszę mądrzejszych kolegów o ściągę. > Dobrze kombinujesz, ale problem jest bardziej złożony. "TRRDatabase" to Twoja klasa? Tzn nie będzie problemu zmienić ją całkiem w interfejs? Jeśi tak, to zamiast "jak jakiś proces w bazie danych chce dostępu do konkretnego połączenia z inną bazą (TRRDatabase) to sprawdza na liście czy już takie jest, jak nie ma to go tworzy" zrób sobie fabrykę/metodę dostępową, w stylu "wołam metodę i zwraca mi obiekt", a wewnątrz tej metody robisz logikę sprawdzania czy już istnieje, etc. Po drugie do TRRDatabase dorabiasz interfejs IRRDatabase, ze wszystkimi publicznymi metodami. Potem oczywiście zmieniasz cały kod który używał TRRDatabase żeby używał interfejsu IRRDatabase. Po trzecie zamieniasz TDictionary<string,TRRDatabase>; na odpowiednik mogacy trzymać interfejsy jako wartości (nie wiem czy jest, czy może TDictionary da radę?). Po czwarte, zaraz po utworzeniu TRRDatabase tworzysz referencję interfejsową do niej, i zapominasz referencją obiektową. Mieszanie obu sposobów dostępu to przepis na katastrofę. Ale zamiast interfejsów lepiej może być liczyć referencje samemu, w obiektach które używają TRRDatabase. Tzn po dodaniu referencji do TRRDatabase zwiększają licznik w TRRDatabase, przed oddaniem referencji zmniejszają. -- Arivald
Re: odwołania do obiektu - podstawy
Author: wloochacz
Date: Tue, 27 May 2014 17:53
Date: Tue, 27 May 2014 17:53
28 lines
2367 bytes
2367 bytes
W dniu 2014-05-27 17:55, Ciekawy pisze: > Witam serdecznie > > Szczerze rzadko korzystam z interfaców, i list generycznych, więc może > pytanie wyda się cholernie naiwne. > Ale mam takie zagadnienie. > Połączenie z inną bazą danych: > > fexternalConectionList:TDictionary<string,TRRDatabase>; > > TRRDatabase to kontener zawierający klasę dostępu do danych, jest fajnie > bo jak jakiś proces w bazie danych chce dostępu do konkretnego połącznia > z inną bazą (TRRDatabase) to sprawdza na liście czy już takie jest, jak > nie ma to go tworzy. > Tylko problem mój polega na prostym zliczaniu czy dla danej > connection(TRRDatabase) > coś w programie potrzebuje jeszcze połączenia czy nie. > Teoretycznie sprawę powinny mi załatwić interfacy. Tylko nie mam > zielonego pojęcia jak to implementować. > Czyli jak zamykam ostantie połączenie związane z TRRDatabase to obiekt > połączania jest niszczony. Tak mi się coś zdaje że to abecadło, a ja > przespałem lekcje, więc proszę mądrzejszych kolegów o ściągę. Jakie komponenty? Właśnie opisałeś connection pooling, niektóre komponenty (tak właśnie, np. AnyDAC/FireDAC) potrafią zarządzać pulą połączeń w sposób automatyczny. -- wloochacz
Re: odwołania do obiektu - podstawy
Author: Ciekawy
Date: Tue, 27 May 2014 18:22
Date: Tue, 27 May 2014 18:22
13 lines
1522 bytes
1522 bytes
W dniu 2014-05-27 18:34, Arivald pisze: > Po trzecie zamieniasz TDictionary<string,TRRDatabase>; na odpowiednik > mogacy trzymać interfejsy jako wartości (nie wiem czy jest, czy może > TDictionary da radę?). No właśnie ja też nie specjalnie.. posprawdzam. Tylko pytam o gotowca, jak każdy nieuk. Pozdrawiam Ciekawy --- Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna. http://www.avast.com
Re: odwołania do obiektu - podstawy
Author: R.e.m.e.K
Date: Tue, 27 May 2014 18:48
Date: Tue, 27 May 2014 18:48
16 lines
1657 bytes
1657 bytes
Dnia Tue, 27 May 2014 20:22:43 +0200, Ciekawy napisał(a): >> Po trzecie zamieniasz TDictionary<string,TRRDatabase>; na odpowiednik >> mogacy trzymać interfejsy jako wartości (nie wiem czy jest, czy może >> TDictionary da radę?). > > No właśnie ja też nie specjalnie.. posprawdzam. Tylko pytam o gotowca, > jak każdy nieuk. > A ja wiem, da rade. -- pozdro R.e.m.e.K
Re: odwołania do obiektu - podstawy
Author: Ciekawy
Date: Tue, 27 May 2014 18:57
Date: Tue, 27 May 2014 18:57
16 lines
1752 bytes
1752 bytes
W dniu 2014-05-27 19:53, wloochacz pisze: > Właśnie opisałeś connection pooling, niektóre komponenty (tak właśnie, > np. AnyDAC/FireDAC) potrafią zarządzać pulą połączeń w sposób automatyczny. > No tak, tylko ja niektóre sprawy robię trochę "chałupniczo", bo też mi cały potencjał niektórych płatnych komponentów nie jest potrzebny. A w tym przypadku, tylko ta jedna sprawa pisanie kodu zliczania połączeń Vs techniki interfejsowe, które rzadko używam i czuję się niepewnie. Pozdrawiam Ciekawy --- Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna. http://www.avast.com
Re: odwołania do obiektu - podstawy
Author: Ciekawy
Date: Tue, 27 May 2014 18:59
Date: Tue, 27 May 2014 18:59
11 lines
1394 bytes
1394 bytes
W dniu 2014-05-27 20:48, R.e.m.e.K pisze: > > A ja wiem, da rade. To nie bądź świnqa i podrzuć coś --- Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna. http://www.avast.com
Re: odwołania do obiektu - podstawy
Author: R.e.m.e.K
Date: Tue, 27 May 2014 19:25
Date: Tue, 27 May 2014 19:25
17 lines
1671 bytes
1671 bytes
Dnia Tue, 27 May 2014 20:59:14 +0200, Ciekawy napisał(a): >> A ja wiem, da rade. > > To nie bądź świnqa i podrzuć coś TDictionary<string,IRRDatabase> > --- > Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna. > http://www.avast.com Usuniesz tego smiecia? -- pozdro R.e.m.e.K
Re: odwołania do obiektu - podstawy
Author: Ciekawy
Date: Tue, 27 May 2014 19:29
Date: Tue, 27 May 2014 19:29
16 lines
1626 bytes
1626 bytes
W dniu 2014-05-27 21:25, R.e.m.e.K pisze: > Dnia Tue, 27 May 2014 20:59:14 +0200, Ciekawy napisał(a): > >>> A ja wiem, da rade. >> >> To nie bądź świnqa i podrzuć coś > > TDictionary<string,IRRDatabase> > >> --- >> Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna. >> http://www.avast.com > > Usuniesz tego smiecia? > Jasne
Re: odwołania do obiektu - podstawy
Author: Ciekawy
Date: Tue, 27 May 2014 19:29
Date: Tue, 27 May 2014 19:29
16 lines
1626 bytes
1626 bytes
W dniu 2014-05-27 21:25, R.e.m.e.K pisze: > Dnia Tue, 27 May 2014 20:59:14 +0200, Ciekawy napisał(a): > >>> A ja wiem, da rade. >> >> To nie bądź świnqa i podrzuć coś > > TDictionary<string,IRRDatabase> > >> --- >> Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna. >> http://www.avast.com > > Usuniesz tego smiecia? > jasne
Re: odwołania do obiektu - podstawy
Author: Piotr Rezmer
Date: Tue, 27 May 2014 20:19
Date: Tue, 27 May 2014 20:19
19 lines
1711 bytes
1711 bytes
Ciekawy pisze: > A w tym przypadku, tylko ta jedna sprawa pisanie kodu zliczania połączeń > Vs techniki interfejsowe, które rzadko używam i czuję się niepewnie. Pamiętaj że jeśli zdecydujesz się na zliczanie referencji to nie usuwaj obiektu połączenia tylko zwróć go do puli wolnych połączeń. Ja zrobiłem sobie taką "nakładkę" na ADO i mam tam klasę pomocniczą z metodami GetADODataset() która zwraca mi IADODataSetInterface() a ten interfejs ma metodę GetDataSet(). W ten sposób gdy kończy się kod w którym jest wywołana metoda GetADODataset() wykonywana jest metoda Release() i obiekt TADOConnection wraca do puli. -- pozdrawiam Piotr XLR250&bmw_f650_dakar
Re: odwołania do obiektu - podstawy
Author: wloochacz
Date: Wed, 28 May 2014 08:58
Date: Wed, 28 May 2014 08:58
18 lines
1940 bytes
1940 bytes
W dniu 2014-05-27 20:57, Ciekawy pisze: > W dniu 2014-05-27 19:53, wloochacz pisze: > >> Właśnie opisałeś connection pooling, niektóre komponenty (tak właśnie, >> np. AnyDAC/FireDAC) potrafią zarządzać pulą połączeń w sposób >> automatyczny. >> > No tak, tylko ja niektóre sprawy robię trochę "chałupniczo", bo też mi > cały potencjał niektórych płatnych komponentów nie jest potrzebny. > > A w tym przypadku, tylko ta jedna sprawa pisanie kodu zliczania połączeń > Vs techniki interfejsowe, które rzadko używam i czuję się niepewnie. Moim zdaniem to mylisz się totalnie, jeśli Twoja appka choć trochę przypomina typowe aplikacje Delphi. Pytałem jakie komponenty, a nie o Twoje obawy... -- wloochacz
Re: odwołania do obiektu - podstawy
Author: Ciekawy
Date: Wed, 28 May 2014 09:45
Date: Wed, 28 May 2014 09:45
18 lines
2080 bytes
2080 bytes
>> A w tym przypadku, tylko ta jedna sprawa pisanie kodu zliczania połączeń >> Vs techniki interfejsowe, które rzadko używam i czuję się niepewnie. > Moim zdaniem to mylisz się totalnie, jeśli Twoja appka choć trochę > przypomina typowe aplikacje Delphi. > Pytałem jakie komponenty, a nie o Twoje obawy... > Jasne w tym przypadku dla dostępu do danych używam ZEOSa, TRRDatabase to komponent opakowujący Zconnection. Ale sprawę załatwiłem najprościej jak potrafiłem. Czyli fexternalConnList:TDictionary<string, TRRDatabase> program sprawdza czy połączenie już zostało zdefiniowane, jeśli nie tworzy TRRDatabase i doje do słownika. Jeśli połączenie jest, zwiększa licznik połączń w TRRDatabase fconnCount:integer; w przypadku odłączania się od połczenia program zmniejsza licznik połączeń. Jeśli jest równy 0 zwalnia TRRDatabase (usuwa pozycję ze słownika). Pozdrawiam Ciekawy
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads