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

Učitavanje podataka iz DBF

[es] :: Baze podataka :: Učitavanje podataka iz DBF

Strane: 1 2

[ Pregleda: 7823 | Odgovora: 20 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
194.126.213.*



+1 Profil

icon Učitavanje podataka iz DBF22.11.2005. u 10:01 - pre 224 meseci
Nešto slično sam pitao na forumu Firebird, dakle:
Na serveru imam 100-tinjak DBF-ova koji se periodično učitavaju u bazu koja je isto tako na serveru. Napominjem da su DFB-ovi prilično veliki, nekoliko ih ima preko 1,5M slogova. Kod mene je Firebird, ali mislim da bi isti problem mogao biti i s bilo kojom drugom.
U Delphi-u sam napravio program koji po strukturi učitava podatke. Da li postoji UDF ili nešto slično pa da izbjegnem promet po mreži i cijeli posao obavim na serveru? Server je odvojen fizički i nemam pristup do njega.
Bilo koja ideja?
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.infonova.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Učitavanje podataka iz DBF22.11.2005. u 10:05 - pre 224 meseci
Da pokusas sa Stored Procedures na serveru da to sve odradis?
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
194.126.213.*



+1 Profil

icon Re: Učitavanje podataka iz DBF22.11.2005. u 10:12 - pre 224 meseci
Kako?
Kako u store proceduri dobiti podatke iz DBF-a? Može primjer?
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.infonova.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Učitavanje podataka iz DBF22.11.2005. u 10:32 - pre 224 meseci
Sta podrazumijevas ti pod DBF fajlom? Da li ga podrazmijevas kao neki CSV fajl (Comma Separated Values) ili neki drugi format? Oracle npr. po defaultu podatke cuva takodje u fajlovima sa .DBF ekstenzijom, ali im ne mozes pristupiti tek tako lako, odnosno direktno, nego iskljucivo ukoliko su dio baze...

Kako si ti zamislio uopste da citas podatke iz tih DBF fajlova?

Kako se kreiraju i koriste Stored Procedures - mozes naci u dokumentaciji za doticnu bazu podataka...
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
194.126.213.*



+1 Profil

icon Re: Učitavanje podataka iz DBF22.11.2005. u 11:01 - pre 224 meseci
DBF - Database III fajlovi. 1 file - 1 tabela sa hederom i podacima. Iz delphi-a se čitaju preko BDE, a postoje i kompomnente za rad s njima bez BDE-a. Svaki slog je fiksne dužine. Napravio sam i svoju komponentu koja ka otvara kao txt file i učitava podatke.
Nije problem u kreiranju i korištenju store procedura. Problem je kako u store proceduri doči do podataka iz DBF-a. U help-ovima nema riječi o tome. Pokušao sam na internetu nači, bez uspjeha.
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.infonova.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Učitavanje podataka iz DBF22.11.2005. u 11:11 - pre 224 meseci
U koju bazu zelis da ubacis podatke? FireBird ili neka druga?
Ako je u pitanju FireBird, evo ti direktan link do dokumentacije:
CREATE PROCEDURE in FireBird

[Ovu poruku je menjao StRiPy dana 22.11.2005. u 12:18 GMT+1]
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Učitavanje podataka iz DBF22.11.2005. u 11:54 - pre 224 meseci
A da
1) iskopiraš DBF-ove kod sebe u lokal
2) svojom aplikacijom prepumpaš podatke u neku temporary bazu isto u lokalu
3) detach-uješ lokalnu temp bazu (ili kako se već taj proces zove na firebirdu)
4) iskopiraš je na server
5) attach-uješ je na server (ili kako se već taj proces zove na firebirdu)
6) iskopiraš podatke iz temp baze u pravu bazu

... ako si već siguran da svoju aplikaciju nikako ne možeš da poteraš direktno na serveru
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
194.126.213.*



+1 Profil

icon Re: Učitavanje podataka iz DBF22.11.2005. u 14:59 - pre 224 meseci
Več sam naposao: nije problem store procedure. Znam kako se kreiraju i koriste.
Ono što jablan piše, moguče je, ali sa 1-2 GB DBF-a i oko 1,5 GB SQL baze nije praktično, kopiranje traje suviše dugo.
I ja sam došao do zaključka da bi najbolje rješenje bilo store procedura. Problem je kako doči do podataka iz DBF-a. Firebird ima mogučnost korištenja vanjskih funkcije (UDF) koje su napravljene kao DLL pa ću pokušati na taj način. Na internetu nisam pronašao ništa gotovo pa ću pokušati sam nešto napraviti.
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Učitavanje podataka iz DBF22.11.2005. u 15:21 - pre 224 meseci
Citat:
franjo_tahi: Ono što jablan piše, moguče je, ali sa 1-2 GB DBF-a i oko 1,5 GB SQL baze nije praktično, kopiranje traje suviše dugo.

