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

TJvDBTreeView, ima i neko iskustva

[es] :: Pascal / Delphi / Kylix :: TJvDBTreeView, ima i neko iskustva

[ Pregleda: 2224 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mrkvojed

Član broj: 38336
Poruke: 43
*.dynamic.sbb.rs.



Profil

icon TJvDBTreeView, ima i neko iskustva23.05.2011. u 22:38 - pre 157 meseci
Pozdrav svima,

Nemam znacajnog iskustva sa bazama, smatrajte me za apsolutnog pocetnika kada objasnjavate (k'o u vojsci )

Trazena mi je baza koja bi se nalazila na SQL Serveru (2008 Express) i koja je organizovana kao stablo.
Redovi u bazi su relativno jednostavni, imaju samo jedno polje za ime i drugo za sadrzaj (html format).
Prakticno bi trebalo da izgleda kao neka TODO lista.
U TreeView se ucitavaju imena a sadrzaj selektovanog se ucitava u neki TWebBrowser ili TRichEdit.
TreeView bi trebalo da podrzava premestanje, brisanje, insert ...

Imam Delphi 2010 + Jedi. Jedina komponenta koja mi izgleda odgovarajuce je TJvDBTreeView.

Da je neko radio nesto slicno?

Ako jeste, trebala bi mi pomoc:
1) Kako se pravi takva "stablo" baza
2) Kako da povezem TJvDBTreeView i bazu. Koje komponente, kako setovati propertyje da se sve poveze pravilno. Baza se recimo zove "Demo".

Prevrnuo sam iternet, nasao gomilu stvari, saznao o konceptima, ali ne konkretno uputstvo kako da to povezem. Zaglavljen sam na samom pocetku.
BTW : Ako neko zna gde ima dobrih tutorijala ne temu Delphi-ja i SQL Servera, neka pastuje link, nece biti naodmet.

Unapred hvala svima.
 
Odgovor na temu

rambo
Dejan Petković
Beograd

Član broj: 6095
Poruke: 190
*.static.isp.telekom.rs.



+6 Profil

icon Re: TJvDBTreeView, ima i neko iskustva24.05.2011. u 11:42 - pre 157 meseci
Prvo, ja bih ti preporučio da uzmeš VirtualTreeView (http://www.soft-gems.net/index...k=view&id=12&Itemid=33). Definitivno najbolja komponenta za rad sa podacima u obliku stabla. Jedini problem za tebe će možda biti da naučiš kako se koristi, ali jednom kada prođeš taj deo (nije toliko teško koliko može da izgleda na prvi pogled), onda se nećeš više vraćati ni na šta drugo.

Što se tiče strukture tabele koja čuva podatke u obliku stabla, najjednostavniji model je:

ID (INT) IDENTITY,
Parent (INT),
Name (NVARCHAR),
HTMLText (TEXT)

ID je primarni ključ u tabeli, Parent pokazuje na nadređeni ID (NULL ili 0 može da znači da je top level ID, tj. nema Parenta), Name i HTMLText su tvoji podaci koje si naveo u opisu.

Probaj na osnovu ovoga malo sam da se poigraš, pa ako zaglaviš, pomoći ćemo dalje.
"There is a theory which states that if ever anybody discovers exactly what the
Universe is for and why it is here, it will instantly disappear and be replaced by
something even more bizarre and inexplicable. There is another theory which states
that this has already happened."
-- Douglas Adams
 
Odgovor na temu

mrkvojed

Član broj: 38336
Poruke: 43
*.dynamic.sbb.rs.



Profil

icon Re: TJvDBTreeView, ima i neko iskustva24.05.2011. u 15:44 - pre 157 meseci
Hvala na pomoci.

1) Dizajn baze
Napravio sam bazu sa jednom tabelom koja ovako izgleda :


Nasao sam i neke preporuke : ntext, text, and image data types will be removed in a future version of Microsoft SQL Server ovde

Nisam siguran kako se radi pravilno, gde dozvoljavam NULL, da li ID moze da pocne od nule, da li se parenti definisu ovako.
Ako neko ima jos nekih saveta slobodno neka doda.

PS : Ako mi html polje bude pokazivalo na jednu ili vise slika koje se cuvaju u bazi - pretpostavljam da bi najbolje bilo napraviti posebnu tabelu sa slikama. Ali gornja preporuka kaze da "image" tip nece biti podrzan u buducim SQL Server verzijama. Kako onda to treba koncipirati ? Mozda ih pamtiti kao VARBINARY(MAX) ?

