[ KrunoV @ 07.12.2004. 23:25 ] @
Evo posto sam poceo prelaziti sa mysql na firebird malo se mucim sa nekim prblemima koje nisam imao u mysql-u.

Prebacio sam podatke iz mysql-a u firebird i sada mi se desava da kada dodjem u insertu do id koji vec postoji da mi izbaci gresku da to vec postoji i to je to, napravio sa trigere koji rade donekle, tj napravio sam neki autoincesment pomocu generatora ali postoji problem sto on samo povecava id za jedan i opet se vracamo na prvi problem jer u mojoj bazi postoje upisi npr sa ID=1 pa slijedeci ID=6.

Zanima me dali postoji neko rijesenje da firebird sam prebaci na slijedeci slobodni ID ako ovaj vec postoji ili da prebaci na slijedeci ID od onog koji je najveci u bazi.

Pozdrav,
Kruno
[ VRider @ 08.12.2004. 10:01 ] @
Citat:
jer u mojoj bazi postoje upisi npr sa ID=1 pa slijedeci ID=6.

Mozes li ovo da pojasnis?
S jedne strane, ako ti sam generises ID po nekoj tvojoj logici (1 pa 6), onda nije lose da ta logika bude takva da nemas nikad sva ista IDa (recimo jmbg - ne znam kakva ti je baza).
S druge strane, mozes da pustis bazu da to radi, ali ce onda IDevi da idu od 1 pa do xyz, i uvek ce se poslednji povecati za 1. Bice "rupa" ako bude brisanja, ali to ne bi trebalo da utice na tebe.
[ KrunoV @ 08.12.2004. 16:01 ] @
>
>
>
problem je u tome da su podatci prebaceni iz mysql-a i firebird i to sa
id-em iz mysql-a i tu nastaje problem jer kod svakog korisnika programa
je razlicit broj upisa u bazu i meni je nemoguce znati koji je njegov
zadnji osim da to radim u kodu programa, ali mene zanima dali postoji
neko rijesenje da to radi sama baza i onda pocme slijedece unose sa
povecavanjem zadnjeg za jedan ili vec kako se odredi.

Kada je baza prazna onda nema problema jer je uvijek prvi nula.

--

Best regards, Mali ( Kruno )

ON-LINE Soft, Inc

URL: www.on-line.com.hr
Mobile: +385(0)98-623-959
Mail : [email protected]
[ VRider @ 08.12.2004. 16:16 ] @
Ako je MySQL jos ziv, odradi ponovo prebacivanje, ali bez kopiranja IDa, nego pusti da Firebird stavi nove IDe sam.
[ KrunoV @ 08.12.2004. 17:13 ] @
>
>
>
ok, hvala probaop sam i radi ok.
Dali mozda znas neki dobar alat za firebird koji moze da exportira i
importira tabele i podatke u xls file.
Nesto kao EMS-ov menager ali da je free ili barem jeftino

--

Best regards, Mali ( Kruno )

ON-LINE Soft, Inc

URL: www.on-line.com.hr
Mobile: +385(0)98-623-959
Mail : [email protected]
[ VRider @ 08.12.2004. 17:44 ] @
Najgora stvar kod Firebirda je ocajna dokumentacija (u poredjenju sa PostgreSQLom i MySQLom), tako da bas i nema sta da se konsultuje po tom pitanju.
Najbolje sto meni pada na pamet je pisanje tako necega u perlu. To nije nista komplikovano. Kroz DBI se moze pristupiti i jednom i drugom.
[ KrunoV @ 08.12.2004. 18:04 ] @
>
>
>
ok, thanx

--

Best regards, Mali ( Kruno )

ON-LINE Soft, Inc

URL: www.on-line.com.hr
Mobile: +385(0)98-623-959
Mail : [email protected]
[ Riste Pejov @ 09.12.2004. 07:45 ] @
Generatori, su u principu samo 64 bitne brojeve koje se povecavaju sa GEN_ID funkcijom za neku vrednost koja se zada GEN_ID kao parametar. Znaci mozes dobiti niz vrednosti koji ide ovako:
1,11,21,31 ako GEN_ID pozoves sa inkrementom 10 (GEN_ID(ime_generatora, 10)). Kad je rec o tvom problemu, onda ako su MySQL ID polja sa maksimalnoj vrednosti 10 000 onda mozes setirati generator na vrednosti 10 000 (SET GENERATOR ime_generatora TO 10000;), pa onda Firebird-ove ID-ja ce biti >= 10 000.