Ali svejedno kraće (i lakše po resurse servera) nego da radiš direktno na serveru aplikacijom pokrenutom na klijentskom računaru...

Puno sreće sa pisanjem DLLa, javi kako si prošao...
 
Odgovor na temu

delalt

Član broj: 68360
Poruke: 198
81.93.80.*



Profil

icon Re: Učitavanje podataka iz DBF22.11.2005. u 16:12 - pre 224 meseci
Nije baš za dbf fajlove, ali možda ti pomogne:
http://www.ibphoenix.com/main....4:266112&page=ibp_udf_libs
pogledati: External File UDF's
ili:
http://groups.yahoo.com/group/firebird-support/message/68689
http://groups.yahoo.com/group/firebird-support/message/68690

Pošto kažeš da možeš to odraditi svojim programom, periodično,
zašto jednostavno ne instaliraš taj program na server i pustiš ga da
on to tamo radi, ubaciš tajmer ili nekako drugačije...
Nisi naveo kako nastaju ti dbf fajlovi, pa ako možeš da ih dobiješ u
obliku eksternog fajla koji odgovara Firebirdu i koje onda možeš da
učitavaš iz stored procedure, to bi ti bilo najbolje. Znači, neki eksport
iz dbf..., naravno sve na serveru.
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
194.126.213.*



+1 Profil

icon Re: Učitavanje podataka iz DBF23.11.2005. u 10:00 - pre 224 meseci
rfunc radi sa externim file-ovima, a priložen je source kod pa ću probati nešto napraviti od toga. Javit ću vam da li sam uspio jer vjerujem da ima još ljudi koje muči isti problem.
DBF-ove puni postoječi program, a ne može se znati koji je slog mijenjan tako da moram svaki puta učitavati sve. Do sada sam to obično radio preko vikenda tako da u ponedjeljak imam friške podatke.
U svako slučaju, hvala na pomoči.
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
62.162.218.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Učitavanje podataka iz DBF24.11.2005. u 15:19 - pre 223 meseci
UDF radi u samom DB kernelu, i ne moze kontrolirati transakcije.
A i kad bi se resio da pumpas preko UDF-a kako mislis da u UDF-u citas DBF, onda bi se mora linkati do biblioteke koje citaju DBF ili preko ODBC-a. Brzina koju ces dobiti se ne isplati za potencijalnu opasnost da monopoliziras FB server ili u najlosijem slucaju da ga srusis i da mozda zavrsis sa korumpiranim DB fajlom.

Koliko i da te brine vreme kopiranja, ipak je to one-time posao. Ako planiras da kopiras 1.5G u redovnim intervalima recimo jednom dnevno onda razmisli malo da redizajniras arhitekturu aplikacije.

Ukoliko moras da svaki dan importiras 1.5GB podatke, onda najbrze resenje ti je da sve to cuvas u tekst fajlu specijalno formatiranom za da FB moze da mu pristupi kako external tabelu.

Primer
create table test external file 'c:\test.txt'
(
t1 CHAR(10),
t2 CHAR(18)
)

Onda samo kopiraj preko c:\test.txt tvoj fajl u kome svaki slog bi bio 28 bajta
Code:
[file]aaa       aaaaa             bbbb      bbbb              abb       abbaa             [/file]


i onda mozes select * from test :) ili jos bolje SP sa insert into ... select izbor je tvoj :)

vise infoa oko external tabele mozes naci na:
http://www.ibphoenix.com/main....;q=external+table&o=Search

I samo da znas po default u conf file-u ova opcija je onemogucena, tako da moras prvo u conf file-u da kazes FB-u da dozvoli upotrebu external tabele.


koju i da bilo bazu da izaberes, moras ili da spremis data-pump aplikaciju kao sto ti je rekao jablan ili da uradis bulk copy ... t.j. ovo sto ja napisao.


[Ovu poruku je menjao Riste Pejov dana 24.11.2005. u 16:27 GMT+1]
People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
62.162.218.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Učitavanje podataka iz DBF24.11.2005. u 15:24 - pre 223 meseci
Malo samo potrazio po FB forumu i vidim da si isto pitanje postavio ... ali u malo drugom formatu i vidim da moras importirati podatke svaki dan, sto znaci da ti je najoptimalno resenje da exportujes DBF u txt i da ih onda koristis u FB kao external tabele.
People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
194.126.213.*



+1 Profil

icon Re: Učitavanje podataka iz DBF25.11.2005. u 10:09 - pre 223 meseci
Zahvaljujem na pomoči.
Pokušao sam preko exterlan table.
Promjenio sam u firbird.conf #xternalFileAccess = u xternalFileAccess = Full.
Za administraciju koristim IBExpert.
u SQL editoru sam napisao:

Create table TABLICA1 external file "D:\proba\baza.txt"(
poljea char(10),
poljeb char(18)
)

Execute prođe OK,
Commit transaction javi grešku:

Cannot commit transaction:
Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements.
Access to external file "D:\PROBA\BAZA.TXT" is denied by server administrator.

Tablica nije kreirana. O čemu se radi?
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
194.126.213.*



+1 Profil

icon Re: Učitavanje podataka iz DBF25.11.2005. u 10:16 - pre 223 meseci
Pardonček.
shvatio sam: brišući oznaku za koment # obrisao sam i prvo slove E. Kad sam vratio u ispravno: ExternalFileAccess = Full radi OK.
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
194.126.213.*



+1 Profil

icon Re: Učitavanje podataka iz DBF25.11.2005. u 11:13 - pre 223 meseci
Još jedno pitanje.
Do sada se nisam korisio event-ima. Pokušao sam uvoz preko txt fila-a i to radi, čini mi se dobro. Testirat ču brzinu, pa ću vijdeti.
Kreirao sam store proceduru:

CREATE PROCEDURE PREBACI
AS
DECLARE VARIABLE POLJEA VARCHAR(10);
DECLARE VARIABLE POLJEB VARCHAR(18);
begin
for select POLJEA, POLJEB FROM ETABLA INTO :POLJEA, :POLJEB
DO BEGIN
INSERT INTO PROBA VALUES(:POLJEA, :POLJEB);
post_event 'UPISAN';
END
/* Procedure Text */
suspend;
end

Ono što me muči: kako dobiti iz nje nakon svakog upisa odziv da bih pratio na ekranu pratio tijek prijenosa podataka. Ovo sa event-om ne radi. U ETABLA imam 8 slgova, a event se javi 2 puta.
 
Odgovor na temu

johnnie
somewhere in Serbia

Član broj: 40975
Poruke: 299
*.ptt.yu.



+4 Profil

icon Re: Učitavanje podataka iz DBF25.11.2005. u 21:35 - pre 223 meseci
Franjo,
Ako je u pitanju DBaseIII, kazi mi koje ekstenzije koristi za index fajlove, .idx, .cdx, .nsx or something else?

Dobru stvar imas, kao sto sam ti vec davno jedmon rekao, na www.vistasoftware.com, samo je trial 30 dana , zove se Apollo VCL.
Imas i na www.pssoft.ru/program.html dosta komponenti koje mogu da ti pomognu.
Meni licno dosta znace za DBase, odnosno XBase i Clipper. Radi na serveru kao i na web serveru isto kao i u lokalu, doduse malo sporije, ali sustina price je da imas samo 2 dll-a koji zavrsavaju sav posao...
I samo uporedjivanje update-ovanih slogova je dugacak i dosadan posao, pa jos 1 GB, mnogo je...
U Apollo-u imas i FTS (Fast text search) pretraga i rad sa tekstualnim bazama, moze sasvim lepo da se primeni...
Uvezi jednom sve baze kod sebe u lokal. Napravi checksummer za tu bazu, koja daje unique checksum za svaki slog.
Uporedjujes samo checksummere svaki dan i uzimas samo updatevoane slogove.
Drugo, DBase ima genericki index koji se u Clipperu zove RecNo() odnosno unique broj sloga, sukcesivno po osnovu kreiranja sloga; ako baza nema ni jedan index, imace index RecNo() odnosn Record number, 1 je prvi kreiran , 2 je posle njega itd.
Count baze ce imati ukupan broj slogova. Uporedjuj count svaki dan i uzimaj samo nove...
To je sve samo u prici, ti znas ipak realan problem koji imas...
Pozdrav, javi sta si uradio
Still going strong...
 
Odgovor na temu

delalt

Član broj: 68360
Poruke: 198
81.93.74.*



Profil

icon Re: Učitavanje podataka iz DBF26.11.2005. u 11:13 - pre 223 meseci
Franjo, vezano za onu tvoju proceduru sa post_event-om,
nešto sam probao samo za insert bez event-a i dešava se ovo:
ako npr. za "for select ..." očekujem da dobijem 5 redova,
na ekranu mi se prikaže samo jedan i to zadnji, ali kad
pogledam šta je upisano u tabelu PROBA dobije se uredno
insertovano svih 5 redova.
Kad SUSPEND ubaciš unutar BEGIN END bloka onda uredno
prikaže i na ekranu, a i insertuje u tabelu PROBA (probao sam sa
IBOConsole, Fb 1.5.2). Probaj ponovo sa svojim eventom, trebalo bi da radi.
Inače, ovo mi je malo čudno ponašanje, zna li ko nešto detaljnije da pojasni...