2) VirtualTreeView
Izgleda jako dobro. Instaliracu, probati, pa cu javiti kako mi ide.
 
Odgovor na temu

rambo
Dejan Petković
Beograd

Član broj: 6095
Poruke: 190
*.dynamic.sbb.rs.



+6 Profil

icon Re: TJvDBTreeView, ima i neko iskustva25.05.2011. u 19:55 - pre 156 meseci
Izbegavaj da smeštaš slike u bazi. Umesto toga, smeštaj putanje do slika.

Što se tiče slika u HTML, ako predpostavim da ćeš HTML prikazivati preko TWebBrowser komponente (ili eksternog browsera), onda u HTML stavi "placeholder", specijalni tag koji ćeš zameniti sa pravom putanjom do slike pre nego što ćeš prikazati taj HTML. Te tagove definišeš sam. Na primer, staviš tag %SLIKA_1%, i u tabeli gde smeštaš putanje do slika upišeš taj isti tag za odgovarajuću sliku (bez % znakova). Zatim, uradiš jedan StringReplace nad HTML kojim ćeš zameniti sve tagove sa pravim putanjama do fajlova. Moraćeš samo da napraviš neku efikasnu proceduru koja ti prolazi kroz sve tagove u tabeli za slike, parsira HTML i menja svaki pronađeni tag sa odgovarajućom putanjom. Ovo rešenje je dobro za relativno mali broj slika, ali ako očekuješ da ćeš ih imati puno (recimo preko 100), onda ti ovakav metod može drastično usporiti proces parsiranja HTML-a.

Što se osnovne tabele tiče, kolonu ID definišeš kao IDENTITY, čime osiguravaš da on krene od 1 i automatski se povećava za 1 svaki put kada dodaš novi zapis. Za kolonu Parent treba da bude Allow NULLs na TRUE (čekirano). Kada je stavka najvišeg nivoa, u Parent stavljaš NULL, a kada ima "roditelja", u Parent stavljaš ID stavke koja joj je roditelj. To takođe znači da Parent ne može da ima vrednost 0. Postoji način da se napravi Referencijalni integritet koji ovo automatski osigurava, ali ne moraš sada da se baviš time već kada malo bolje upoznaš baze. Još jednom da napomenem, model tabele koju si napravio predstavlja najjednostavniji model tabele koja čuva stablo. Trebaš da budeš svestan da postoje bolji modeli i da ovaj tvoj model ima i prednosti i mane. Pogledaj sledeće linkove za dodatne informacije:

http://troels.arvin.dk/db/rdbms/links/#hierarchical
http://blogs.sitepoint.com/hierarchical-data-database-2/
http://www.developerfusion.com...es-in-aspnet-and-sql-server/2/
http://www.weckert.org/nst/index.html
http://www.sqlsummit.com/AdjacencyList.htm
https://communities.bmc.com/communities/docs/DOC-9902

Eto, valjda će ti biti dovoljno da razumeš
"There is a theory which states that if ever anybody discovers exactly what the
Universe is for and why it is here, it will instantly disappear and be replaced by
something even more bizarre and inexplicable. There is another theory which states
that this has already happened."
-- Douglas Adams
 
Odgovor na temu

mrkvojed

Član broj: 38336
Poruke: 43
*.dynamic.sbb.rs.



Profil

icon Re: TJvDBTreeView, ima i neko iskustva26.05.2011. u 11:29 - pre 156 meseci
Sjajno!

Hvala.
 
Odgovor na temu

mrkvojed

Član broj: 38336
Poruke: 43
*.dynamic.sbb.rs.



Profil

icon Re: TJvDBTreeView, ima i neko iskustva29.05.2011. u 18:31 - pre 156 meseci
Pozdrav svima.

Probao sam povezivanje baze i obicnog TDBGrid-a.

Koristio sam ovaj clanak
http://web.archive.org/web/200...con/files/2106/paper/2106.html

V1) imam TSQLConnection -> TSimpleDataSet -> TDataSource -> TDBGrid i radi !

V2) Napravio sam i originalnu verziju iz clanka gde umesto TSimpleDataSet stoji TSQLDataSet -> TDataSetProvider -> TClientDataSet
(jer Autor preporucuje : it is recommended to use the threesome TSQLDataSet-TDataSetProvider-TClientDataSet instead of the single integrated TSQLClientDataSet or TSimpleDataSet)