Jedna veoma interesantna informacija je da generator zivi izvan transakcije. Ako na primer imamo jedan insert i za tabeli u kojoj insertuje podatke imamo triger before insert koji generira ID uz pomoc generatora, startujemo transakciju, pokusamo insert u tabeli, triger se izvrsava i generira ID za datom insertu, onda insert radi nekih ogranicenja (not null ?! ili constraint neki) ne uspe da insertuje podatke u tabeli. Kad transakcija uradi Rollback, onda normalno podatke nema nigde nit sta i da bilo drugo koje je bilo u toj istoj transakciji. Ali, generator ipak ima vrednosti inkrementiranoj za 1 (ili vise).

Sto znaci, ako imam jednu uspesnu transakciju, 5 neuspelih potom pa opet jednu koja je ok, onda podatke ce da imaju ID = 1, pa ID = 6 i sl (ukoliko gen_id ima inkrement 1).
[ KrunoV @ 09.12.2004. 13:02 ] @
>
>
>
>
>
po tome bi bilo moguce da se onda pokusava izvesti insert dok ne dodje
to slobodnog id jer ce on stalno povecavati za odredjeni broj pa makar i
insert nije uspio, to je dobro znati, hvala..

--

Best regards, Mali ( Kruno )

ON-LINE Soft, Inc

URL: www.on-line.com.hr
Mobile: +385(0)98-623-959
Mail : [email protected]
[ Riste Pejov @ 10.12.2004. 07:15 ] @
Citat:
KrunoV: >
po tome bi bilo moguce da se onda pokusava izvesti insert dok ne dodje
to slobodnog id jer ce on stalno povecavati za odredjeni broj pa makar i
insert nije uspio, to je dobro znati, hvala..


Kruno, pa to i nije neka sjajna ideja, narocito kad znamo da se radi od bazi sa versioning systemom, koji za svaku transakciju ima po jednu verziju recorda. E sad zamisli da u tvojoj transakciji imas prvo select pa onda insert, i za svakog neuspelog inserta select upise novu verziju selektiranih recorda .... i onda ako imas 10K recorda taj isti select stigne do brojke od ~10K verzija ..... ghmmmm ...

ipak ... najbolje selectiraj najvecu vrednost autoincrementa u MySQL i postavi generatorovu pocetnu vrednost na te vrednosti. A ako zelis da tvoj kvazi autoinc u FB ima uzastopne vrednosti, onda generator nije resenje. Mozes pokusati da stvoris novu tabelu, u kojoj ces cuvati jedan record kao counter i svaki put kad trebas ID onda selectiras MAX value, incrementiras za jedan i update-ujes, i to sve strpas u Serializible (trx sa isolation "write consistency" u FB-u) transakciji
[ KrunoV @ 10.12.2004. 11:00 ] @
>
>
>
>
>
ma nisam ni mislio tako nesto rjesavati jer zbilja nebi imalo smisla,
ali da je dobro znati je. Inace moj je problem rijesen, samo sto sam
koristio ems menager za to jer ovi drugi bas i nemaju funkcije koje su
mi trebale, a to je da odaberem samo ono sto hocu prebaciti iz jedne
baze u drugu, a ne sve sto se nalazi u tabli pa tako i ID.

--

Best regards, Mali ( Kruno )

ON-LINE Soft, Inc

URL: www.on-line.com.hr
Mobile: +385(0)98-623-959
Mail : [email protected]
[ ultraKeen @ 13.12.2004. 05:47 ] @
>incrementiras za jedan i update-ujes,
>i to sve strpas u Serializible
>(trx sa isolation "write consistency" u FB-u) transakciji

kako to "trpanje" konkretno izvodis ?

mislim na sintaksu, kao pises...