[ darko_sudarov @ 20.08.2007. 08:22 ] @
Pokusavam da napravim nesto kao updater-za bazu,c++ aplikacija koja iz firebirda treba da izvadi sve podatke iz svih tabela(po mogucstvu sa insert komandom -nesto kao sto ibexpert uradi) odradi bekap postojece baze(to sam zavrsio)
restore nove baze(zavrseno) i insert predhodno izvadjenih podataka(nije odradjeno).

Problem mi je da napisem sql koji pokupi sve tabele i sve podatke izveze u neki txt file(OVO MISLIM DA TESKO MOZE DA ODRADI SQL-IZVOZ(znam za varijantu uvoza i izvoza txt fajla u ibexpert ali ne radi sa c++)).
Pokusao sam sa ddl-om koji generise ibexpert ali nece da prodje -jer koristi execute ibeblock.

[ darko_sudarov @ 20.08.2007. 15:26 ] @
Ovoliko sam uradio
Code:
 CREATE PROCEDURE UPDATER 
returns (
    tabela varchar(100))
as
begin
    for select rdb$relation_name
    from rdb$relations where rdb$relation_name not starting with 'RDB$'
    into :tabela
    do
    begin


  suspend;
end
end 


jedino mi je problem kako sada da uradim
select * from updater (a da shvati da je to tabela iz koje mi trebeju svi podaci),ima li neko ideju ili sam totalno pogresio put.

inace nasao sam u isql-u (c:\Program Files\Firebird_2_0\bin) komandu OUTput [<filename>] izveze podatke za trazeni sql ali bez insert komande,moze li se to nekako jos dodati?

Bilo koja sugestija je dobro dosla ...
[ savkic @ 21.08.2007. 11:17 ] @
Spisak svih tabela možeš dobiti sa sledećim viewom.

Code:

CREATE VIEW S_TABLES_LIST (
  TABLE_NAME
) AS
SELECT 
  RDB$RELATION_NAME
FROM 
  RDB$RELATIONS
WHERE 
  RDB$VIEW_BLR IS NULL AND 
  RDB$RELATION_NAME NOT STARTING WITH 'RDB$' AND
  RDB$RELATION_NAME NOT STARTING WITH 'TMP$'
GROUP BY
  RDB$RELATION_NAME;


Iz PSQLa teško da možeš uraditi to što želiš. Ako već radiš iz C++, onda prvo izvrši ovaj gore view i za svaku vraćenu tabelu izvrši novi select * upit i formatiraj vraćeni sadržaj u INSERT blokove. Ako su u tabelama već napravljeni constrainti (primarni i spoljni ključevi) onda moraš voditi i računa o redosledu ubacivanja podataka u tabele.
Ima već gotovih programa koji rade export/import, zašto njih ne iskoristiš. Npr. fbexport i fbcopy. Druga stvar je da za sve ovo možeš koristiti gbak, mnogo je brže nego pojedinačno izvršavanje insert komandi.
[ darko_sudarov @ 21.08.2007. 12:51 ] @
Apsolutno se slazem sa tobom,ali ovde je malo specificna situacija jer razvijam software za automatski update
nekog programa za firmu,koji ne sme da zahteva neko veliko znanje korisnika o update-ovanju sa drugim softverom
sem onog koji vec koristi,i naravno sve se desava krajnje automatizovano bez uplitanja korisnika.
Naime zbog cestih izmena na bazi pa i aplikaciji mislim da je to dobra stvar da korisnik sam moze da uradi update sa nekog sajta na netu...(a i stedi moje noge za posete firmama :-) )
To je srz cele price.
Hvala na pomoci oko sql-a ,tmp sam prevideo...
Inace mislim da sam blizu kraja sa ovim sto si mi pomogao (iskopao sam TIBOutputRawFile c++ komandu).

Ako ima jos neko neku sugestiju bio bi mu zahvalan.

Mislim da se fbexport i fbcopy placaju?
gbak-koristim svakako u aplikaciji za kreiranje beckup-a,ali mi treba nesto sto izvadi podatke i prebaci u novu bazu,moze li gbak da izvadi samo podatke u neki file?

[ savkic @ 22.08.2007. 00:06 ] @
> razvijam software za automatski update nekog programa za firmu,koji ne sme da zahteva neko veliko znanje korisnika
> o update-ovanju sa drugim softverom sem onog koji vec koristi,i naravno sve se desava krajnje automatizovano bez uplitanja korisnika.

Ako treba da updejtuješ i db strukturu onda se sve komplikuje.

> Naime zbog cestih izmena na bazi pa i aplikaciji mislim da je to dobra stvar da korisnik sam moze da uradi
> update sa nekog sajta na netu...(a i stedi moje noge za posete firmama :-) )

Instaliraš RemoteDesktop, VNC ili slične pa se nerviraš iz kancelarije ;)

> Mislim da se fbexport i fbcopy placaju?

Ne, možeš i source skinuti pa pogledati kako je to tamo urađeno. Inače pisao ih je naš čovek, Milan Babuškov.

> gbak-koristim svakako u aplikaciji za kreiranje beckup-a,ali mi treba nesto sto izvadi podatke i prebaci
> u novu bazu,moze li gbak da izvadi samo podatke u neki file?

Možeš da uradiš metadata only bakap ili kompletan bekap, dakle svega u bazi. Ako ta nova baza treba da bude identična polaznoj onda možeš koristiti gbak (ili dbak), ako je potrebno da u postojeću bazu dodaš neke podatke iz fajla onda to ne može sa gbakom (ne znam za dbak).
[ darko_sudarov @ 29.08.2007. 11:52 ] @
Hvala svima na pomoci uradio sam izvoz i uvoz i sve radi odlicno.

Imam jos jedno pitanje:

Mogu li se pokidati svi foreign key-ovi dok traje uvoz podataka i posle vratiti na mesto.
Naime ja iskljucim sve trigere pre uvoza podataka

Code:
 update rdb$triggers  set RDB$TRIGGER_INACTIVE=1 where RDB$TRIGGER_INACTIVE=0 and rdb$trigger_source not starting with 'check'; 


check ne da da se iskljuci,ne razumem zasto....
dali postoji u nekoj tabeli nesto slicno da se uradi i sa foreign key?
[ savkic @ 30.08.2007. 18:07 ] @
> Mogu li se pokidati svi foreign key-ovi dok traje uvoz podataka i posle vratiti na mesto.

Samo da ih dropuješ, uvezeš podatke i ponovo napraviš. Moj ti je savet da prvo napraviš klot tabele, uvezež podatke i tek onda praviš primarne i spoljnje ključeve, ostale konstrejnte i indekse.
[ obucina @ 23.09.2007. 00:34 ] @
Malo zakasneo odgovor, ali pogledaj program IBPump, besplatan je

http://www.clevercomponents.com/products/datapump/dp-tour.asp

Njega instaliras kod korisnika, posaljes im ibp fajl sa opisom kako se podaci azuriraju, i eto.
Koristio sam ga, dobar je.