Imam problema sa ApplyUpdate :
autor kaze, da bih odmah izmenio bazu, da pozovem ApplyUpdate na event AfterPost

V1)
Code:
procedure TForm2.SimpleDataSet1AfterPost(DataSet: TDataSet);
begin
  SimpleDataSet1.ApplyUpdates(0);
end;

Dobijem exception "raised exception class TDBXError with message 'SQL State: HY000, SQL Error Code: 0
Connection is busy with results for another command"


ako stavim dugme, onda ne dobijem exception:
Code:
procedure TForm2.Button1Click(Sender: TObject);
begin
  SimpleDataSet1.ApplyUpdates(0);
end;


V2) U oba slucaja dobijem exception i na AfterPost i na dugme ?!? (isti kod, samo umesto SimpleDataSet1 koristim ClientDataSet1)

-----
P1) Zasto dobijam exception, kako to resiti ?
P2) Da li da postujem preporuku TSQLDataSet-TDataSetProvider-TClientDataSet umesto TSimpleDataSet. Ili da koristim TSimpleDataSet jer je to daleko jednostavnije ? Kako vi to radite ?
 
Odgovor na temu

rambo
Dejan Petković
Beograd

Član broj: 6095
Poruke: 190
*.static.isp.telekom.rs.



+6 Profil

icon Re: TJvDBTreeView, ima i neko iskustva30.05.2011. u 12:07 - pre 156 meseci
Probaj ovako:

Code (delphi):

procedure TForm2.SimpleDataSet1AfterPost(DataSet: TDataSet);
begin
  (DataSet as TSimpleDataSet).ApplyUpdates(0);
end;


Moja je preporuka da koristiš TClientDataSet jer onda imaš punu kontrolu. TSimpleDataSet jeste jednostavniji za korišćenje, ali nije bolji. Jedini problem koji ćeš možd aimati je što ćeš neke stvari morati ručno da iskodiraš, ali ništa više od par linija koda u određenim eventima na TClientDataSet i na TDataSetProvider.

Inače, nisi rekao koji RDBMS koristiš. dbExpress nije loš, ali ako koristiš komponente koje su specijalizovane za jedan određeni RDBMS, dobićeš i bolje performanse i lakše ćeš raditi sa njima. Moja lična preporuka je UniDAC ili specifična verzija DAC komponenti za odgovarajući RDBMS (http://www.devart.com/dac.html).
"There is a theory which states that if ever anybody discovers exactly what the
Universe is for and why it is here, it will instantly disappear and be replaced by
something even more bizarre and inexplicable. There is another theory which states
that this has already happened."
-- Douglas Adams
 
Odgovor na temu

mrkvojed

Član broj: 38336
Poruke: 43
*.dynamic.sbb.rs.



Profil

icon Re: TJvDBTreeView, ima i neko iskustva31.05.2011. u 14:00 - pre 156 meseci
Hvala na odgovoru, preporuci i kodu.

Koristim MS SQL Server 2008 Express.

Na preporucenom setu komponenti ne radi, na ovom drugom radi ...

V1) TSQLConnection -> TSimpleDataSet -> TDataSource -> TDBGrid/TJvDBTreeView (nepreporucen)
Kada sam dodao kod :
Code:
procedure TForm2.SimpleDataSet1AfterPost(DataSet: TDataSet);
begin
  (DataSet as TSimpleDataSet).ApplyUpdates(0);
end;

proradilo je.

V2) TSQLConnection -> TSQLDataSet -> TDataSetProvider -> TClientDataSet -> TDataSource -> TDBGrid/TJvDBTreeView (preporucen)
Kada sam dodao kod :
Code:
procedure TForm2.ClientDataSet1AfterPost(DataSet: TDataSet);
begin
  (DataSet as TClientDataSet).ApplyUpdates(0);
end;

i dalje daje exception, ima neki problem.

Isti exception imam iako kastujem DataSet u TSimpleDataSet

Prilicno sam siguran da sam dobro povezao komponente (V1 radi), ali mozda nesto nedostaje, ili mozda treba da dokodiram jos neki event ?
 
Odgovor na temu

rambo
Dejan Petković
Beograd

Član broj: 6095
Poruke: 190
*.dynamic.sbb.rs.



+6 Profil