Druga stvar, ako koristiš BDE za pristup dbf fajlovima, a već imaš gotov
program za prebacivanje podataka probaj malo da podesiš BDE na serveru ili
možda možeš i iz svog programa da to odradiš.
Ovo nisam probao, ali čini mi se da BDE (mora biti instaliran i na serveru, i
Borland SQL link drajver) možeš da podesiš da određeni SQL upit izvrši
direktno na serveru, bez obzira što ti svoj program pokrećeš sa klijentskog
računara i ako ti ne treba da te podatke odmah vidiš i na svom klijentskom
računaru. Pogledaj BDE help "System INIT settings" pa podešavanja za
SQLQRYMODE (može biti NULL - default, SERVER ili LOCAL), a i PASSTHROUGH.
Možda i odradi posao. :)
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
217.16.84.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Učitavanje podataka iz DBF28.11.2005. u 00:38 - pre 223 meseci
@delalt, franjo

Ovo sto ste opisali, uopste nije cudno ponasanje, vec prilicno normalno sto se tice Firebirda. Primer ako imamo stored proc recimo:

CREATE PROCEDURE t2 RETURNS ( i int)
as
begin
i = 1;
while (:i<5) DO
BEGIN
i = :i +1;
END
end

i kada zelimo da uradimo SELECT * FROM t2, FB prvo poziva proceduru t2 i signalizira klijentu da on moze pokupiti vrednost izlazne promenlive i kao recordset. Dok klijent uspe da pokupi vrednost is varijable i, server vec zavrsi sa procedurom t2. U ovom slucaju nikad ne znamo sta ce biti rezultat izraza SELECT * FROM t2. Moze biti null, moze biti prvi clan, moze poslednji ... a mozda i ceo recordset kako bi trebao biti.

kada sada proceduru malo preradimo ovako

CREATE PROCEDURE t2 RETURNS ( i int)
as
begin
i = 1;
while (:i<5) DO
BEGIN
i = :i +1;
SUSPEND;
END
end

Ovime kazemo FB enginu, da kad dodje do suspend, jednostavno stopira izvrsenje procedure, sve dok klijent ne uradi FETCH i da pokupi vrednost iz procedure.

Irelevantno dali procedura vraca recordset, ili samo jednu jedinu promenljivu UVEK postavite suspend ako zelite da dobijete tacne vrednosti iz vase procedure.

btw ovo isto vazi i sa eventima.

[Ovu poruku je menjao Riste Pejov dana 28.11.2005. u 01:38 GMT+1]
People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
194.126.213.*



+1 Profil

icon Re: Učitavanje podataka iz DBF28.11.2005. u 10:30 - pre 223 meseci
Što se tiče EVENT-a: istina je. Radio sam na brzinu i zaboravio prebaciti suspend unutar BEGIN - END.

Kod učitavanja iz DBF ne koristim indexe (inače su NTX - Clipper) već idem redom kako su kreirani slogovi. Ne mogu učitavati samo nove jer je moguče i stare mijenjati, a ne znam koje pa moram iči od prvoga.
Ne korisim BDE već sam našo TDBF kontrolu koja je besplatna i radi odlično ono što trebam (http://tdbf.sourceforge.net/index.php). Probao sam i Apollo VCL, ne nudi ništa što nema TDBF, a da meni treba.
Sada učitavanje traje i 48 sati pa ga radim samo preko vikenda. DBF-a se ne mogu riješiti još bar godinu dana.

POčeo sam raditi Dll za UDF funkcije za učitavanje iz DBF-a direktno iz STORE procedure. Napravio sam da rade kao funkcije u Delphi-u, rade dobro, još da složim da radi u Firebirdu direktrno... Stvar sam zamislio na sljedeći način:
- funkcija OPEN(FileName) : otvara DBF file, a vrača string (npr. STRUCT) sa parametrima: file handle otvorenog filea, broj slogova, dužinu herera, dužinu sloga, popis polja sa podacima o tipu i dužini te ostale pramatere. String STRUCT koriste ostale funkcije npr:
- FieldByName(FieldName, Struct) vrača vrijednost FieldName kao string. Parametre potrebne za učitavanje nalazi u STRUCT.

Ono što je napisao Riste Pejov o uvozu preko external table, možda bi bilo lakše napraviti, ali je opet problem brzina prijenosa. Najprije treba DBF izveti u TXT, a onda TXT učitati u tabilcu.

Što mislite o tome? Hoče li doči do zagušenja servera?
 
Odgovor na temu

[es] :: Baze podataka :: Učitavanje podataka iz DBF

Strane: 1 2

[ Pregleda: 7823 | Odgovora: 20 ] > FB > Twit

Postavi temu Odgovori

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