[ MatezYU @ 09.05.2007. 06:59 ] @
Dakle ovako, imam csv fajl i treba da napravim program za editovanje i zmenu tog fajla.. Podaci u njemu su u relaciji, recimo ovako:
A,ime i prezime,ulica i broj,mesto
B,naziv filma,cena
B,naziv filma,cena
A,ime i prezime,ulica i broj,mesto
B,naziv filma,cena
A,ime i prezime,ulica i broj,mesto
B,naziv filma,cena
B,naziv filma,cena
B,naziv filma,cena
B,naziv filma,cena
B,naziv filma,cena

itd.. Dakle kontate kako je to u relaciji. Kako da odradim da podatke iz reda A vidim u jednom dbgridu a podatke iz B u drugom. I da su oni u relacji.
[ aleksandarpopov @ 09.05.2007. 08:26 ] @
XML i ClientDataSet
[ MatezYU @ 09.05.2007. 08:58 ] @
Ajde mi pojasni..
Ja sam odradio ovako, uzeo sam absolute database komponentu, odradio tako da kada se pokrene program kreira 2 tabele i puni preko tog fajla te tabele i onda ih stavlja u relaciju.. Zakomplikovao.. Ajde mi pojasni kako da odradim to..
[ X Files @ 09.05.2007. 09:54 ] @
CSV fajl beše običan ASCII fajl sa zarezima kao graničnicima?

Ja bih napravio jednu sasvim praznu MS Access BAZU sa dve tabele u njoj
i unapred postavljenoj master-detail relaciji OSOBA -> FILM.

Tabela 1 (OSOBA):
1. ID (autoincrement, PK)
2. ime i prezime
3. ulica i broj
4. mesto

Tabela 2 (FILM):
1. ID_FK (spoljni ključ ka ID-ju tabele 1)
2. naziv filma
3. cena

CSV fajl bih tretirao kao najobičniju CONFIG datoteku, i inicijalno čitanje bih odradio
kako bih odradio, na primer preko TStringList-e.

Dalje bi išlo sve preko DB Data-Aware komponenti. S obzirom da se podaci upisuju odmah,
ne bi bilo problema oko pucanja pograma/nestanaka struje i gubitka podataka.

Dalje, pre učitavanja u MS ACCESS bazu, trebalo bi vršiti proveru da li je EXPORT i pražnjenje
u CSV od prethodnog puta bio u redu i eventualno da li je datum CSV fajla noviji od datuma
u MDB fajlu, pa da se vidi šta dalje, i sl.
[ MatezYU @ 09.05.2007. 10:04 ] @
Meni taj fajl nije xml fajl nego obican csv fajl..
[ MatezYU @ 09.05.2007. 10:13 ] @
Tako sam i ja radio. E sada interesuje me da li postoji neko "elegantnije" resenje?
[ X Files @ 09.05.2007. 10:43 ] @
Koliko vidim, CSV fajl koji si pokazao (koga pretpostavljam moraš da imaš jer
je deo nekog većeg monolitnog "sistema" u pozadini) lici na klasicnu bazu podataka,
a to dalje znaci da ima tendenciju da se zahtevi prosiruju. To znam iz iskustva.

U takvim okolnostima, ja nemam dilemu...

Relacioni model koji ti nudi bilo koja baza (MDB recimo):

1. pri samom citanju i inicijalnom upisu izvrsice proveru integriteta
2. u samom radu sa bazom te rasterecuje pitanja o Integritetu baze
3. cuva podatke FIZIČKI na disku, a ne samo u RAM-u
4. omogućuje korišćenje DB Aware kontrola
5. olaksava se geniranje izveštaja jer neki alati za izveštaje se oslanjaju
na postavljenu master/detail vezu pa sami dalje znaju šta da rade

... itd.

Teško je definisati elegantno. Manje koda ne znači i eleganciju, pogotovo
kada stavri krenu da se usložnjavaju, pa elegancija preraste u frankeštajna
od koda.

Ovde je jedini problem šta ako se CSV fajl promeni, a ti nisi izvršio EXPORT
nazad u taj isti CSV fajl.

To što je rekao aleksandarpopov isto može biti elegantno rešenje. XML bi ti
omogućio jedan fajl, a poseduje mogućnost iteracije kroz strukturu, ali o tome
neka neko drugi priča (ko ima više iskustva sa XML-om).
[ Miloš Baić @ 09.05.2007. 11:17 ] @
Nešto slično sam davno isprobao. Kombinacija je bila TClientDataSet i .cds fajl, tj. binarni .xml. Preporučio bih ti ovu varijantu ako se projekat sastoji iz dve tabele (A, B) koje su u relaciji. Mada, može i nešto složenije, zavisi koliko bi vodio računa o svemu.

Trebala bi ti dva .xml fajla (.cds), jedan za jednu tabelu, drugi za drugu, te Master/Detail strukturu napraviti bi bio trivijalan problem.
[ MatezYU @ 09.05.2007. 11:31 ] @
Misliš da bi trebalo da kreiram dva temp fajla u TClientDataSet-u i da ih vežem da budu u relaciji pa da ih punim iz onog csv fajla?
[ Miloš Baić @ 09.05.2007. 12:56 ] @
@MatezYu

Vidi ovako, kad mi nešto nije jasno, vratim se na prvi post, da ponovo pročitam pitanje. Sad, nije mi jasno da li ti podatke imaš u CSV fajlu pa želiš samo ih importovati u bazu, te napraviti Master/Detail strukturu, ili imaš CSV fajl koji ćeš direktno puniti iz svoje aplikacije, ručno?

Sad sam video, u sklopu JEDI projekta, imaš komponentu koja se zove TJvCsvDataSet, u sklopu JVCL foldera primer JvCSVDataSet.
Imaš primer unosa u csv fajl i importovanja podataka iz istog. Pogledaj, ne bi trebalo biti problema.
[ MatezYU @ 10.05.2007. 06:01 ] @
To sam vec uradio, dakle iskoristio sam tu JEDI komponentu za citanje podataka iz csv fajla. Zatim punim dve tabele koje koje su u relaciji i kada napravim izmene onda punim opet taj csv fajl ali kontra, idem kao save as.. i preko onog starog ponovo iz cele baze citam rekorde i punim csv fajl.. Drugacije nisam uspeo da resim.
Interesovalo me samo da li postoji neko resenje recimo da direktno pristupam csv fajlu kao bazi bez tog exporta i importa u lokalnu bazu na racunaru. Da li postoji neka komponenta ili neko resenje koje moze strukturu toj csv fajla da prepozna kao bazu?
[ Miloš Baić @ 10.05.2007. 10:10 ] @
Nisam se previše udubio u primer sa CSV fajlom, ali umesto SaveToFile možeš nešto vako odraditi:
Code:

  with JvCsvDataSet do
   begin
    Insert;
     FieldByName('ID').AsInteger:= StrToInt(Edit3.Text);
     FieldByName('LASTPHONECALL').AsString:= Edit4.Text;
     FieldByName('PRIVATENUMBER').AsBoolean:= StrToBool(Edit5.Text);
    Post;
   end;
//refresh

Inverzno od toga:
Code:

  with JvCsvDataSet do
   begin
    Edit;
     FieldByName('ID').AsInteger:= StrToInt(Edit3.Text);
     FieldByName('LASTPHONECALL').AsString:= Edit4.Text;
     FieldByName('PRIVATENUMBER').AsBoolean:= StrToBool(Edit5.Text);
    Post;
   end;
//refresh