icon Re: TJvDBTreeView, ima i neko iskustva31.05.2011. u 21:42 - pre 156 meseci
Možeš da pozoveš ApplyUpdates odmah posle Post, nije neophodno da to radiš iz AfterPost eventa.

Takođe, možeš da proveriš ChangeCount property i da radiš ApplyUpdates samo ako je veći od 0.

Ako i dalje budeš imao taj exception, onda napravi novi prazan projekat i postavi samo neophode komponente. Simuliraj proces bez ikakvih dodatnih stvari, pa vidi hoće li se exception opet pojaviti. Jedino što mogu da predpostavim je da imaš još nešto što utiče na čitav proces pa ti izaziva exception. Najpoznatiji problem na koji sam ja naišao je OnCalcFields event. Ako njega ne napišeš kako valja odnosno ako ga ne koristiš pravilno, to je najčešća zamka.

Opet kažem, batali dbExpress i probaj UniDAC/SDAC ili eventualno AnyDAC. Razlike su drastične, naročito kada koristiš TClientDataSet (u koristi DAC komponenti, naravno).
"There is a theory which states that if ever anybody discovers exactly what the
Universe is for and why it is here, it will instantly disappear and be replaced by
something even more bizarre and inexplicable. There is another theory which states
that this has already happened."
-- Douglas Adams
 
Odgovor na temu

mrkvojed

Član broj: 38336
Poruke: 43
*.dynamic.sbb.rs.



Profil

icon Re: TJvDBTreeView, ima i neko iskustva01.09.2011. u 17:38 - pre 153 meseci
Pozdrav svima, evo mene ponovo.

Citat:
rambo Opet kažem, batali dbExpress i probaj UniDAC/SDAC ili eventualno AnyDAC

Hvala mnogo na savetu, nasao sam UniDAC "besplatni", probao i snasao se brzo.

Ako nekome zatreba, spakovao sam neke rutine za ucitavanje stabla iz tabele, snimanje stabla u tabelu ...
osnovne rutine

Sve je islo poprilicno pravolinijski dok nisam pokusao da kopiram iz TVirtualStringTree na Clipboard.
CopyTo rutina nije za to koliko vidim

Cini mi se da je pravi kandidat CopyToClipBoard, medjutim uspeva mi samo kada je
Clipboard formats "Unicode Text" ili "Plain Text"
Tada kopira samo Title cvora (i tabovima obelezava nivo) ali ne i njegove Data (Html tekst u mom slucaju)

PasteFromClipoard mi ne uradi nista kada je pozovem.

Primetio sam i rutine :
CancelCutOrCopy
FinishCutOrCopy
kao i :
GetFirstCutCopy
GetNextCutCopy
GetPreviousCutCopy
GetSortedCutCopySet
ali mi nije jasno kako ceo mehanizam funkcionise.

Googlovanje me uglavnom vodi na TVirtualStringTree stranicu, ne mogu da nadjem nikakvo objasnjenje o mehanizmu za rad sa Clipboardom.

Da li je neko radio ovo pre ili je negde video/nasao dobro objasnjenje ?

Unapred hvala.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: TJvDBTreeView, ima i neko iskustva01.09.2011. u 19:24 - pre 153 meseci
> Cini mi se da je pravi kandidat CopyToClipBoard, medjutim uspeva mi samo kada je
> Clipboard formats "Unicode Text" ili "Plain Text"
> Tada kopira samo Title cvora (i tabovima obelezava nivo) ali ne i njegove Data (Html tekst u mom slucaju)

VirtualStringTree ne zna ništa o tvojim podacima i načinu na koji ih čuvaš, moraćeš sam da uradiš kopiranje. Pozovi Clipboard.AsText da nešto prebaciš na clip i dodaj Clipbrd u uses sekciju.
 
Odgovor na temu

mrkvojed

Član broj: 38336
Poruke: 43
*.dynamic.sbb.rs.



Profil

icon Re: TJvDBTreeView, ima i neko iskustva01.10.2011. u 09:17 - pre 152 meseci
Hvala na pomoći.

Uspeo sam da to rešim, morao sam da menjam kod komponente,
napisao sam novu verziju ContentToUnicode
i novu granu unutar PasteFromClipboard.

Izbačeno je kopiranje headera kolona, dodato kopiranje svih child čvorova ...
ako nekome ko ima slične probleme treba kod ili pomoć - neka ostavi ovde poruku.

Hvala svima još jednom.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: TJvDBTreeView, ima i neko iskustva

[ Pregleda: 2224 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

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