PCPROG.4

22 Apr 1994 - 05 Jan 1995

Topics

  1. algoritmi (153)
  2. comment (15)
  3. ms.dos (123)
  4. windows (304)
  5. asembler (103)
  6. basic (80)
  7. jezici (196)
  8. pascal (880)
  9. cccc (586)
  10. cpp (157)
  11. clipper (1267)
  12. baze.podataka (525)
  13. razno (529)

Messages - baze.podataka

baze.podataka.1 peca.st,
Pozdrav! Postoji li ovde neko ko se aktivnije bavi Microsoft Access-om? ;) Imao bih neka pitanja, a ne mogu više da "mučim" fancy-ja! :))))) Hvala unapred.
baze.podataka.2 ppekovic,
>> Postoji li ovde neko ko se aktivnije bavi Microsoft Access-om? ;) Imao bih >> neka pitanja, a ne mogu više da "mučim" fancy-ja! :))))) Pitaj, naci ce se vec neko da odgovori. Paya
baze.podataka.3 petrovics,
*** Odgovor na poruku 11.1123 *** >> Naravno da moze. Pogledaj primere LNK fajlova koji se dobijaju uz >> Blinker, a za pocetak ce i ovo raditi isto sto i RTLink: >> >> Blinker FI <lista OBJ> LIB <lista LIB> BLI INC OFF Zahvaljujem se na brzim odgovorima i tebi i MBOLE-tu. Ipak problem i dalje postoji. Kod vecih aplikacija se javi problem da nece da rade jer im fali memorija dok sa RTLINK-om tih problema nema. Nije li problem stara verzija, jer ja koristim verziju 2.0 ? Inace i ranije sam probao ovo sto mi i vi kazete: samo sam umesto RTLINK-a pozvao BLINKER u .RMK datoteci.
baze.podataka.4 peca.st,
Pitanje vezano za Microsoft Access: hteo bih da mi Access prilikom unosa novog rekorda u tabelu sam dodeli neku šifru (koju korisnik ne bi trebalo ni da zna, jer mu nije bitna), recimo u polje "Proizvod ID". Kako to da napravim? Bilo bi optimalno kada bi samo uvećao prethodni ID za jedan, ili ga odredio prema fizičkom broju rekorda? Koja je varijanta bolja? Hvala!
baze.podataka.5 dr.grba,
>> da napravim? Bilo bi optimalno kada bi samo uvećao >> prethodni ID za jedan, ili ga odredio prema fizičkom >> broju rekorda? Koja je varijanta bolja? Inkrementiraj, pa dodeli još jednu, kontrolnu cifru, izračunatu po nekom modulu. Tako sprečavaš smeće u sistemu.
baze.podataka.6 petrovics,
*** Odgovor na poruku 11.1125 iz PC.PROG.3 *** >> > Za sada ga koristim samo za manje programe :( >> >> Ja imam programe od preko 1MB EXE uradene na ovaj nacin. Puno hvala na objasnjenju :). Posto kod mene to i dalje pravi probleme mora da mi je lose instaliran Blinker. Bar znam gde je greska ...
baze.podataka.7 nbatocanin,
>>> Blinker FI <lista OBJ> LIB <lista LIB> BLI INC OFF > Ipak problem i dalje postoji. Kod vecih aplikacija se javi > problem da nece da rade jer im fali memorija dok sa > RTLINK-om tih problema nema. Ako ovako linkuješ, svi moduli i biblioteke idu u root, pa program zahteva enormno mnogo memorije. Koristi skript i stavi sve što možeš u overleje.
baze.podataka.8 dpredovic,
> Posto kod mene to i dalje pravi probleme mora da mi je lose > instaliran Blinker. Praktično neizvodljivo. Ako ikako radi, znači da je dobro insta- liran. Dede pošalji neki svoj .lnk fajl, pa da vidimo u čemu je frka. Cu, Dejan
baze.podataka.9 astojkovic,
Prodajem Knjigu Baralića i Ćirića "dBASE III Plus", jeftino. Koliko jeftino? Nemam pojma. Koliko? ma wr astojkovic
baze.podataka.10 mbole,
> Ipak problem i dalje postoji. Kod vecih aplikacija se javi > problem da nece da rade jer im fali memorija dok sa RTLINK-om > tih problema nema. Nije li problem stara verzija, jer ja > koristim verziju 2.0 ? Da li si ubacio blinker incremental off? Probaj da u lnk datoteku dodaš sadržaj cl501min.lnk, ili je ubaci kao inline pomoću @. Imaš tri ovakve lnk datoteke koje stižu uz blink, lepo su iskomentarisane, pa pogledaj malo po njima.
baze.podataka.11 vigor,
HELP Nedavno sam nabavio Clarion 3.0 ali mi prilikom kompajliranja redovno puca program tj prijavljuje neku gresku u memoriji, naravno instalirao sam ga i sa i bez 8Mb. memorije tj sa 4 i sa 8, prckao sam po setup-u itd. Ako neko nesto zna neka odgovori !!
baze.podataka.12 lisse,
Radi se o programu FOX PRO 2.0.Kada mu se da parce koda u stilu: SELECT 8; FROM HHIMENIK; WHERE IME = MEMVAR; INTO CURSOR IMEN REPORT FORM IMEN.FRX PREVIEW to u interaktivnom modu kada se pokrene sa DO radi dobro ali kada se kompajluje ustand-alone EXE program vrati poruku : Invalid report file. Da li je neko bio u slicnoj situaciji i u cemu je problem?Urgent help isMK markable welcomMMe!!
baze.podataka.13 parmak,
> to u interaktivnom modu kada se pokrene sa DO radi dobro ali > kada se kompajluje ustand-alone EXE program vrati poruku : > Invalid report file. Da li ti je report ukljucen u project ?
baze.podataka.14 vsasa,
Na SEZAMU sam "nekad davno" video .DBF file sa ESC sekvencama za raznorazne stampace. Sada, k'o za inat, ne mogu da se setim gde. Moze li mi 'ko pomoci? CAO, Vsasa.
baze.podataka.15 miroslavn,
Imam problem sa FoxPro 2.5 za Dos... Kada otvorim sistemski prozor za help (u mom programu) , a potom kliknem mišem na desktop mog programa fox više ne prihvata ništa sa tastature... Heeeelppp
baze.podataka.16 dr.grba,
>> Na SEZAMU sam "nekad davno" video .DBF file sa ESC sekvencama za >> raznorazne stampace. Sada, k'o za inat, ne mogu da se setim gde. >> Moze li mi 'ko pomoci? Može se pomoći, kako da ne? Za prvu pomoć, a možda i više od toga, evo mog DBF priloga. printer.zip
baze.podataka.17 tvucko,
Posto kucam online bicu kratak . Da li je neko cuo, vidio ili mozda ima upgrade za Clipper 5.2 na verziju D. Pozdrav TVucko
baze.podataka.18 bulaja,
│Da li je neko cuo, vidio ili mozda ima upgrade za │Clipper 5.2 na verziju D. └─── Ni čuo ni video, a ne verujem da takvo nešto postoji :). Bar ga nema na aprilskoj listi fajlova Clipper foruma na Compuserve, a ako ga nema tamo onda znači da ga nema uopšte :). Btw postoji i tema PC.PROG:clipper. :)
baze.podataka.19 tvucko,
Ja cuo i vidio, a informacije sam dobio sa Hekom BBS-a i fajl je imao datum 02.05.1994. 52dix.txt
baze.podataka.20 mjevta,
>> Radi se o programu FOX PRO 2.0.Kada mu se da parce koda u >> stilu: SELECT 8; >> FROM HHIMENIK; >> WHERE IME = MEMVAR; >> INTO CURSOR IMEN >> REPORT FORM IMEN.FRX PREVIEW >> to u interaktivnom modu kada se pokrene sa DO radi dobro ali >> kada se kompajluje ustand-alone EXE program vrati poruku : >> Invalid report file. 1. Cemu REPORT FORM IMEN.FRX PREVIEW, kada je ekstenzija .FRX default? 2. SELECT 8 -> SELECT * 3. Ako radis sa projektima, sto je prirodno, proveri sta je sa ukljucivanjem report file-a u projekat (include), a ako je to u redu onda ti je najverovatnije report file ostecen. Otvori ga kao DBF sa USE IMEN.FRX i browse-iraj ga, ako se snalazis sa strukturom FRX file-ova, ili izvestaj kreiraj ponovo.
baze.podataka.21 mjevta,
>> Na SEZAMU sam "nekad davno" video .DBF file sa ESC sekvencama >> za raznorazne stampace. Sada, k'o za inat, ne mogu da se setim >> gde. Uz FoxPro se isporucuje tabela (.dbf) koji sadrzi kodove za prilicno stampaca. Ako ti treba, javi se. bjevta
baze.podataka.22 frant,
Ako ovde ima korisnika baza podataka pod Windows-om, molim da mi daju svoje mišljenje: 1. Koji je programski paket bolji - Acess ili Paradox for Windows? 2. Koristim Paradox for Windows, verziju 1.0 . Nisam uspeo da ga nateram da prihvati naša slova iz Windows-a EE. Da li postoji način? 3. Koja je najnovija verzija Paradox-a for Windows? 4. U help-u se na dva mesta pominje mogućnost formiranja vremenskog polja 'Time Field', ali ja to nikako ne mogu da dobijem. Da li to može da se koristi u novijoj verziji? Frant
baze.podataka.23 bulaja,
│Ja cuo i vidio, a informacije sam dobio sa Hekom BBS-a │i fajl je imao datum 02.05.1994. └─── Woow, potrudiću se da to stigne brzo ovde :).
baze.podataka.24 djorzor,
> 1. Koji je programski paket bolji - Acess ili Paradox for > Windows? Po mom mišljenju, Paradox je trenutno tehnološki zreliji. Ali, nije isključeno da MS smisli nešto pa Access 2.0 bude bolji. Ili, može da se desi da Paradox neće raditi u Win 4.0. > 2. Koristim Paradox for Windows, verziju 1.0 . Nisam uspeo da ga > nateram da prihvati naša slova iz Windows-a EE. Da li postoji > način? Koristim YUSCII, bez EE-a, ali bi me čudilo da to ne radi. > 3. Koja je najnovija verzija Paradox-a for Windows? Borland Paradox for WIN 4.5 > 4. U help-u se na dva mesta pominje mogućnost formiranja > vremenskog polja 'Time Field', ali ja to nikako ne mogu da > dobijem. Da li to može da se koristi u novijoj verziji? Otvoriš tabelu, meni Table/Restructure, u Type polju treba da stoji D. Koliko znam, to je radilo u svim verzijama.
baze.podataka.25 mjevta,
>> 1. Koji je programski paket bolji - Acess ili Paradox >> for Windows? Probaj FOX4WIN, bices zadovoljan (ako imas 8MB RAM).
baze.podataka.26 jasicp,
Ako neko moze da mi posalje na mail sto vise primera u vezi sa programiranjem pomocu Paradox Enginea za Pascal i C ( C++ ), bio bih mu izuzetno zahvalan !
baze.podataka.27 dcolak,
│ Ako neko moze da mi posalje na mail sto vise primera u vezi sa │ programiranjem pomocu Paradox Enginea za Pascal i C ( C++ ), bio bih mu │ izuzetno zahvalan ! Da li je to stvar koja mora da se registruje? Gde može da se nabavi? žitao sam u Rač. da je paradox dosta sporiji od Clippera recimo, ali kad se svedu konačni rezultati dođe na isto.. Sledge DAMMIR!
baze.podataka.28 miroslavn,
Kako u FoxPro 2.5 za Dos proveriti da li je isključen sistemski help prozor primer: help <- otvaranje sistemskog help prozora if isključen help then do procedura1 else do procedura2 endif Pitanje 2 Kada otvorim sistemski prozor za help (u mom programu) , a potom kliknem mišem na desktop mog p rograma fox više ne prihvata ništa sa tastature...
baze.podataka.29 mjova,
> žitao sam u Rač. da je paradox dosta sporiji od Clippera > recimo, ali kad se svedu konačni rezultati dođe na isto.. ??? PE nije jezik/skript ;) kao kliper. teško je dati objektivnu ocenu poređenjem baba i žaba! dakle, ako se radi o pristupanju bazi, onda se nekakva paralela može naći i dati nekakvi testovi. no, i to se ne može baš lako uraditi je kliper je kliper, a PE je PE, a mene mrzi da o tome pišem ;).
baze.podataka.30 frant,
> Koristim YUSCII, bez EE-a, ali bi me čudilo da to ne radi. Sa YUSCII-jem bi valjda i moralo da radi, ali sa EE neće. > Otvoriš tabelu, meni Table/Restructure, u Type polju treba da stoji D. > Koliko znam, to je radilo u svim verzijama. Da, ali tako dobijem DATUMSKO polje, a meni je potrebno VREME u satima i minutima ... probaću sa verzijom 4.5 . Frant
baze.podataka.31 frant,
> Probaj FOX4WIN, bices zadovoljan (ako imas 8MB RAM). Nažalost, imam samo 4 MB. Može li da radi sa toliko memorije ili je 8 MB minimum? (I ovaj Paradox stalno swap-uje ...) Frant
baze.podataka.32 zorani,
##> Probaj FOX4WIN, bices zadovoljan (ako imas 8MB RAM). ## ## Nažalost, imam samo 4 MB. Može li da radi sa toliko memorije ili ## je 8 MB minimum? (I ovaj Paradox stalno swap-uje ...) Radi. Teško da je FOX4WIN zahtevniji u pogledu memorije od ACCESS-a i PARADOX-a. I oni vole 8 ali rade i sa 4MB.
baze.podataka.33 vitez.koja,
#=>│ Ako neko moze da mi posalje na mail sto vise primera u #=>│ vezi sa programiranjem pomocu Paradox Enginea za Pascal #=>│ i C ( C++ ), bio bih mu izuzetno zahvalan ! #=> Da li je to stvar koja mora da se registruje? #=> Gde može da se nabavi? Paradox Engine je komercijalna biblioteka, znači kad je kupiš tvoja je i nema šta da se registruje. Što se tiče nabavljanja, znam jednog koji ima instalaciju O:)... Možete njega da pitate odakle mu ;)
baze.podataka.34 mmitrovic,
Ů█▀█Ţ Što se tiče nabavljanja, znam jednog koji ima instalaciju O:)... Možete Ů█▀█Ţ njega da pitate odakle mu ;) Rado, kad bi znao ko je.
baze.podataka.35 dsisic,
> Da li je neko cuo, vidio ili mozda ima upgrade za > Clipper 5.2 na verziju D. Ja cuo, video, al' nisam pobedio posto se radilo o update-u za international verziju Clipper-a. Naime, brljao sam po nekom file serveru u inostranstvu i pronasao taj update. Od 52dus ni traga. Sto jes, jes, ima ga na Hekomu, al' ne moz' da ga skines bez da platis :( Verovatno ce ga neko pecnuti uskoro....
baze.podataka.36 ndragan,
/ ustand-alone EXE program vrati poruku : / Invalid report file. Za početak probaj da izbaciš taj riport iz projekta, pa probaš bez njega (tj da .frx ne bude uopšte u projektu, nego na lokalnom direktoriju), pa onda opet sa njim. Moguće da ti je u projektu ostala neka bajatija verzija, ili samo .frx bez .fpt ili tako nešto. --> U konferenciji SEX, tema o.jeziku...
baze.podataka.37 ndragan,
/ je 8 MB minimum? (I ovaj Paradox stalno swap-uje ...) Minimum za FP2.5W je 4M realne + 2M virtualne.
baze.podataka.38 ndragan,
/ Kako u FoxPro 2.5 za Dos proveriti da li je isključen sistemski help / prozor A ima i if Wvisible('help'), pored onog što smo rekli u temi kliper.
baze.podataka.39 ddabic,
Kako resavate sledeci problem: Radite u FoxPro-u, u sred rada nestane struje. Kada ponovo dodje struja probate da nastavite sa radom i dobijete poruku: *** Not a database file *** tj. ostecen je header baze i Fox je ne prepoznaje kao .DBF Znam da mogu bazu da popravim sa FILEFIX i sl. Uspeo sam i na jedan vrlo cudan nacin. Udjem u FoxPlus (on nejavlja nikakvu gresku kod USE-a), spakujem bazu i ponovo se vratim u FoxPro posle cega sve normalno radi. Ova resenja mi nisu interesantna posto mnogo komplikuju zivot. Treba mi neki programcic koji ovo resava bez izlaska iz Fox-a, ili neki slican FILEFIX-u ali da se startuje npr FIX (file) i da se sa tim posao zavrsi. Ako znate o cemu se radi molim za pomoc. Dejan D.
baze.podataka.40 zgolub,
> Radite u FoxPro-u, u sred rada nestane struje. Kada ponovo dodje struja > probate da nastavite sa radom i dobijete poruku: > *** Not a database file *** > tj. ostecen je header baze i Fox je ne prepoznaje kao .DBF ║Ovaj problem se javlja i kod CLIPPER-a. To sam do sada radio tako što otvorim novu datoteku sa istom strukturom i prepišep podatke iz stare zatim staru obrišem. Naravno ovo važi samo ako je datoteku moguće otvoriti sa USE.
baze.podataka.41 miroslavn,
> Kako u FoxPro 2.5 za Dos proveriti da li je isključen sistemski help > prozor > > primer: > > help <- otvaranje sistemskog help prozora > if isključen help then > > do procedura1 > else > do procedura2 > endif > > Pitanje 2 > > Kada otvorim sistemski prozor za help (u mom programu) > , a potom kliknem mišem na desktop mog p > rograma fox više > ne prihvata ništa sa tastature... Ponavljam ovo moje pitanje od pre par dana. Stvar je hitna...
baze.podataka.42 jovca.car,
/* Minimum za FP2.5W je 4M realne + 2M virtualne. ~~~~~~~~~ Aiii, gusto. :( Realne ili slobodne?
baze.podataka.43 jovca.car,
/* Treba mi neki programcic koji ovo resava bez izlaska iz Fox-a, ili Probaj RUN FILEFIX
baze.podataka.44 dr.grba,
Postoji već nekoliko grupa u kojima sam član, a koje se bave ovim i onim pitanjima u programiranju, planiranju, problemima i slično. Imam nameru da osnujem grupu koja bi se bavila projektovanjem informacionih sistema. Dakle, rasprava o skupu postupaka koji se (formalno ili neformalno, kako god hoćete) preduzimaju u procesu uvođenja računarske podrške informacionim sistemima. Nivo rasprave bi trebalo da bude iznad problematike ovog ili onog programskog jezika, možda čak i iznad problematike vrste hardvera. Zainteresovani neka se jave isključivo meni u mail, do ponedeljka, kada će grupa biti osnovana. Prednost, bez ljutnje, dajem profesionalcima na tom polju.
baze.podataka.45 ddabic,
> Probaj RUN FILEFIX Probato, nije to to. FILEFIX restaurira strukturu ali izgubi podatke. Dejan D.
baze.podataka.46 ddabic,
> obrisem. Naravno ovo vazi samo ako je datoteku moguce otvoriti > sa USE. Problem i jeste u tome sto ne mogu da otvorim bazu sa USE. Dejan D.
baze.podataka.47 ndragan,
/ nikakvu gresku kod USE-a), spakujem bazu i ponovo se vratim u FoxPro Ne moraš ni da spakuješ. Jedno 'append blank' završava posao.
baze.podataka.48 miroslavn,
> Kako u FoxPro 2.5 za Dos proveriti da li je isključen sistemski help > prozor > > primer: > > help <- otvaranje sistemskog help prozora > if isključen help then > > do procedura1 > else > do procedura2 > endif > > Pitanje 2 > > Kada otvorim sistemski prozor za help (u mom programu) > , a potom kliknem mišem na desktop mog p > rograma fox više > ne prihvata ništa sa tastature... Ponavljam ovo moje pitanje od pre par dana. Stvar je hitna...
baze.podataka.49 dr.grba,
Molio bih nekog korisnika Clariona da mi objasni šta je to LIM. Da li je to ekvivalenat korisničkoj biblioteci u Clipperu, TPU u Turbo Pascalu ili nešto treće?
baze.podataka.50 mdimitrijevic,
Hitno bi mi trebalo !!! Potrebno mi je kod unosa lozinke iz FOX PRO-a 2.0 da se ne vidi sta se ispisuje na ekranu. Prosto da boja pozadine i boja ispisa slova budu iste. To je u DBASE IV moglo sa X ili * cini mi se ( davno je bilo ). Ako iko zna neka mi odgovori sto pre !!!!!!! Pozdrav, Marjan
baze.podataka.51 misa.m,
>> Potrebno mi je kod unosa lozinke iz FOX PRO-a 2.0 da se ne vidi sta se >> ispisuje na ekranu. Prosto da boja pozadine i boja ispisa slova budu iste. >> To je u DBASE IV moglo sa X ili * cini mi se ( davno je bilo ). To isto (X/X) radi i u Fox-u bilo koje verzije. Ako isto želiš da izvedeš kroz screen generator onda postoje bar dve varijante: - Kreiraš neku slobodnu kolor šemu sa parovima 'x/x,x/x,....' ili bilo koje dve iste boje i sa Screen menija dodeliš svom GET polju. - Druga varijanta je da u READ WHEN klauzuli staviš: show get m.lozinka color "r/r,r/r" a u VALID za polje m.lozinka: m.loz=m.lozinka m.lozinka=space(10) jedina mana je upotreba 2 memorijske varijable. P.S. Meni se više dopada kombinacija istih boja zato što prikazuje i kretanje kursora.
baze.podataka.52 mdimitrijevic,
OK, probacu. Pozdrav, Marjan P.S. HVALA !!!!!!!
baze.podataka.53 mbole,
> ispisuje na ekranu. Prosto da boja pozadine i boja ispisa slova > budu iste. To je u DBASE IV moglo sa X ili * cini mi se ( davno > je bilo ). Pazite se monohromatskih ekrana. Svojevremeno sam radio ovako nešto (u clipperu doduše al dođe mu na isto), i desila se sledeća stvar. Probao sam program na lokalnoj VGA karti, i sve je bilo ok, tj nije se video ispis. Odnesem program da ga instaliram radi demonstracije, onako po navici ne gledajući u ekran, otkucam pristupnu šifru, podignem pogled kad ono na ekranu se sasvim lepo i čitljivo vidi šifra :( Reko mora da sam nešto pobrljaveo prilikom zadnjeg kompajliranja, pa kad sam došao nazad, pustim program na gorepomenutoj VGA, šifra se ne vidi. Zašto? Nemam pojma, a i nije me mnogo interesovalo. žim se desilo jednom desiće se opet. Otad prilikom unosa ovakvih stvari isključujem ispis na ekran , pročitam taster, uključim ispis, opalim zvezdicu na ekran, ponovo isključim ispis... Naravno ovo je cela funkcija koja ima kontrolu backspacea itd... vraća uneti string. Mislim da je ovo najbolje rešenje.
baze.podataka.54 zzk.,
> Pazite se monohromatskih ekrana. Svojevremeno sam radio ovako nešto (u > clipperu doduše al dođe mu na isto), i desila se sledeća stvar. Probao sam > program na lokalnoj VGA karti, i sve je bilo ok, tj nije se video ispis. > Odnesem program da ga instaliram radi demonstracije, onako po navici ne > gledajući u ekran, otkucam pristupnu šifru, podignem pogled kad ono na > ekranu se sasvim lepo i čitljivo vidi šifra :( Koju si ti to definiciju boje koristio? Kombinacija 'osnovna,N/N' ili 'osnovna, / ' mi jos nikada nije 'zakazala', a prosla je na desetine raznih kartica i ekrana.
baze.podataka.55 snemcev,
>> ...šta je to LIM. Lotus Imtel Microsoft. :)
baze.podataka.56 mjevta,
>> Potrebno mi je kod unosa lozinke iz FOX PRO-a 2.0 da se ne >> vidi sta se ispisuje na ekranu. Prosto da boja pozadine i boja >> ispisa slova budu iste. Naredba č ... SAY/GET ima COLOR klauzulu. bjevta
baze.podataka.57 ndragan,
/ sam došao nazad, pustim program na gorepomenutoj VGA, šifra se ne / vidi. Zašto? Nemam pojma, a i nije me mnogo interesovalo. Difolt boje za herkulesa, emulira kako zna i ume pa sve pokušavajući da izbegne kombinacije tipa crno na crno, napravi to što napravi. Jedino što me zasad nije zeznulo je 'color n/n,n/n', daje stvarno crno na crno. Mada mislim da i plavo na plavo radi.
baze.podataka.58 dr.grba,
>>>> ...šta je to LIM. >> >> Lotus Imtel Microsoft. :) Passe... (: Ali si me ipak prisetio na čoveka koji je kupovao PC pre jedno tri-četiri godine, spremio silne pare... tražio mi da mu objasnim kakva je to limena memorija, objasnili mu da to treba. "Zar nisu bolji oni čipovi?"...
baze.podataka.59 cnenad,
ŁŁŁ godine, spremio silne pare... tražio mi da mu objasnim kakva je to limena ŁŁŁ memorija, objasnili mu da to treba. "Zar nisu bolji oni čipovi?"... :)))))))) Ma kakav članak PRESS ANY KEY. Grbo daj još ovakvih primera.
baze.podataka.60 madamov,
Gde se kod nas može naći knjiga "Database structure and design"? Ili neka druga na istu temu.
baze.podataka.61 dr.grba,
>> ŁŁŁ memorija, objasnili mu da to treba. "Zar nisu bolji oni čipovi?"... >> ... >> Ma kakav članak PRESS ANY KEY. Grbo daj još ovakvih primera. Obično se trudim da potisnem to iz glave. Da nije tužno, bilo bi smešno. Taj isti čovek sad ima 386 mašinu sa 8 MB memorije, od kojih 2 MB koristi za EMS, a (sad se držite) 5 MB za keširanje diska... Ne bi on ni držao ta 2 MB za EMS, nego treba softveru koji je bio u kutiji sa skenerom..... E, da sam zapisivao sve bisere, sad bismo imali seriju tekstova u Računarima...
baze.podataka.62 dr.grba,
>> Gde se kod nas može naći knjiga "Database structure and design"? Ili neka >> druga na istu temu. Jesi li prečačkao podrum u "Jugoslovenskoj knjizi", ispod "Albanije"?
baze.podataka.63 rpausic,
POŠTOVANE KOLEGE! Razmišljam se da otvorim grupu sa programere koji rade u PROGRESS-u. Ako ste jedan od njih, a zainteresovani ste da svoja iskustva podelite sa drugima, javite mi se mail-om. Bude li nas više od troje, možemo se družiti u grupi. S obzirom na mali broj korisnika PROGRESS-a, verujem da ćemo svi imati koristi od toga. Rok za prijavu je neograničen, ali je poželjno da to bude što pre :) Pozdrav, Robert Paušić.
baze.podataka.64 madamov,
> Jesi li prečačkao podrum u "Jugoslovenskoj knjizi", ispod "Albanije"? Nisam bio tamo od kada sam kupovao ruske knjige za faks. B) Probaću tamo, hvala na podsećanju.
baze.podataka.65 zakic,
Kako u FOXPRO-u dobiti podatke o kirisnicima, grupama ... na NOVELL NetWare operativnom sistemu
baze.podataka.67 sikima,
Da li ima neko slobodno mesto u grupi za PE (pascal verzija).Rado bih se pridruzio.
baze.podataka.68 dejanr,
>> Da li ima neko slobodno mesto u grupi za PE (pascal verzija). Nisam čuo da postoji grupa za Paradox Engine, a u svakom slučaju, o toj biblioteci se sasvim lepo može diskutovati u ovoj temi.
baze.podataka.69 sikima,
O.K Dejane. Reci mi kako da pocnem sa PE. Je li mozem da mi posaljes neki programcic pisan sa PE da vidim kako to sve radi. Nadam se da ne trazim mnogo. P.S. I know You can help me!
baze.podataka.70 dejanr,
>> O.K Dejane. Reci mi kako da pocnem sa PE. Je li mozem da mi posaljes >> neki programcic pisan sa PE da vidim kako to sve radi. Nadam se da ne >> trazim mnogo. Rado bih pomogao, ali nikada nisam radio sa Paradox Engine-om. Ni za C, ni za paskal. Ako te zanima, možeš da pogledaš tekstove koji su prethodnih meseci o tome objavljivani u "Računarima".
baze.podataka.71 mjova,
> O.K Dejane. Reci mi kako da pocnem sa PE. Je li mozem da > mi posaljes neki programcic pisan sa PE da vidim kako to > sve radi. Nadam se da ne trazim mnogo. uz samu biblioteku ide dosta primera. naravno, oni koji treba da prikažu upotrebu funkcije su krajnje trivijalni, pa ti preporučujem da ih i ne gledaš. pogledaj one programe koji se daju kao primer - nešto o restoranima ili čemu beše već. to je odličan početak. drugo, što se tiče paskal i C verzije, razlika je samo u jeziku, imena funkcija su iste. > P.S. I know You can help me! ne vezano za dejana, već za većinu ljudi koji ti mogu ponešto odgovoriti: ne računaj da će iko trošiti svoje vreme na pisanje primera svakom ko postavi pitanje. najbolje je postavljati pitanja koja ne zahtevaju puno vremena za odgovor. to znači da se moraš više truditi da sam 'provališ' ono što te muči. kako sam dugo koristio PE može se očekivati da ga dobro poznajem. no, već više od 8 meseci ne koristim PE, pa mi je od svega toga ostala samo suština - više se ne sećam imena funkcija itd. pogledaj računare u kojima je bilo priče o njima, mislim da će ti dosta pomoći.
baze.podataka.72 sikima,
> Vise truda u vezi Paradox Engine 3.0 Mozda me nisi shvatio. Nisam trazio kompletnu obuku nego najlaksi nacin da startujem sa necim. Nisam shvatio ono sa primerom (restoran). Reci mi bar tacno ime tog fajla. Ja koliko sam video ima neki divlji primer (to bi i ja znao da napisem). P.S. Odakle si ti sve naucio (literatura,saveti,...).Ja sam i dalje zaintersovan za parce source bilo kakvog PE (pascal) programa. Pozdrav Sikima s H
baze.podataka.73 vitez.koja,
#=> Rado bih pomogao, ali nikada nisam radio sa Paradox #=> Engine-om. Ni za C, ni za paskal. Ako te zanima, možeš #=> da pogledaš tekstove koji su prethodnih meseci o tome #=> objavljivani u "Računarima". Pomenuti tekstovi su veoma informativni i korisni, preporučujem :) Međutim, za pravo korišćenje potrebna ti je prava literatura ili Norton Guide (ima na sezamu) + hiljadu probavanja & isprobavanja.
baze.podataka.74 dcolak,
│ kako sam dugo koristio PE može se očekivati da ga dobro │ poznajem. no, već više od 8 meseci ne koristim PE, pa mi je │ od svega toga ostala samo suština - više se ne sećam imena Zašto si (ako si) odustao od PE? Na šta si prešao? Sledge DAMMIR!
baze.podataka.75 bulaja,
│ Zašto si (ako si) odustao od PE? Na šta si prešao? └─── MJogi, jel da kažem (bRookha)? :)
baze.podataka.76 dr.grba,
Molio bi sve one koji su stekli ikakva, barem elementarna iskustva u radu Paradoxa 4.x u mreži da mi kažu par reči o svojim iskustvima. Kako instalirati? Kakve su perfomanse pod Novell NetWare 3.11? Šta je to SQLL Novell za Paradox? Nekakva biblioteka? Server modul? Posebno i pride, postavljam isto pitanje za Paradox for Windows u mrežnoj okolini. Informacije svih vrsta su vrlo dobrodošle. Hvala unapred.
baze.podataka.77 mjova,
> Zašto si (ako si) odustao od PE? Na šta si prešao? ne nasedaj na insinuacije od strane file moderatora ;) trenutno nemam potrebe za bazama, ali u svakom slučaju izbegavaću C kao jezik za tako nešto.
baze.podataka.78 .djn,
> Da li ima neko slobodno mesto u grupi za PE (pascal verzija).Rado bih > se pridruzio. I ja sam zainteresovan za clanstvo u grupi PE ako to znaci Paradox Engine. Imam iskustva sa verzijom za Pascal. .djn
baze.podataka.79 nigra,
Pozdrav! Da li neko zna kako je moguce zastititi podatke u tabelama (u nekoj bazi podataka) od neovlascenog pristupa. Naprimer, spreciti druge da nekim disk editorom "iscupaju" podatke iz tabele, odnosno iz DOS fajla u koji je snimljen sadrzaj te tabele? Da li se mogu kod upisa u tabelu podaci "skremblovati" i kako onda vrsiti pretrazivanje po indeksima? Unapred hvala!
baze.podataka.80 djelovic,
> Da li neko zna kako je moguce zastititi podatke u tabelama (u nekoj > bazi podataka) od neovlascenog pristupa. Većina sistema za rad sa bazama podataka ima mogućnost postavljanja šifre na tabelu. Van unošenja te šifre pri otvaranju tabele sistem je potpuno transparentan, i ti ne moraš da brineš o indeksiranju i sl. E sad, reci koji DBMS/programski jezik koristiš, pa da vidimo koja su funkcije u njemu za to zadužene.
baze.podataka.81 nigra,
<< Većina sistema za rad sa bazama podataka ima mogućnost postavljanja šifre << na tabelu. Van unošenja te šifre pri otvaranju tabele sistem je potpuno To je u redu kada se tabeli pristupa programski , naprimer, podignem ORACLE, udjem u SQL*Plus i napravim selekt iz te tabele. Isto tako, kada DBF tabeli pristupam CLIPPER programom. Ali, i pored šifre ja mogu iz PCTOOLS-a da pristupim *.DBF ili *.ORA fajlu i pročitam podatke. Ili da napišem program u C-u, koji će mi izdvojiti sve podatke iz tabele. << transparentan, i ti ne moraš da brineš o indeksiranju i sl. E sad, reci koji << DBMS/programski jezik koristiš, pa da vidimo koja su funkcije u njemu za to U obzir dolaze FOX PRO, Paradox Engine, Clipper, Progress ili ORACLE. Po- trebno je i da DBMS ima dobre performanse u radu sa velikim tabelama (oko milion redova). Pozdrav, nigra.
baze.podataka.82 isimic,
Imam jedan mali problemčić sa FoxPro-om 2.5 (DOS): Unošenje podataka za neku datoteku vrši se u BROWSE prozoru. Prilikom unosa, postoji potreba da se po unošenju npr. šifre artikla u jednom polju, u sused- nom polju prikaže naziv tog artikla, ali iz druge tabele povezane relacijom sa tabelom u koju se vrši unos. Uslov je da se u polje šifre može uneti samo ona šifra koja već postoji u tabeli šifara, ali i da se provera postojanja šifre izvrši odmah, prilikom pokušaja napuštanja polja sa šifrom. Nekoliko različitih rešenja za koje sam smatrao da su sasvim normalna, nisu dala rezultate. Npr. SELECT 0 USE tab1 ĐĐ tabela šifara SELECT 0 USE tab2 ĐĐ tabela promena SET RELATION TO šifra INTO tab1 BROWSE FIELDS tab2.šifra; :V = FOUND('tab1'); :E = 'Nepostojeća šifra',; tab1.nazivartikla :R; ... ... ne dozvoljava unos NIKAKVE šifre, ni postojeće ni nepostojeće. Isto to izve- deno kao UDF() na mestu FOUND(), ne daje ništa bolje rezultate. Isti segmnent koda, samo sa EOF() umesto FOUND() daje još čudnije rezultate. Prvi unos u takvo polje moguće je izvršiti BILO KAKVOM šifrom - unos je uvek(!) validan; ako šifra ne postoji u tabeli šifara, jedino što polje naziva artikla ostaje prazno. Ispravka vrednosti šifre prouzrokuje prikazivanje i naziva artikla u susednom polju. Tek sledeća promena u neku nepostojeću šifru aktivira rutinu za grešku (ali u polju naziva ostaje i dalje ime artikla za koji je prethodno unesena ispravna šifra). Sve u svemu, opšta ludnica! Bez provere postojanja šifre (:V i :E) u tabeli šifara dobija se jednostavno prazno polje naziva artikla, što daje neku vizuelnu kontrolu ispravnosti unete šifre, ali postoji zahtev da se takva nepravilnost odmah registruje i onemogući dalji unos pdataka. Pa, valjda je mušterija uvek u pravu! * * * * * Jedini logičan odgovor koji sam mogao naći je da se pre napuštanja polja šifre - za vreme kontrole njene validnosti - uneta vrednost još stvarno ne dodeljuje polju, sve dok se provera ne završi. A pošto se provera vrši upravo na osnovu relacije sa još nepostojećom vrednošću, ili u slučaju EOF() sa prethodnom vrednošću korektno uspostavljene relacije... ali zašto onda prolazi prvi pokušaj unošenja u varijanti sa EOF()... Potpuno sam zbunjen ovim, i do daljnjeg ću preskočiti ova dva programska reda. Ali, ako neko zna rešenje, please help me, jer ću kad-tad morati da se vratim na njih, pa da ne bih tražio stručnu pomoć na drugom mestu... Pozdrav! (Zoran)
baze.podataka.83 misa.m,
>> BROWSE FIELDS tab2.šifra; >> :V = FOUND('tab1'); >> :E = 'Nepostojeća šifra',; >> tab1.nazivartikla :R; >> ne dozvoljava unos NIKAKVE šifre, ni postojeće ni nepostojeće. Isto to >> izve- deno kao UDF() na mestu FOUND(), ne daje ništa bolje rezultate. Radiće kako očekuješ samo upotrebi : :V = seek(šifra, 'tab1') Pozdrav Miša
baze.podataka.84 isimic,
>> Radiće kako očekuješ samo upotrebi : >> :V = seek(šifra, 'tab1') Slazem se. Radi. Ali za to rešenje ne treba relacija. A pošto je sama relacija već sama po sebi implicitni seek, ne razumem zašto bi bio potreban još jedan. Naravno, u nedostatku boljeg, koirstiću i ovo rešenje, mada mi se ne čini potpuno 'čisto'. Nemoj pogrešno da me shvatiš - ovo stavljam na dušu ljudima iz FoxPro-Microsofta. Hvala! Pozdrav.
baze.podataka.85 sikima,
Da li je neko radio sa Paradox 4.0 i pravio .exe verzije (naravno, uz pomoc Run-Time). Kakva su iskustva u odnosu na Access, Cliper, Fox,.... Parametri za ocenjivanje: brzina na svim platformama, memeorijski zahtevi, velicina .exe fajla,.... Poceo sam da se bavim Paradoxom i PAL jezikom pa me intersuje da li je to uzaludan posao ili da trazim nesto bolje. P.S. Ocekujem odgovor, jer mislim da ima jos zaintersovanih Da li postoji grupa za Paradox. Ako da li ima slobodnih mesta
baze.podataka.86 isimic,
>>Slazem se. Radi. Ali za to rešenje ne treba relacija. A pošto je sama relacija >>već sama po sebi implicitni seek, ne razumem zašto bi bio potreban još jedan. Ispravka! Ne radi! Odnosno, radi, ali sa još čudnijim efektima. Kad se prvi put uđe u browse, i dok još ništa nije uneseno u tabelu, u polju naziva artikla već se nalazi naziv još neunesenog artikla, i to prvog u logičkom redosledu u odnosu na aktivan indeks u child tabeli. A za svaki sledeći slog, pre bilo kakvog unosa, u polju naziva artikla nalazi se ime artikla iz prethodnog sloga. Prema tome, problem i dalje ostaje nerešen. Uzgred, zna li neko gde i pod kojim uslovima se može nabaviti Library Construction Kit za FoxPro 2.5? Pozdrav! Zoran.
baze.podataka.87 pedjolino,
Ovo sto me zanima je cini mi se vec bilo aktuelno ovde, ali neka. Ima li neko iskustva u povezivanju VisualBasica 3.0 i Oracla, odnosno ima li neko SQL*Net for Windows da bi ODBC radio. Da li je potrebno jos nesto osim SQL*Net-a?? Hteo bih da probam ovo ali mi nedostaje SQL*Net pa ako moze...??
baze.podataka.88 sikima,
Da li je neko radio sa Paradox 4.0 i pravio .exe verzije (naravno, uz pomoc Run-Time). Kakva su iskustva u odnosu na Access, Cliper, Fox,.... Parametri za ocenjivanje: brzina na svim platformama, memeorijski zahtevi, velicina .exe fajla,.... Poceo sam da se bavim Paradoxom i PAL jezikom pa me intersuje da li je to uzaludan posao ili da trazim nesto bolje. P.S. Ocekujem odgovor, jer mislim da ima jos zaintersovanih Da li postoji grupa za Paradox. Ako da li ima slobodnih mesta H
baze.podataka.89 misa.m,
>> Slazem se. Radi. Ali za to rešenje ne treba relacija. A pošto je sama >> relacija već sama po sebi implicitni seek, ne razumem zašto bi bio >> potreban još jedan. Zato što se vrednost polja upisuje u bazu tek ako je valid uslov ispunjen, u suprotnom zadržava se već postojeća. Sama relacija se izvršava na osnovu prave vrednosti u bazi. >> Naravno, u nedostatku boljeg, koirstiću i ovo rešenje, mada mi se ne čini >> potpuno 'čisto'. Nemoj pogrešno da me shvatiš - ovo stavljam na dušu >> ljudima iz FoxPro-Microsofta. Ne vidim ništa nečisto u koriščenju sistemske funkcije, čak naprotiv.
baze.podataka.90 misa.m,
>> Ispravka! Ne radi! Odnosno, radi, ali sa još čudnijim efektima. Kad se >> prvi put uđe u browse, i dok još ništa nije uneseno u tabelu, u polju Na Fox2.5a for Dos i Fox2.5 for Win RADI bez ikakvih propratnih efekata. Testirani program: close data use tab1 order tag sifra select 0 use tab2 set rela to sifra into tab1 browse fields sifra:v=seek(sifra,'tab1'):e='Ne postoji šifra',; tab1.naziv:R Ili imaš bagovitu verziju ili se ti i ja ne razumemo najbolje pa da ne bi zamarali ostale možemo da nastavimo u mail-u.
baze.podataka.91 dkrstic,
Šta biste preporučili za učenje (od paketa za razvoj baza podataka) čoveku koji se sada opredeljuje za razvojni alat?
baze.podataka.92 cnenad,
ŁŁŁ Šta biste preporučili za učenje (od paketa za razvoj baza podataka) ŁŁŁ čoveku koji se sada opredeljuje za razvojni alat? Možda je mala digresija, a možda i 'jeres' ;) 'Klinci' mi napričaše da je najbolje baze podataka raditi sa C++ -om. Da li je ovo tačno ? Kao, svi prešli da rade baze sa C++.
baze.podataka.93 sikima,
=============================== 11.91 PC.PROG.4:baze.podataka dkrstic, 29.06.Sre 21:32, 120 chr --------------------------------------------------------- > Sta biste preporucili za ucenje (od paketa za razvoj baza podataka) coveku > koji se sada opredeljuje za razvojni alat? Ja sam isto pocetnik u radu sa bazama podataka ali sam dugo odlucivao i opre- delio se za Paradox. Dugo sam proucavao mogucnosti razlicitih programa i dosao sam do dileme izmedju Access 2.0 ili Paradox 4.5, tj. Microsoft or Borland. Kako sam ljubitelj Borlandovih proizvoda odlucio sam se na vec pomenuti program. Naravno, koliko ljudi toliko cudi tako da vrlo brzo ocekujem reply na moj text. Da cujemo ostale sta misle o ovome P.S. Zamolio bih Clipper-ase da se ne javljaju u odbranu svog mezimca (; Pozdrav svima Sikima
baze.podataka.94 cnenad,
ŁŁŁ P.S. Zamolio bih Clipper-ase da se ne javljaju u odbranu svog mezimca (; Nema potrebe, samo ćutanje je dovoljan znak da ni ne vredi 'razglabati' o PE-u ;))
baze.podataka.95 sikima,
> samo cutanje je dovoljno da ne vredi razglabati o PE-u Ako si procitao poruku pisalo je Paradox 4.0, a to je cista baza a ne skup funkcija kao PE3.0. Ali ocekivao sam ozbiljniji neki reply :))
baze.podataka.96 lkudlik,
Pomozite ! Da li neko ima na disketi u vezi ORACLE-a nesto ? Rec je o potpuno pocetnicima koji hoce da sa CLIPPER-a predju na ORACLE ili PROGRES. Puno hvala Lkudlik
baze.podataka.97 dkrstic,
I ja se kolebam između Access 2.0 i Paradox 4.5 / Paradox Engine 3.0. Ima li nekog od iskusnijih da nas posavetuje u koji standard za baze podataka vredi ulagati trud, da nebi kroz godinu dana morali da se preorijentišemo na sasvim drugu stranu. Druga stvar - dajte ovde pouzdane (proverene) informacije o minimalnim i optimalnim hardverskim resursima za pojedine pakete za razvoj baza i utiske koje ste stekli u radu s tim paketima. Unapred zahvalan, DKRSTIC
baze.podataka.98 djelovic,
> 'Klinci' mi napričaše da je najbolje baze podataka raditi sa C++ -om. > Da li je ovo tačno ? Ne. Nijedna komercijalna C++ biblioteka ne može da se po lakoći ili brzini rada meri sa Clipperom ili Foxom. Na drugu stranu, ukoliko ti treba nešto ekstra, kao telekomunikacije+baze podataka, ili velika fleksibilnost, onda je C++ bolje rešenje.
baze.podataka.99 cnenad,
ŁŁŁ Ako si procitao poruku pisalo je Paradox 4.0, a to je cista baza a ne Sorry, nisam primetio. Doduše tu si u pravu, Clipper i Paradox se ne mogu porediti.
baze.podataka.100 sines,
Glasam za Paradox za Windows. Radim u njemu skoro godinu dana, i jos me uvek prijatno iznenadjuje. Stvarno je bezobrazno lak i mocan. Naravno, potrebno je platiti penale u smislu hardvera (min 386/40 + 8MB RAM-, ali to danas i nije tako tesko. Inace, na poslu radim u FOX-u, ZIM-u, Clipper-u, ali to nije to (s tim sto moram da priznam da je FOX za DOS zverski brz na Novell-u). Sve u svemu, neces pogresiti i ako se opredelis za FOX, ali ja sam za PARADOX. p.s. izvinite za on line... pozdrav, Sinisa.
baze.podataka.101 peacock,
#### Da li je neko radio sa Paradox 4.0 i pravio .exe verzije #### (naravno, uz pomoc Run-Time). Kakva su iskustva u odnosu na #### Access, Cliper, Fox,.... Parametri za ocenjivanje: brzina na #### svim platformama, memeorijski zahtevi, velicina .exe #### fajla,.... Poceo sam da se bavim Paradoxom i PAL jezikom pa #### me intersuje da li je to uzaludan posao ili da trazim nesto Ja radim sa Paradoxom nekoliko godina :) Zadovoljan sam, jedino još fali kopmpajler za DOS verziju. Paradox Runtime nije kompajler, već interpreter kroz koji pokrećeš svoje aplikacije. Znači, ne može se upoređivati sa standardnim jezicima za upravljanje bazama poput Clippera. Sada sam na verziji 4.5, dovoljno je brza, zavisi šta očekuješ. Ako si kupio paket, uverio si se u velike mogućnosti i fleksibilnost rada. Ja sam terao Pdox 3.5 i na XT makini, i radila je iznenađujuće brzo. Za Windows verziju Paradoxa izašao je paket za razvoj aplikacija koji sadrži i kompajler, a ja čekam da se pojavi verzija za DOS, valjda će je pustiti u prodaju pošto je sigurno imaju.
baze.podataka.102 mjevta,
>> Ne. Nijedna komercijalna C++ biblioteka ne može da se po >> lakoći ili brzini rada meri sa Clipperom ili Foxom. Postoji Watcom SQL for Windows, a verovatno i za DOS. Mozda bi to bilo pravo resenje. U svakom slucaju, ako neko koristi ovu kombinaciju (Watcom + Watcom SQL), ne bi bilo lose da napise koju rec o tome. bjevta
baze.podataka.103 spantic,
> ekstra, kao telekomunikacije+baze podataka, ili velika fleksibilnost, onda > je C++ bolje rešenje. Zadnjih dva meseca se baš akam sa time, a i bar još toliko ću i voleo bih da si u pravu. Pravi problem je baš u nedostatku adekvatnih biblioteka koje omogućavaju efikasan rad nad bazom podataka. Rešenje sa kojim se krpimo je Clipper 5.01 i MSC 5.1. Nisam baš srećan sa time, ali dok ne nađem bolje rešenje, to je to. Da se razumemo, pod boljim rešenjem podrazumevam da prelaz na njega neće biti skuplji nego ostanak na sadašnjem rešenju. A da problema ima, ima. Ako je neko uspeo da radi sa kontrolerom prekida iz C modula sa Clipper glavnim programom a da nije zablokirao računar, voleo bih da mi se javi. Miša najbolje zna koliko su trajale moje kuknjave na tu temu :(
baze.podataka.104 ppekovic,
>> Ne. Nijedna komercijalna C++ biblioteka ne može da se po lakoći ili brzini >> rada meri sa Clipperom ili Foxom. Na drugu stranu, ukoliko ti treba nešto >> ekstra, kao telekomunikacije+baze podataka, ili velika fleksibilnost, onda je >> C++ bolje rešenje. Ukazao si na osnovni problem, ali nisi postavio ključno pitanje. Dakle, kakve baze čovek žali da razvija, na kojim platformama, ... Ovo je ključno pitanje za izbor između C++-a, Clipper-a, Fox-a, Access-a, Paradox-a, Oracle-a, DB2, ZIM-a, ... Paya
baze.podataka.105 ppekovic,
>> I ja se kolebam između Access 2.0 i Paradox 4.5 / Paradox Engine 3.0. >> Ima li nekog od iskusnijih da nas posavetuje u koji standard za baze >> podataka vredi ulagati trud, da nebi kroz godinu dana morali da se >> preorijentišemo na sasvim drugu stranu. Mene interesuje mogućnosti Paradox-a u radu sa distribuiranim bazama i da li ima nešto slično Microsoft ODBC-u. takođe, zanima me da li je neko vezao Access sa Oracle SQL-om? Paya
baze.podataka.106 bulaja,
│A da problema ima, ima. Ako je neko uspeo da radi sa kontrolerom prekida │iz C modula sa Clipper glavnim programom a da nije zablokirao računar, │voleo bih da mi se javi. └─── Pogledaj npr. \ibmpc\clipper\int86x.zip ili source za ceo NanFor. Ako nije tajna, za šta vam to treba C a ne možete da rešite stvar u čistom Clipper-u ili preko interapta.
baze.podataka.107 djelovic,
> Zadnjih dva meseca se baš akam sa time, a i bar još toliko ću i voleo > bih da si u pravu. Pravi problem je baš u nedostatku adekvatnih biblioteka > koje omogućavaju efikasan rad nad bazom podataka. Ne bih se složio. Paradox Engine je sasvim pristojno rešenje, naravno pod uslovom da njegove funkcije "obaviješ" C++ klasama. Ja sam svojevremeno napravio par C++ klasa za PE 2.0, i stvar je funkcionisala sasvim O.K. Jedini teret koji je program nosio a koji xBASE jezici nemaju jeste "prijavljivanje" polja u slogovima. Recimo, da bi se deklarisao jedan slog, ja sam morao da napišem: struct MyRecord: public Record { MyRecord (); String ime, prezime; int godine; }; što je u redu, jer i kod xBASE jezika slog mora da se deklariše, s tim što se to tamo radi preko niza. Ono što je meni smetalo je bio deo u kome sam morao da "prijavim" promenjljive: MyRecord::MyRecord () : ime (30), prezime (30) { *this << ime << prezime << godine; } Na drugu stranu, to je posao koji se radi jednom po tabeli, a može se i u dovoljnoj meri automatizovati makroima. P.S. Relacioni model? Fuj! Gledao sam malo neke objektne baze podataka, i moram da kažem da šiju relacione za dva reda veličine kada se radi o čitljivosti i jednostavnosi koda. Problem je u tome što se kod veoma mnogo komplikuje ukoliko aplikacija treba da radi na mreži (don't they all? :)), a ako se radi sa transakcijama onda je sve presporo :(. Obrni-okreni, ne valja.
baze.podataka.108 djorzor,
> Dugo sam proucavao mogucnosti razlicitih > programa i dosao sam do dileme izmedju Access 2.0 ili Paradox 4.5, tj. > Microsoft or Borland. > Kako sam ljubitelj Borlandovih proizvoda odlucio sam se na vec pomenuti > program. Bavim se bazama nekolicinu godina. žak sam zaradio koji dinar na tome. Pošto su baze na kojima radim uglavnom usko specijalizovane (upravljanje projektima) i namenjene određenom korisniku, mnogo mi je bitnije da razvojno okruženje bude user-friendly, nego da performanse gotove baze budu bogzna kakve. Zato sam posle dBASE IV, ORACLE-a prešao na PARADOX for WIN 4.5. Verujem da za programere koji prave baze za obračunavanje plata za 2-3 hiljade ljudi i čije baze treba da rade na XT-u, postoje bolje baze od PARADOX-a.
baze.podataka.109 neman,
> P.S. Zamolio bih Clipper-ase da se ne javljaju u odbranu > svog mezimca (; Pozdrav svima Pa mi imamo svoju temu, a vi evri badi na gomilu ;)
baze.podataka.110 neman,
> Da li neko ima na disketi u vezi ORACLE-a nesto ? ------- Trebace ti nesto vise od diskete ;)
baze.podataka.111 spantic,
> Ako nije tajna, za šta vam to treba C a ne možete da rešite stvar u > čistom Clipper-u ili preko interapta. Nije posebna tajna. Reč je o tome da imam enkoder nakačen na paralelni port i da sa njime upravljam direktno iz C-a. Clipper zapravo služi samo za prikupljanje podataka od operatera. Poruka se upućuje C modulu, a on onda istu transformiše u traženi oblik i šalje na paralelni port. Problem je bio kada je prethodna verzija enkodera tražila da se postavlja kontroler prekida. Clipper ne podnosi takva brljanja :( Srećom, hardverska ekipa mi je posle nonšalantno izjavila kako to "uopšte nije bilo ni potrebno, nego samo onako..." ;)
baze.podataka.112 spantic,
> i jednostavnosi koda. Problem je u tome što se kod veoma mnogo komplikuje > ukoliko aplikacija treba da radi na mreži (don't they all? :)), a ako se > radi sa transakcijama onda je sve presporo :(. Obrni-okreni, ne valja. Sasvim dovoljno :( Zato je mene oduševila mogućnost eksplicitnih i implicitnih realizacija transakcija kod Novell-a.
baze.podataka.113 neman,
> za 2-3 hiljade ljudi i cije baze treba da rade na XT-u, > postoje Jeb*ti firmu koja ima 3000 radnika a rade platu na XTu.
baze.podataka.114 dcolak,
│> za 2-3 hiljade ljudi i cije baze treba da rade na XT-u, │> postoje │ │ Jeb*ti firmu koja ima 3000 radnika a rade platu na XTu. Ne, uglavnom se podaci samo unose i prebiraju na XT-u, a glavni posao rade jače mašine.. Mada, kada vidim šta sve ljudi rade na XT-u sa ORACLE-om.. Sledge DAMMIR!
baze.podataka.115 neman,
> Mada, kada vidim sta sve ljudi rade na XT-u sa ORACLE-om.. Mazohisti ???
baze.podataka.116 nbatocanin,
> P.S. Relacioni model? Fuj! Gledao sam malo neke objektne > baze podataka, i moram da kažem da šiju relacione za dva > reda veličine kada se radi o čitljivosti i jednostavnosi > koda. Jel imaš nešto od ovoga, interesuje me.
baze.podataka.117 dcolak,
│> Mada, kada vidim sta sve ljudi rade na XT-u sa ORACLE-om.. │ │ Mazohisti ??? Ne baš, sve radi sasvim pristojno ;) Sledge DAMMIR!
baze.podataka.118 dr.grba,
>>> P.S. Zamolio bih Clipper-ase da se ne javljaju u odbranu >>> svog mezimca (; Pozdrav svima >> >> Pa mi imamo svoju temu, a vi evri badi na gomilu ;) Što bi rekli: po svecu i tropar (:
baze.podataka.119 nbatocanin,
> Problem je bio kada je prethodna verzija enkodera tražila > da se postavlja kontroler prekida. Clipper ne podnosi > takva brljanja :( Radio sam na projektu u kome je Clipper baza preko C rutina komunicirala sa gomilom periferija preko serijskih/paralelnih portova (od kojih su neki uređaji bili *veoma* egzotični: goniometri, prijemnici, kasetofoni, ...) i to je sve šljakalo ok. Na žalost, ja nisam radio taj deo pa ne mogu ništa preciznije da kažem, a cela ta ekipa je sada kud-koji-mili-moji, pa je teško dobiti neku precizniju informaciju.
baze.podataka.120 spantic,
> prijemnici, kasetofoni, ...) i to je sve šljakalo ok. Na žalost, ja > nisam radio taj deo pa ne mogu ništa preciznije da kažem, a cela ta > ekipa je sada kud-koji-mili-moji, pa je teško dobiti neku precizniju > informaciju. Zaista šteta. Rado bih razmenio iskustva.
baze.podataka.122 ab.comp,
Jedan moj prijhatelj, koji ima SCO UNIX, pita: - gde može da se nabavi FOX za UNIX - da li je izašao FOXPRO za UNIX - koje su, odnosno kolike su (procentualno) razlike između DOS i UNIX verzije FOX-a, da bi aplikacija koja je radila pod DOS-om radila i pod UNIX-om? Odgovore slati na mail. Pozdrav █ █ █ █ ▄▄█ █ █▄▄ █▄▄
baze.podataka.123 peca.st,
HELP! :) Ako je neko vešt sa MS-Access-om, bio bih mu zahvalan ako bi mogao da mi pomogne! :) MAIL WR PECA.ST
baze.podataka.124 fancy,
ŮŢ> Ako je neko vešt sa MS-Access-om, bio bih mu ŮŢ> zahvalan ako bi mogao da mi pomogne! :) Aman, Ivane, sedi i čitaj manual. Do sada bi ga već naučio napamet.
baze.podataka.125 vitez.koja,
#=> Ako je neko vešt sa MS-Access-om, bio bih mu #=> zahvalan ako bi mogao da mi pomogne! :) Postavljajući svaki dan isti zahtev (molbu) nećeš ništa postići (sem možda poneki ignore, to prilično iritira). Možda bi bilo bolje da opišeš svoj problem, potrudi se sam malo, ponudi neke pare za par priv. časova, pročitaj ceo help... sk ps. Prvo definiši šta ti tačno treba, pa traži rešenje :)
baze.podataka.126 mirche,
> HELP! :) > > Ako je neko vešt sa MS-Access-om, bio bih mu .... Kao što rekoh, hvala lepo, zadržaću clipper. :)
baze.podataka.127 peca.st,
Microsoft Access -- pitanje =========================== Pitaću jednostavnu stvar koja se u potpunosti oslanja na knjigu Vladimira Tomaševića ''Access'' (APP Press). Vlada na jednom mestu objašnjava šta su to M:N relacije i daje primer radnika i projekata -- jedan radnik može biti uključen u više različitih projekata, a, isto tako, na jednom projektu mogu raditi posve drugačiji radnici. Jednostavno kada se takva baza ''projektuje''. Ono što ja pitam je: kako napraviti form-ove u kojima bi se unosili, recimo, rakvi radnici, zatim projekti, sve to editovalo, dodavalo, brisalo, sortiralo...? Da ne bih pisao više, ako je neko familijaran sa Access-om, još bih preciznije postavio pitanje. Hvala!
baze.podataka.128 peca.st,
█ Možda bi bilo bolje da opišeš svoj problem, potrudi se sam █ malo, ponudi neke pare za par priv. časova, pročitaj ceo █ help... Odgovor na svoj neprimereni ''predlog'' naći ćeš u privatnoj pošti jer tome ovde nije mesto. Pozdrav.
baze.podataka.129 ppekovic,
>> Ono što ja pitam je: kako napraviti form-ove u >> kojima bi se unosili, recimo, rakvi radnici, zatim >> projekti, sve to editovalo, dodavalo, brisalo, >> sortiralo...? U tvom primeru imaš radnika i projekat. Dakle, model objekti veze bi izgledao ovako: ┌──────────┐ 1:M / \ 1:M ┌────────────┐ │ RADNIK ├─────────< radi >─────────────┤ PROJEKAT │ └──────────┘ \ / └────────────┘ Prevedeno u relacioni model imaćeš recimo: radnik( sifrad#, ime, prezime, ... ) projekat( sifproj#, naziv, ... ) radi( sifrad, sifproj ) Napravi tabele radnik, projekat i radi. Poveži tabele radnik i radi kao i radi i projekat preko odgovarajućih atributa (Edit/Relationships). Kardinalnosti neka budu 1:M. Sada kreni da praviš form. Napravi form nad tabelom radi i to tabular. Zatim, napravi form nad tabelom radnik. U taj form umetni kao subform form nad tabelom radi koji si prethodno napravio. To se radi tako što iz onog osnovnog database prozora, dok edituješ form za radnike, klikneš na forms pa onda jednostavno formu za radi preneseš na formu za radnika. To je to. Istu priču možeš da napraviš u suprotnom smeru dakle, form:projekat, subform:radi. Naravno, ovo je samo osnovna ideja, za dalje pitaj konkretno šta te muči pa da rešimo. Paya
baze.podataka.130 dbarbul,
1. Da li je neko uspeo da iz CLARION-a 3.0 poziva svoje funkcije pisane u C-u ili asembleru. 2. Da li neko ima Top Speed asembler i/ili C. MM Odgovori mogu i u mail. Dule B.
baze.podataka.131 bulaja,
Ima li neko objašnjenje strukture .FPT datoteka (memo polja za FoxPro i CLipper/SIxCDX .DBF baze podataka) ili još bolje :) neki utility za popravak oštećenih .FPT? Imam slučaj neke pobrljane baze podataka gde se može pristupiti samo minimalnom broju tekstova u memo poljima, ali se iz direktnog pregleda .FPT datoteke može videti da su svi tekstovi i dalje tu, jedino ima malo djubreta u header-u :).
baze.podataka.132 sinfos,
da li ima neki program koji ce da pretvori .dbf u .txt ????
baze.podataka.133 jolicm,
U Clipperu postoji naredba COPY TO Primer: ULAZ - naziv *.dbDBF datoteke IZLAZ - naziv TXT datoteke koja ti treba. Use ulaz copy to izlaz sdf quit ili Use ulaz copy to izlaz delimited quit kompajliraš sa clipper program linkuješ sa: rtlink program i to je sve ako imaš negde blizu programera na clipperu on će ti to sigurno napraviti za manje od minuta. Ako ti treba univerzalan program moze se uvesti i dve GET naredbe ijedno READ i to je sve Pozdrav :)
baze.podataka.134 nbatocanin,
> da li ima neki program koji ce da pretvori .dbf u .txt U bilo kom xBase proizvodu upotrebi COPY TO sa opcijom DELIMITED ili SDF.
baze.podataka.135 jolicm,
Da li neko ima iskustva u radu sa klarionom, da li vredi preći sa klipera na klarion ? koliko je to teško za nekog ko zna clipper, c, ASM, basic, cobol. Molim vrlo kratko koje su mu prednosti ? :)
baze.podataka.136 djelovic,
> Da li neko ima iskustva u radu sa klarionom, > da li vredi preći sa klipera na klarion ? > koliko je to teško za nekog ko zna clipper, c, ASM, basic, cobol. > Molim vrlo kratko koje su mu prednosti ? :) 1. Clarion kao jezik nije ništa posebno. U odnosu na, recimo, Clipper, Clarion mu nije ni do kolena. 2. Clarion 3.X kao generator aplikacija je *fantastičan*. Aplikacije se pomoću miša i menija pišu zaista brzo, a rade sasvim dobro. Podržava relacioni model, rad na mreži se bira jednostavnim čekiranjem odgovarajućeg polja, itd. 3. Clarion 3.X ima toliko bagova da je za praktične upotrebe neupotrebljiv. Bilo bi lepo ako bi neko napravio generator aplikacija kao onaj u Clarionu za Clipper, to bi ubrzalo kreiranje aplikacija deset puta.
baze.podataka.139 iboris,
Ł da li vredi preći sa klipera na klarion ? Po meni je to "sa konja na magarca". Klarion je generator programa, ali je, koliko sam video vrlo bagovit. Jeste da se jednostavne stvari mnogo brzo napišu, ali zato neke malo komplikovanije stvari pucaju po svim šavovima.
baze.podataka.140 misa.m,
>> Ima li neko objašnjenje strukture .FPT datoteka (memo polja za FoxPro Možda ti pomogne struktura FPT, od FoxPro 2.0 pa dalje: MEMO HEADER: 00-03 Location of next free block * 04-05 Unused 06-07 Block size (bytes per block) * 08-511 Unused Bloch HEADER & TEXT: 00-03 Block signature (indicates type of data in block) * a. 0 - Picture field type b. 1 - Text (memo) field type 04-07 Length of memo (in bytes) * 08-n Memo text (n=length) * Number represented in left-to-right order in hexadecimal Memo datoteka sadrži 1 header i više blokova. Heder sadrži adresu sledećeg praznog bloka i njegovu veličinu koja je definisana u trenutku kreiranja datoteke (SET BLOCKSIZE komanda). Svi memo blokovi startuju na "even block boundary addresses" DBF datoteka sadrži na adresi 00 tip memo datoteke: 0x03 - no memo 0x83 - FoxBase+/dBase III+ with memo 0xF5 - FoxPro with memo 0x8B - dBase IV with memo
baze.podataka.141 eotek,
> da li ima neki program koji ce da pretvori .dbf u .txt ???? mozda ce ovo pomoci ???? (lista .dbf, redirekcijom u fajl, na stampac ...) dbf2txt.zip
baze.podataka.144 mmitrovic,
Imam jedan metuzalemski zahtev, treba mi format DBF fajla sa opisom polja i mogućim vrednostima. Takođe, ali nije hitno, format index fajlova za Dbase, Clipper i Fox. To je sve ;)
baze.podataka.146 dr.grba,
>> Imam jedan metuzalemski zahtev, treba mi format DBF fajla sa opisom >> polja i mogućim vrednostima. Takođe, ali nije hitno, format index fajlova >> za Dbase, Clipper i Fox. To je sve ;) HINT: knjiga "Clipper 5: Vodič za programere" by Rick Spence ne samo da priča i analizira neke od ovih formata na kraju knjige, nego daje i alate za čačkanje istih.
baze.podataka.147 ikordic,
=> da li ima neki program koji ce da pretvori .dbf u .txt ???? Pa, ne znam za neki konkretan, ali je posao u principu trivijalan, pod uslovom da nema memo-polja. Ako ih ima, treba samo malo više petljancije. Najprostiji način ti je da iz dBase-a ili Fox-a uradiš COPY TO <ime> SDF/DELINITED. Alternativno, prg bi se mogao napisati u Clipperu ili C-u. Javi ako ti ustreba nešto takvo.
baze.podataka.148 sir.oracle,
Ima jedan: JA Koristim ga za grafiku (dijagrame) posto mi je to jeftinija varijanta nego da kupujem Oracle Graphics. Tu i tamo odradim po neku manju aplikaciju samo za MS Access pa imam i ja jedno par pitanja: 1) Da li se za Access 2.0 pojavio runtime (distribution kit). 2) Ako jeste da li je malo inteligentniji od onog za verziju 1.1 posto u ovome moze ladno da se izlista ceo sors. :( 3) Kako u verziji 1.1 najednostavnije uraditi upgrade aplikacije, sto podrazumeva: a) Backup podataka (sadrzaja tabela iz datoteke ?.mdb) b) Kopiranje nove verzije ?.mdb c) Restore podataka Nemojte zuriti sa odgovorima iz 2 razloga: 1. Problem nije jednostavan (resenje mora biti 101% pouzdano) i ako neko zuri sa resenjem, a nije prakticno probao ovo da izvede bilo bi dobro da naznaci da je resenje teorijsko. Samo da dodam jos 2 otezavajuca uslova: U aplikaciji su definisane relacije nad tabelama sa ogranicenjima za brisanje sadrzaja, a u novoj verziji aplikacije kojom se vrsi upgrade menja se i struktura tabela (npr. dodaju se nova polja u tabelama). 2. (ovaj je sigurno ubedljiviji) Na odmoru sam do 22.8.1994.
baze.podataka.149 mmitrovic,
Ů█▀█Ţ HINT: knjiga "Clipper 5: Vodič za programere" by Rick Spence ne samo da Nemam tu knjigu, niti znam nekoga da to ima. So, ako vlasnika ne mrzi nek mi baci te formate.
baze.podataka.150 isimic,
Trenutno sam u velikom poslu pa nemam vremena da ti to 'bacim', pa ako te ne mrzi javi se na 140-019 da se dogovorimo kako da uzmeš knjigu na posluženje. Pozdrav, Zoran.
baze.podataka.151 milanv,
║║ Ů█▀█Ţ HINT: knjiga "Clipper 5: Vodič za programere" by Rick Spence ne ║║ samo da ║║ ║║ Nemam tu knjigu, niti znam nekoga da to ima. ║║ So, ako vlasnika ne mrzi nek mi baci te formate. Iskali ste, eve vam ga :). Iz "Jedrenjaka" pravo u vaše kompjutere: Struktura je prikazana C formatom, uz uključni fajl DBF.H: .DBF /*** * dbf.h */ typedef struct š char dbf_id char last_updateŠ3Ć long last_rec unsigned data_offset unsigned red_size char fillerŠ20Ć ć DBF_HEAD 1) 03 (hex) -> baza podataka, 83 -> memo 2) datum poslednje promene: godina (pos. 2 broja), mesec i dan 3) broj pos. zapisa. Vrednost koja se dobija sa RECCOUNT() 4) pozicija od koje počinju stvarni podaci. Vrednost zavisi od broja obeležja u zapisu 5) vel. svakog zapisa. To je suma dužina svih obeležja +1 za znak izbrisanosti zapisa 6) 20 praznih bajtova. .DBT Prvih 512 bajtova su naslov. Prva četiri su tipa long i specificiraju broj zapisa duž. 512 bajtova u datoteci, uklj. i naslov. Ostatak naslova je neiskorišćen. Obeležje tipa memo može da bude bilo koje dužine do 64K, a sastoji se od niz zapisa duž 512 bajtova. Posledica je da čak 511 bajtova može da ostane neiskorišćeno (izuzetak je zapis koji završava datoteku. On zauzima onoliko bajtova koliko mu je potrebno. Za njim sledi znak kraja datoteke 1A.). .FRM short lign1 dva bajta tipa integer vrednosti 02 short exp_end sadrži sled. slobodni znak u exp_area short exp_lengthŠ55Ć dužine izraza. Indeks je broj izraza short exp_indexŠ55Ć indeksi u exp_area gde počinje svaki izraz char exp_areaŠ1440Ć oblast gde se nalaze izrazi indeksirani sa dve prethodne ind. prom. FRM_FIELD fieldsŠ25Đ ima element za svako polje u izveštaju. Prvo (indeks 0) se ne koristi short title_exp_num broj izraza za niz znakova naslova short grp_on_exp_num broj izraza za podgrupu (SUB GROUP ON) short grp_head_exp_num broj izraza za niz znakova naslova za grupu. Nije izraz! short sub_head_exp_num broj izraza za niz znakova za podgrupu short page_width širina strane short line_per_page broj linija po strani short left_marg veličina leve margine short right_marg short num_of_cols broj kolona (ili obeležja) char dbl_space Y ili N. Da li se koristi dvostruk8i prored ili ne char summary Y ili N. Da li se koristi sažet izvištaj ili ne char eject Y ili N. Novi list za svaku grupu? char plus_bytes ind ravnih izveštaja u verzijama pre dB III+. Sada sadrži vred. u tri bita: izbacivanje lista pre štampanja izbacivanje lista posle štampanja ravan izveštaj short sign2 nije opisano Za svako polje izveštaja postiji strukura FRM_FIELD koja se čuva u indeksiranim prom. polja prethodno opisanih. Svaka od njih ima sled. format: short width širina u kojoj se štampa polje short pad1 znak za popunjavanje od dva bajta char total da li se sumira brojčano obeležje char dec broj decimalnih mesta za brojčana obeležja short exp_contents broj izraza za sadržaj polja exp_header broj izraza za niz znakova naziva polja. Niz znakova, ne izraz! Uh! Toliko za sada. Preostali su: .LBL, .MEM, .NTX i .NDX. Loži nekog drugog da mi pomogne. Ako ti ne uspe :) a neophodan ti je još neki tip fajla, viči... Pozdrav, Milan.
baze.podataka.152 ndragan,
/ Kako u FOXPRO-u dobiti podatke o kirisnicima, grupama ... / na NOVELL NetWare operativnom sistemu Beats me. Sys(0) daje "# 0" kao da uopšte nisi u mreži (čak je glupa mala RPTI mreža lepo javljala "DINGO #264"). Jedino što sam dosad smislio je jedno Set ime="%LOGIN_NAME" u startup.ncf, bar da znam ko se javio. Posle iz aplikacije ko_sam=GetEnv("ime") do case case ko_sam="PPeric" ... Novel 4.0 je ladno zadržao velika i mala slova onako kako se pojavljuju u listi objekata, ne šmirglajući 5/100 to što sam se prijavljivao kao pPeric, PpErIc itd, uvek je bilo PPeric, sečeno na osam znakova ako je duže. Trebalo bi malo pročešljati netware.plb, možda ima nešto, takođe i foxtools.plb (odnosno .fll u pendžerskoj verziji).
baze.podataka.153 ndragan,
/ Ispravka! Ne radi! Odnosno, radi, ali sa još čudnijim efektima. Kad se / prvi 2.5 je možda malo bagovit, ali zar ne treba da proveriš da takva šifra postoji u drugoj bazi, i to valjda ovako: :v=a.sifra=b.sifra ; tj da zahtevaš da se u b zoni upravo nalazi ono što si ukucao u a.
baze.podataka.154 bulaja,
**** new file **** R:\IBMPC\C\*.* ---------------------- bltc18z zip 256858 Bullet for C 1.03z: B-tree/dBase (DBF) database toolkit BULLET is a super-fast, super-small B-tree/dBASE .DBF, transaction-based, multi-user database toolkit for DOS C/C++ compilers. Also availble for BASIC. BULLET DOS C version 1.08z, 01-Aug-94.
baze.podataka.156 iritel,
Potreban mi je mali savet ili preporuka. Radi se o sledecem: U jednoj aplikaciji pisanoj u C-u, koja radi pod SCO Unix-om, potrebno je dograditi odredjeni skup funkcija za rad sa bazama podataka (DBF format). Kako to najlakse resiti ? Postoji li neka biblioteka C funkcija za ovakve namene ? Ili neki drugi alat ? Unapred zahvalan, Zoran Miljkov
baze.podataka.157 djelovic,
> rad sa bazama podataka (DBF format). Kako to najlakse resiti ? > Postoji li neka biblioteka C funkcija za ovakve namene ? Pogledaj u C direktorijumu, imaš tamo neke biblioteke sa izvornim kodom koje bi ti mogle poslužiti. Jedna od njih je CBASE*.
baze.podataka.158 ndragan,
Jel ima neko pojma kako u lisici za prozore (fox4win) promeniti font kojim se ispisuju meniji i (fox style) help? Onaj difolt fixedsys je ogavan (bar da koristi neku krupniju verziju), a foxprint.fon u helpu je još gori. _više_ sam popizdeo. Bue_ NDragan
baze.podataka.159 djelovic,
> Jel ima neko pojma kako u lisici za prozore (fox4win) promeniti font kojim > se ispisuju meniji i (fox style) help? Onaj difolt fixedsys je ogavan (bar > da koristi neku krupniju verziju), a foxprint.fon u helpu je još gori. To nema veze sa Foxom već sa Windowsima. Da bi promenio taj font moraš da izmeniš stavku "fixedsys=..." u SYSTEM.INI. Ili uzmi program SYSFON iz Sezamovih dirova, ona ti daje "vizuelni" izbor fonta. Što se tiče helpa, mislim da nema šanse da izmeniš font. Fontovi upotrebljeni u .HLP datotekama su tamo "ugrađeni", pa nikakvo menjanje sistemskih fontova ne pomaže.
baze.podataka.160 iritel,
>>> rad sa bazama podataka (DBF format). Kako to najlakse resiti >>> ? Postoji li neka biblioteka C funkcija za ovakve namene ? >> >> Pogledaj u C direktorijumu, imas tamo neke biblioteke sa >> izvornim kodom koje bi ti mogle posluziti. Jedna od njih je >> CBASE*. CBASE sam skinuo i pogledao pre nego sto sam poslao poruku. Iz onoga sto tamo pise nisam zakljucio da radi sa DBF formatom zapisa, pa sam od toga digao ruke. Voleo bih da sam brzopleto pogresio, medjutim na osnovu tvoga odgovora ne mogu da zakljucim sta mi je ciniti: da li da preispitam svoj zakljucak ili da trazim dalje. Da pojasnim pitanje: hoce li baza podataka kreirana pomocu programa zasno- vanog na CBASE biblioteci biti citljiva pomocu npr. DBASE-a ili FOX-a ? Pozdrav, Zoran Miljkov
baze.podataka.161 djelovic,
> Da pojasnim pitanje: hoce li baza podataka kreirana pomocu programa > zasnovanog na CBASE biblioteci biti citljiva pomocu npr. DBASE-a > ili FOX-a ? Ne mogu da tvrdim 100%, ali mislim da CBASE piše datoteke u DBF formatu.
baze.podataka.162 ndragan,
/ Što se tiče helpa, mislim da nema šanse da izmeniš font. Fontovi / upotrebljeni u .HLP datotekama su tamo "ugrađeni", pa nikakvo menjanje Nisam bio precizan, mislio sam na dos-style help, dakle sa foxhelp.dbf a ne sa .hlp; radi se u stvari o samom foksovom help prozoru, koji formalno ne postoji (Wexist("help") daje .f., valjda... hm, to još nisam probao), a font u njemu čak nije fixedsys, nego foxprint, koji lepo prikazije dosove q&q (kuke+kvake) ali uz podršku za 852 (a moram da je držim, pošto radim naizmenično mađarsku i srpsku verziju) uglovi na okvirima koji imaju nešto jednostrukih i nešto dvostrukih strana bivaju zauzeti nekim tamo rumunskim, poljskim i turskim slovima. Drugi problem je što sve popapove ispisuje fixedsys ako je normalan, odnosno sa foxprint i to jako sitnim ako popap ima naslov (nešto kao emulira dos verziju, pa radi toga), što onda ruši kompletnu šminku u ostatku aplikacije. Ako treba da se promeni system.ini ili tako nešto iz samog foksa, ili da se krne neki font gde mu mesto nije, postoji bogat sloj funkcija u foxtools.fll, tako da nije problem pozvati bilo koji .dll ili sistemsku funkciju pendžera, samo treba znati dva detalja, ime i parametre ;). Inače, za .hlp može da se definiše font, ali prilikom kompajliranja help fajla. Bogami me namučio .RTF format, pošto mali mekani insistira na tome da se .rtf piše iz Vorda 'ili drugog editora koji može da radi .rtf format'. Kod mene se help iz dos verzije aplikacije već nalazi u nekoj bazi gde se lako menja dodaje itd, i ne pada mi na pamet da ga sad izvozim u nekakav .txt pa ručno prečačkavam u .rtf edabi se dalo prekompajlirati u .hlp, nego sam morao da provaljujem .rtf format i bogami uzeo mi je nekoliko dana dok nisam napravio rutinu za prepis iz moje baze u .rtf format. Još nisam zadovoljan rezultatom, ali bar radi i može da se čačka do mile volje. Vord, naravno, odbija da čita takav fajl (tvrdi da to nije .RTF ili samo javlja da ne može da ga otvori), ali ga hc31.exe ladno čita i pravi .hlp fajl. Ako nekog zanima kako na pešački način napisati .rtf za help, mogu da bačim koji hint. Za neke stvari baš nisam siguran šta i kako rade, jednostavno sam prepisivao iz onog jednog primera i mućkao dok nije proradilo. Hm, odužih. Tako je to kad tri godine čantram kako ne podnosim pendžere i na kraju moram da radim u njima. Bljah.
baze.podataka.163 leonardo,
Hi, zamolio d.petrovic da vas pitam: Koju relaionu bazu podataka za rad pod unix-om preporucujete ?
baze.podataka.164 iritel,
>> Ne mogu da tvrdim 100%, ali mislim da CBASE pise datoteke u DBF formatu. Hvala na odgovoru. Zoran Miljkov P.S. Ako je neko probao CBASE nek bude ljubazan da javne. Ako ostanemo bez odgovora krecemo u "istrazivanje".
baze.podataka.165 pele,
Mojoj drugarici je potreban neko ko bi joj uradio bazu podataka u fortranu. Za tu uslugu je spremna da plati. Ostale informacije i ponude na meni na mail. pele.
baze.podataka.166 ikordic,
=> Pogledaj u C direktorijumu, imaš tamo neke biblioteke sa izvornim => kodom koje bi ti mogle poslužiti. Jedna od njih je CBASE*. Ima li neko iskustva sa ovim? Komfor, brzina, pozdanost, neka paralela sa Clipper-om, ...
baze.podataka.167 djelovic,
> Ima li neko iskustva sa ovim? Komfor, brzina, pozdanost, neka paralela sa > Clipper-om, ... Nije ni do kolena Clipperu.
baze.podataka.168 nbatocanin,
> Da pojasnim pitanje: hoce li baza podataka kreirana pomocu > programa zasno- vanog na CBASE biblioteci biti citljiva > pomocu npr. DBASE-a ili FOX-a ? Ovo ne znam, ali znam da sa CodeBase hoće.
baze.podataka.169 vitez.koja,
#=> Ako nekog zanima kako na pešački način napisati .rtf za #=> help, mogu da bačim koji hint. Za neke stvari baš nisam Slobodno :)
baze.podataka.170 iritel,
>> Ovo ne znam, ali znam da sa CodeBase hoce. A postoji li verzija CodeBase-a za SCO Unix (ja sam video da se pominju samo verzije za DOS i Windows) ? Pozdrav, Zoran Miljkov
baze.podataka.171 max.headroom,
Možda nekome ko radi sa Fox-om bude interesantno: Funkcija NETWARE() - poziva Novell-ov API Novell-ov NetWare API radi sa "paketima". Potrebna su dva paketa: Request i Reply. Prva dva bajta oba paketa sadrže njihove dužine. Ostatak sadržaja paketa varira u zavisnosti od toga koju funkciju API-ja pozivamo. Koristeći f-ju FP_INT86() za DOS, moguće je kreirati posebnu funkciju za pozivanje NetWare API-ja. Pozivanje API-ja se sastoji iz sledećih koraka: 1. Kreiranje REQUEST paketa. To je FoxPro string koji sadrži razne podatke potrebne API-ju. 2. Kreiranje praznog REPLY paketa, koji mora biti dovoljno veliki da primi podatke vraćene od API-ja. 3. Punjenje DOS registara, što podrazumeva broj API f-je i pointere na REQUEST i REPLY pakete. 4. Izvršavanje DOS interapta. 5. Uklanjanje bajtova koji označavaju dužinu sa početka REPLY paketa. 6. Vraćanje error koda DOS poziva. FUNCTION NetWare PARAMETERS nService,cRequest,cReply DIMENSION aRegs(10) PRIVATE nReturn nReturn = -1 aRegs(1) = nService * 256 aRegs(8) = CHR(LEN(cRequest))+CHR(0)+cRequest aRegs(5) = .T. aRegs(9) = CHR(LEN(cReply))+CHR(0)+cReply aRegs(6) = .F. IF fp_int86( 33, čaRegs ) nReturn = aRegs(1) % 256 IF nReturn < 0 nReturn = nReturn + 256 ENDIF ENDIF cReply = SUBSTR(aRegs(9),3) RETURN nReturn
baze.podataka.172 max.headroom,
A evo i malo funkcija za komforniji rad sa NetWare-om: U pitanju je skup rutina koje konvertuju NetWare rezultate u format razumljiv Fox-u. Kada NetWare vrati string, ovaj se završava NULL bajtom. Da bi Fox sa ovakvim stringom mogao dalje da barata, NULL bajt i svi ostali iza njega moraju biti "otkinuti". Obrnuto, kada se stringovi prosleđuju NetWare-u, moraju biti prekrojeni na odgovarajuću dužinu i "ukrašeni" NULL bajtom. Slično je i sa brojevima, od kojih NetWare razlikuje: bytes, integers i long integers. ---------------------------------------------------------------------- * SVRHA: F-ja uklanja sve karaktere koji slede iza NULL karaktera, * uključujući i njega samog. * SINTAKSA: <cString> := CleanStr(cNovellString) * ARGUMENT: cNovellString - string koji je vratila neka Novell API * f-ja. FUNCTION CleanStr PARAMETER cString PRIVATE x x = AT(CHR(0),cString) RETURN IIF(x=0, cString, SUBSTR(cString, 1, x-1) * SVRHA: F-ja popunjava string sa NULL karakterima * SINTAKSA: <cLstring> := Lstring(cString,nSize) * ARGUMENTI: cString - Bilo koji string * nSize - Dužina stringa koji se kreira FUNCTION Lstring PARAMETERS cString, nSize RETURN CHR(nSize)+PADR(ALLTRIM(cString), nSize, CHR(0)) * Novell INTEGER -> FoxPro FUNCTION Int2Fox PARAMETER cInteger PRIVATE nValue nValue = 256 * ASC(cInteger) + ASC(SUBSTR(cInteger,2,1)) RETURN nValue * FoxPro -> Novell INTEGER FUNCTION Fox2Int PARAMETER nValue RETURN CHR( nValue / 256 ) + CHR( nValue % 256 ) * Novell LONG INTEGER -> FoxPro FUNCTION Long2Fox PARAMETER cInteger PRIVATE nValue nValue = ASC(SUBSTR(cInteger,1,1)) * 65536 + ; ASC(SUBSTR(cInteger,2,1)) * 4096 + ; ASC(SUBSTR(cInteger,3,1)) * 256 + ; ASC(SUBSTR(cInteger,4,1)) RETURN nValue * FoxPro -> Novell LONG INTEGER FUNCTION Fox2Long PARAMETER nValue RETURN CHR( nValue/65536 ) + ; CHR( nValue%65536 )/4096 + ; CHR( nValue%4096 )/256 + ; CHR( nValue%256 ) * Šestocifreni INTEGER string -> FoxPro num. FUNCTION Six2Fox PARAMETER cInteger RETURN ASC(SUBSTR(cInteger,1,1)) * 16777216 + ; ASC(SUBSTR(cInteger,2,1)) * 1048576 + ; ASC(SUBSTR(cInteger,3,1)) * 65536 + ; ASC(SUBSTR(cInteger,4,1)) * 4096 + ; ASC(SUBSTR(cInteger,5,1)) * 256 + ; ASC(SUBSTR(cInteger,6,1)) * FoxPro num. -> long (šestocifreni) string FUNCTION Fox2Six PARAMETERS nValue RETURN CHR( nValue/16777216) + ; CHR((nValue%16777216)/1048576) + ; CHR((nValue%1048576)/65536) + ; CHR((nValue%65536)/4096) + ; CHR((nValue%4096)/256) + ; CHR(nValue%256) Eto, to je to. Uskoro spuštam još neke zanimljivosti vezane za konkretno korišćenje pomenutih funkcija, rad sa BINDERY-jem, itd.
baze.podataka.173 bulaja,
│A postoji li verzija CodeBase-a za SCO Unix (ja sam video da se pominju │samo verzije za DOS i Windows) ? └─── Uz CodeBase se dobija source cele biblioteke koji bi trebao da može da se portuje na UNIX.
baze.podataka.174 nbatocanin,
>>> Ovo ne znam, ali znam da sa CodeBase hoce. > > A postoji li verzija CodeBase-a za SCO Unix (ja sam video > da se pominju samo verzije za DOS i Windows) ? Koliko znam postoji, ali je nisam video. Ceo CB je dat u sorsu, ali čini mi se da ima delova za najniži pristup u ASM-u. Jedan moj prijatelj je preradio DOS verziju za Xenix i kaže da je proradilo, ali da je imao problema. Njegov izbor za baze na Unixu je ipak Fox - pri proceni ove izjave treba imati u vidu da je taj tip prvo naučio C, pa onda srpski ;)
baze.podataka.175 milanv,
Prvi put sam se suočio sa .MDB bazama (Access 1.1 iz Visual Basic-a 3.0) i oduševio se kada sam uporedio karakteristike sa .DBF bazama Clipper-a. Međutim, već prilikom prve upotrebe iste naleteo sam na kosku, pa pitam: Da li je zaista moguće da već uneta polja u tabelu nije moguće modifikovati (ime, tip, dužina) ni dok podaci nisu uneti, a kamoli kada se unese gomila istih??? Da li postoji neki program za laku manipulaciju tim bazama, tipa DBU za .DBF? Za sada mi je na raspolaganju Data Menager iz VB. (Nemojte mi preporučivati Access:). Kako najlakše prebabaciti stotine kilobajta podataka iz .DBF u .MDB? Hvala, unapred.
baze.podataka.176 mdrazic,
Za ljubitelje Clipper-a i UNIX-a: prekucavam reklamu za Recital softver (bez prevođenja zbog vremena): Recital brings the power of Clipper to UNIX The latest version of Recital for UNIX can now read and update native Clipper-database and index files. No file conversion is needed. Recirtal supports most Clipper commands and functions, and allows Clipper applications and data developed in MS-DOS to run under the UNIX operating system. Recital is the only Xbase product in the world that offers compatibility with FoxPro, dBase IV, and Clipper. Clipper applications running on UNIX use full color support with the look and feel of PC applications. Recital also connects in to most SQL database products on UNIX, including Oracle, Informix, DB2, and Sybase. Recital for UNIX is available for all major UNIX platforms including Intel 386/486/Pentium, IBM RS/6000, SUN SPARC, HP9000, Digital Alpha/AXP and many more. Recital for UNIX can share data and applications with Clipper running on MS-DOS using portable Netware for UNIX or PC/NFS. (sada ide malo beznačajne žvake...) Includes: Integrated data dictionary dBase IV 2.0 with Object-oriented extensions Supports Clipper extend system on UNIX Supports FoxPro windowing, Browse, and much more... Recital Corporation USA: 508-750-1066, fax: 508-750-8097 UK & International: +44-(0)344-301444, fax: +44-(0)344-300689 O istom paketu iz Buyer's Guide-a: Recital Recital, Danvers, MA 508-750-1066, 800-873-7443 A fourth-generation application development environment with a client/server architecture ideal for application development and system migration. Developers can use Recital's 4GL tools to build applications portable to VAX/VMS, OpenVMS, OSF/1, HP MPE/XL, DOS, Motif, Windows, and more than 70 Unix platforms. The Recital tool set includes an object oriented active data dictionary, event-driven triggers, before- and after-image journaling, screen painter, report writer, pop-up and pull-down menuing, dialog boxes, support for SQL, and support for Ethernet and NetWare networks. Also includes an open API for incorporating 3GL objects as built-in Recital executables. Recital is compatible with widely used PC application development languages such as dBASE IV, dBASE III Plus, FoxBase, FoxPro, and CA-Clipper. Applications and data may be migrated to more than 70 platforms without program modification. Recital server interface and SQL Gateways provide read/write access to Oracle, Sybase, DB2/6000, Rdb, and Informix. O ceni nigde ni pomena. Baš ga nahvališe. Da pola u vodu bacimo, ipak ostaje još pola.
baze.podataka.177 max.headroom,
Elem, napomenuh da ću da spustim nešto što bi FoxPro programeru pomoglo da lakše barata BINDERY-jem NetWare-a. Dakle: BINDERY je baza podataka o korisnicima (users), grupama (groups), print queue-ovima i sličnim bitnim stvarima, a nalazi se na svakom file-serveru. Koristeći Bindery, file-server proverava user ID, lozinke i pristupe korisnika queue-ovima i direktorijumima (njim se određuje čak i prostor na disku koji svaki od korisnika može da zauzme). Mreža otvara bindery fajlove kada se pokrene i ostavlja ih otvorenim i zaključanim sve vreme. Samo supervisor može da ih zatvori. SYSCON je program koji omogućava direktno ažuriranje ovih podataka iz DOS-a. Bindery je organizovan kao skup objekata. Objekat može biti "client" ili "server". Korisnici su "clients", na primer, a print queue je "server". Svaki objekat ima ime, tip i određeni broj setovanja koji su mu pridruženi (uz svako setovanje, logično, ide i jedna ili više brojnih vrednosti). OBJEKTI - iako Bindery može da ima do 65000 objekata, ovaj broj ne bi trebao biti veći od 1000. Objekat može biti "user", "gruop" ili "resource". Na primer, IVANA može biti korisnik u grupi ZAPOSLENI, a koja ima pristup LASER_PRINT_QUEUE-u. Koristeći Bindery možemo odrediti da li korisnik IVANA ima pravo pristupa laserskom printeru. Svaki objekat se sastoji od sledećih pet delova: - Object ID - broj dodeljen od strane NetWare-a za svaki objekat. To je četvorobajtni integer (unique za celu mrežu). - Object Name - string koji predstavlja ime objekta. Za "user" objekat, to može biti npr. ime korisnika. String može biti dugačak najviše 47 karaktera. - Object Type - numerička vrednost koja određuje tip objekta. Sledeća tabela prikazuje dozvoljene tipove: Vrednost Tip objekta -------- ------------------------------------ 1 Korisnik (user) 2 Grupa korisnika (user group) 3 Print queue 4 File server 5 Job server 6 Gateway 7 Print server 8 Archive queue 9 Archive server 10 Job queue 11 Administration 33 NAS SNA gateway 35 Async gateway 36 Remote bridge server 38 Async bridge 40 X.25 bridge 45 Time synchronization server 46 Archive server 71 Advertising print server 80 Btrieve value-added Process 83 Print queue user 162 Bindery 163 Oracle DB server 167 Rconsole (dva ili više objekata mogu imati isto ime, ali im tipovi moraju biti različiti) - Object Flag - pokazuje da li je objekat "static" ili "dynamic". Dinamički objekti su privremeni i brišu se pošto se mreža spusti. Statički objekti ostaju u Bindery-ju dok se implicitno ne uklone. - Object Security - read-write pristup za svaki objekat, označava da li definisanom objektu mogu ppristupiti drugi objekti. To je jednobajtna vrednost: prva 4 bita ukazuju na write-security, poslednja 4 na read-security. Dozvoljene su sledeće kombinacije: Vrednost Značenje -------- ------------------------------ 0 Svako može pristupiti objektu 1 Korisnici ulogovani na server 2 Samo tekući objekat 3 Samo supervisor 4 Samo NetWare operativni sistem PRONALAčENJE OBJEKATA NetWare sadrži API f-ju koja se može iskoristiti da prikaže listu svih objekata sa zadatim tipom. F-ja N_SCANBINDERY() uzima tip objekta i matricu kao parametre, a vraća broj pronađenih objekata. Ona takođe popunjava matricu sa svim objektima koji odgovaraju zadatom tipu. * SINTAKSA: nCount = N_ScanBindery ( nType, čaObjects ) * ARGUMENTI: nType - tip objek(a)ta koji će biti vraćeni * aObjects - matrica sa objektima zadatog tipa FUNCTION N_ScanBindery PARAMETERS nType,aObjects PRIVATE cBuffer,cRequest,nCount,cList,x,y,z nCount = 0 cBuffer = SPACE(57) cRequest = CHR(55) + CHR(255) + CHR(255) + CHR(255) + ; CHR(255) + CHR(0) + CHR(nType) + Lstring("*",48) cList = "" DO WHILE NetWare( 227, cRequest, čcBuffer ) == 0 .AND. ; LEN(TRIM(cBuffer)) > 0 *** Izdvoj ime objekta i smesti ga u matricu nCount = nCount + 1 cList = cList + CleanStr(SUBSTR(cBuffer,7,48))+";" cRequest = SUBSTR(cRequest,1,1) + SUBSTR(cBuffer,1,4) + ; SUBSTR(cRequest,6) ENDDO IF nCount > 0 DIMENSION aObjects(nCount) z = 1 FOR x = 1 TO nCount y = AT(";",cList,x) aObjects(x) = SUBSTR(cList,z,y-z) z = y + 1 NEXT ENDIF RETURN nCount ----------------------------------------------
baze.podataka.178 max.headroom,
Ima li neko opis hedera DBF fajla (FoxPro)? Pravio sam neku sitnu rutinu koja podiže bazu kada joj se uništi heder, ali sam naleteo na kosku pokušavajući da "povratim" sadržaje Memo polja. Video sam da to ne radi ni FILEFIX iz Nortonovog paketa... Hmh... (Zar ne bi bilo sjajno kada bi napravili univerzalnu f-ju za otvaranje baza, a ako joj je slučajno oštećen heder ili neki indeks sve se automatski recover-uje i korisnik nema potrebu za reindex-om? :) Sve sam ja to lepo složio u makinu, kad ono - MEMO polja mogu da pozdravim...)
baze.podataka.180 max.headroom,
A sada evo i konkretnog primera korišćenja N_ScanBindery f-je: DIMENSION aUsers(1) IF N_ScanBindery(1,čaUsers) = 0 WAIT "Nema ni jednog korisnika" WINDOW TIMEOUT 30 ENDIF Navedeni program vraća listu (aUsers) NetWare korisnika. ODREĐIVANJE SIGURNOSNOG NIVOA Evo i funkcije kojom se određuje sigurnosni nivo. Argument može biti: U - korisnikov User ID R - read security W - write security * SINTAKSA: xReturn = N_BindLevel( cOption ) * ARGUMENT: cOption = R - Read security * W - Write security * U - User ID FUNCTION N_BindLevel PARAMETERS cWhich PRIVATE cBuffer, cRequest, xAnswer, y IF PARAMETERS() = 0 cWhich = "U" ENDIF cBuffer = SPACE(5) cRequest = CHR(70) xAnswer = -1 IF Netware(227, cRequest, čcBuffer) == 0 DO CASE CASE cWhich = "R" y = ASC(cBuffer)%16 xAnswer = SUBSTR("ALOSN",y+1,1) CASE cWhich = "W" y = INT(ASC(cBuffer)/16) xAnswer = SUBSTR("ALOSN",y+1,1) OTHERWISE xAnswer = Long2Fox(SUBSTR(cBuffer,2,4)) ENDCASE ENDIF RETURN xAnswer -------------- Read/Write sigurnosni nivoi se sastoje od slova koja označavaju nivo objekta. Značenja: SLOVO SIGURNOSNI NIVO ----- ------------------- A Svako može da pristupi objektu L Samo korisnici logovani na server O Samo tekući objekat S Samo supervisor N Samo NetWare OS
baze.podataka.181 max.headroom,
IDENTIFIKOVANJE OBJEKATA Kada ste dobili ime objekta ili njegov ID, pomoću tih informacija možete njime dalje manipulisati i/ili dobiti neke nove informacije. Doleprikazana funkcija N_OBJECTNAME() vraća ime objekta, ako se kao argument zada ID objekta. Koristeći ovu f-ju zajedno sa N_BINDLEVEL() f-jom (ranije prikazana) možete dobiti ime korisnika trenutno ulogovanog na mrežu. * SINTAKSA: cName = N_ObjectName ( nID ) * ARGUMENT: nID - ID objekta * REZULTAT: cName - Ime objekta u Bindery-ju FUNCTION N_ObjectName PARAMETER nID PRIVATE cBuffer, cRequest, cName cBuffer = SPACE(54) cRequest = CHR(54) + Fox2Long(nID) cName = "" IF Netware(227, cRequest, čcBuffer) == 0 cName = CleanStr(SUBSTR(cBuffer,7)) ENDIF RETURN cName ------------ Takođe je moguće odrediti obj. ID ako kao argument zadate ime objekta. Evo i f-je nazvane N_OBJECTID() koja kao parametar uzima ime i tip objekta, a kao rezultat vraća njegov ID: * SINTAKSA: nIDcode = N_ObjectID( <cObject>,<nObjType> ) * ARGUMENTI: cObject - ime objekta * nObjType - tip objekta * REZULTAT: nIDcode - ID objekta iz Bindery-ja FUNCTION N_ObjectID PARAMETERS cObject, nObjType PRIVATE cBuffer, nID, cRequest cBuffer = SPACE(54) nID = 0 cRequest = CHR(53) + CHR(0) + CHR(nObjType) + Lstring(cObject,48) IF Netware(227, cRequest, čcBuffer) == 0 nID = Long2Fox(SUBSTR(cBuffer,1,4)) ENDIF RETURN nID ---------- ODREĐIVANJE KORISNIžKOG ID-a Funkcije N_BINDLEVEL() i N_OBJECTNAME() mogu biti kombinovano korišćene da bi se dobila treća f-ja, zvana N_WHOAMI(), a koja vraća ID tekućeg korisnika. * SINTAKSA: cUser = N_WhoAmI() * ARGUMENT: NEMA * REZULTAT: cUser - Ime objekta za tekućeg korisnika FUNCTION N_WhoAmI PRIVATE nID, cUser nID = N_BindLevel("U") cUser = "" IF .NOT. EMPTY(nID) cUser = N_ObjectName(nID) ENDIF RETURN cUser (Ako gušim sa ovakvim porukama neka mi neko skrene pažnju, da vam ne bih punio PAD-ove nepotrebnim informacijama. Međutim, iako je tema poprilično suvoparna, da se zaključiti da nekada i nekome može poslužiti da uspostavi "prisnije" veze između Novell-a i Fox-a :) Osim toga, neka neki Fox_User napiše svoja rešenja po pitanju ovakve problematike. Sve mi se čini da je malo ko probao u svojim aplikacijama slične radikalnije zahvate ovakve vrste... Znam, znam, provaljuje se FoxPro for Win, ali to nije razlog da se zapuste i ostali elementi ;) )
baze.podataka.182 djelovic,
> Ako gušim sa ovakvim porukama neka mi neko skrene pažnju, da vam ne > bih punio PAD-ove nepotrebnim informacijama. Naprotiv, hvala na veoma zanimljivim prilozima. Jesi li razmišljao da sve ovo skupiš u jednu biblioteku, pa da je Bulaja stavi u dir?
baze.podataka.184 max.headroom,
> Naprotiv, hvala na veoma zanimljivim prilozima. Jesi li > razmišljao da sve ovo skupiš u jednu biblioteku, pa da je > Bulaja stavi u dir? Nikakav problem - jedino će mi trebati pola meseca vremena da pripremim materijal :) P.S. Da li je neko video kakvo zanimljivo rešenje izbegavanja komande PACK? Ovo je valjda sa PC PLUS BBS-a: - baza je indeksirana - podaci koji su predviđeni za brisanje markiraju se sa DELETE - čim se podatak briše (DELETE), odmah potom mu se polje po kome je indeksirano napuni nulama ili spejsovima, zavisno od tipa - na taj način polje stiže na vrh baze - pre nego što se uradi bilo koji sledeći APPEND BLANK, proveri se ima li takvih brisanih polja u bazi - ako ih ima, obrisati prvom sadržaj i popuniti ga novim sadržajem - ako ih nema, tada se ipak radi APPEND BLANK Na taj način se sva polja markirana za brisanje koriste pri unosu novih podataka u bazu i komanda PACK gubi smisao :) Stvarno zanimljivo rešenje. (Dobro, ovo nikome ne pada na pamet da koristi iz stojednog razloga, ali hint je interesantan)
baze.podataka.185 djelovic,
> - podaci koji su predviđeni za brisanje markiraju se sa DELETE > - čim se podatak briše (DELETE), odmah potom mu se polje po kome je > indeksirano napuni nulama ili spejsovima, zavisno od tipa > - na taj način polje stiže na vrh baze > - pre nego što se uradi bilo koji sledeći APPEND BLANK, proveri se > ima li takvih brisanih polja u bazi > - ako ih ima, obrisati prvom sadržaj i popuniti ga novim sadržajem > - ako ih nema, tada se ipak radi APPEND BLANK Stari trik :), barem za Klipete :). Doduše, ukoliko baza podataka koju koristiš podržava selektivno indeksiranje, onda je ipak bolje da obrisani slogovi ne opterećuju indeks, već da ih pakuješ u nekakvu uvezanu listu.
baze.podataka.186 dr.grba,
>> Na taj način se sva polja markirana za brisanje koriste pri unosu >> novih podataka u bazu i komanda PACK gubi smisao :) Stvarno zanimljivo >> rešenje. (Dobro, ovo nikome ne pada na pamet da koristi iz stojednog >> razloga, ali hint je interesantan) Ovaj hint je već viđen u "Računarima", tridesetak brojeva unazad...
baze.podataka.187 jolicm,
Ja koristim to isto da bih izbegao pack, ali sa dodatkom: Tvoj predlog ima manu (slogovi ulaze u obične indekse) Ja samo obrišem slog koji zelim sa delete Datoteka pored redovnih indeksa ima i jedan dodatan: index on deleted() to nazivindeksa i zatim kada mi zatreba append blank uradim: set order to nazivdelindeksa dbseek(.t.,.f.) i ako je nadjen slog vršim recal i odgovarajucu popunu. :)
baze.podataka.188 milanv,
Nije valjda da se niko ne razume u .MDB-ove, ili da poznavaoci istog nemaju ni malo dobre volje :(. Naročito mi je važan odgovor na pitanje kako podatke iz .DBF prebaciti u .MDB.
baze.podataka.189 nkbog,
> Nije valjda da se niko ne razume u .MDB-ove, ili da > poznavaoci istog nemaju ni malo dobre volje :(. > Naročito mi je važan odgovor na pitanje kako podatke iz > .DBF prebaciti u .MDB. Jedan jako logičan odgovor u obliku pitanja: Pomoću Accessa? Ili VB-a? Drugi odgovor zašto konvertovat - Access engine radi i sa DBF tabelama. Stranu na šalu, .MDB nema baš jednostavan format poput .DBF-a jer jedan je MDB jedna baza podataka: više tabela, više indeksa itd. Najjednostavniji način je da kreiraš tabelu u Access formatu i traženom MDB-u, a iste strukture kao tvoj DBF, da otvoriš DBF kao external table i da jednostavno iskopiraš sve slogove iz DBF u MDB, zatim isklučiš DBF i gotovo. Pogledaj dokumentaciju (elektronsku barem ;)) o tome kako se otvaraju eksterne tabele i baze podataka. NB.
baze.podataka.191 max.headroom,
Kako uspostaviti DDE vezu FoxPro-a for Win sa nekom drugom Win aplikacijom? Ništa lakše. "črtva" je Excel :) Evo jednog prostog primera - pre nego što se bacite na matematike potrebno je napraviti jedan Excel "formular" u koji će se smeštati Fox podaci i iz kojeg će se vaditi rezultat. Neka se ta tabela zove PROBA.XLS i neka izgleda ovako: ------------------------------------------------- A B C ------------------------------------------------- 1 TIP CENA 2 3 Cigarete 100.00 4 Piće 250.00 5 Diskete 400.00 6 7 ZBIR: 750.00 <-- SUM komanda u Excel-u ------------------------------------------------- Iz Fox-a se zadaju cene pojedinačnih artikala, a u Fox vraćamo rezultat koji se nalazi u polju C7 (ZBIR). Da bi uopšte uspostavili vezu za Excel-om potrebno je uveriti se da je on pokrenut. Najjednostavnija varijanta je startovati Excel zajedno sa dokumentom: RUN /N7 EXCEL.EXE PROBA /N svič ukazuje na to da je aplikacija koja se pokreće "true Windows" aplikacija, a /N7 kazuje da će aplikacija biti minimizovana i da će biti "inactivated", tj. da će se na ekranu vrteti samo Fox prozor. Sledeća komanda uspostavlja vezu između FoxPro-a i Excel-a: iChannel = DDEInitiate( "Excel", "PROBA.XLS" ) Ako je rezultat (koji se smešta u var. iChannel) pozitivan broj, veza je uspostavljena i DDE "konverzacija" može da se nastavi. Sada program može da prenese u Excel cene artikala: = DDEPoke( iChannel, "R3C3", STR(cigarete,10)) = DDEPoke( iChannel, "R4C3", STR(pice,10)) = DDEPoke( iChannel, "R5C3", STR(diskete,10)) Komanda DDEPoke šalje podatak na DDE server. String "R4C3" govori Excel-u da se podaci smeštaju u četvrti red, treća kolona (R - Row, C - Column). Da bi se dobio rezultat izračunavanja potrebno je zadati: iResult = DDERequest( iChannel, "R7C3", "CF_TEXT", "iDone" ) Ova komanda smešta rezultat kalkulacije u promenljivu iResult, odn. u nju kopira sadržaj polja C7 (gledano u odnosu na tabelu). Ova rutina vraća rezultat tek pošto je Excel završio sa kalkulisanjem. String "CF_TEXT" označava da je rezultat standardni tekst. String iDone je ime tzv. "callback" funkcije. Evo njene strukture: PROCEDURE iDone PARAMETERS iChanNum, sAction, sItem, sData, sFormat, iStatus DO ekran.spr && Prikaži dobijeni rezultat nonote = .F. && Indikator kraja result = "" && Ovde ide "prerađeni" rezultat FOR i = 1 TO LEN(sData) chrq = SUBSTR(sData, i, 1) IF ISDIGIT(chrq) result = result + chrq ENDIF ENDFOR result = VAL(result) Procedura iDone se poziva posle izvršene transakcije, i ona koristi sledeće parametre: PARAMETERS iChanNum, sAction, sItem, sData, sFormat, iStatus Oni se vraćaju kao rezultat svake transakcije, i moraju biti navedeni u liniji sa parametrima čak i da vas ne interesuje kakva je njihova sadržina. iChanNum - baciti pogled na ovu vrednost u slučaju da se koristi ista "callback" f-ja za različite DDE kanale. sAction - najčešće su mu vrednosti "INITIATE", "REQUEST" ili "TERMINATE". Pomoću njih se možete odlučiti šta da radite sa podacima. sItem - u navedenom primeru mu je vrednost "R7C3". sData - rezultat (potrebno ga je konvertovati u brojnu vrednost). sFormat - u našem slučaju je "CF_TEXT". iStatus - ako je on pozitivan broj - transfer je uspeo. Pošto je rad sa tabelom PROBA.XLS završen, možemo prekinuti vezu sledećom komandom: = DDETerminate( iChannel ) Excel se može zatvoriti i komandama: iChannel = DDEInitiate("Excel", "System") = DDEExecute(iChannel, 'ŠERROR(FALSE)Ć') = DDEExecute(iChannel, 'ŠQUIT()Ć') = DDETerminate(iChannel) Tako koristimo System topic koja briše sve greške i zatvara Excel. Treba zapamtiti da se sve ovo odvija za vreme koje Fox provodi u daljem izvršavanja programa.
baze.podataka.192 max.headroom,
Evo naslova nekih biblioteka za FoxPro for DOS, a mene zanima gde se one mrežne i komunikacione daju pokupiti... Kategorija Naziv --------------------- ------------------------------------------ Grafika Espia, dGE, SilverPaint, FoxGraph, SunShow Serijska komunikacija CommTools, SilverFox SPCS NetWare biblioteke NetLib, FPNet, GPLib Client-Servers Biton/ORACLE, RaSQL
baze.podataka.193 mdrazic,
> - baza je indeksirana > - podaci koji su predviđeni za brisanje markiraju se sa DELETE > - čim se podatak briše (DELETE), odmah potom mu se polje po kome > je indeksirano napuni nulama ili spejsovima, zavisno od tipa > - na taj način polje stiže na vrh baze > - pre nego što se uradi bilo koji sledeći APPEND BLANK, proveri > se ima li takvih brisanih polja u bazi > - ako ih ima, obrisati prvom sadržaj i popuniti ga novim sadržajem > - ako ih nema, tada se ipak radi APPEND BLANK Ovo se još zove i reciklaža. Uz pomoć uslovnih indeksa može se rad sa (indeksiranom) bazom ubrzati, ako se više ne koristi ispitivanje da li je record deleted(). Za takav rad svi normalni indeksi treba da su uslovni (neprazno ključno polje). Dodatni indeks (opet uslovni) treba da sadrži samo brisane (blankovane) zapise. Znači, SET DELETED OFF u aplikaciji i reciklaža pomoću uslovnih indeksa. Ako nemate uslovne indekse, za udoban rad ipak treba SET DELETED ON, što malo usporava rad. Ono što se ne vidi golim okom, imao sam prilike da osetim na većoj bazi (stotinjak hiljada zapisa). Jedan od indeksa je bio po polju koje je u oko 10% slučajeva bilo prazno. SEEK po tom indeksu (na normalne zapise) je bio BITNO SPORIJI od indeksa koji je sadržavao različite ključeve. Ovo je bilo u Clipper-Novell kombinaciji i izgleda da veliki broj istih ključeva usporava SEEK. Možda je to i zbog toga što su blanko ključevi na vrhu indeksa (logički). O tome bi možda neki vrstan znalac B-tree i sličnih drveta mogao nešto da kaže. Mislim da ipak povremeno treba pakovati tabele, ali ne PACK naredbom, nego prepisivanjem u drugu (ima tih funkcija po knjigama). Usput, ja omogućavam da se koristi neki od indeksa ili novi ključ za originalnu bazu, tako da se tada baza i sortira u istom cugu. Sortirana baza može ubrzati rad na mreži pošto se manje paketa šalje mrežom ako su zapisi jedan blizu drugog. Puno reciklaže vam želi, Milan
baze.podataka.194 djelovic,
> SEEK po tom indeksu (na normalne zapise) je bio BITNO SPORIJI od > indeksa koji je sadržavao različite ključeve. Ovo je bilo u > Clipper-Novell kombinaciji i izgleda da veliki broj istih ključeva > usporava SEEK. Veći broj istih vrednosti u indeksu zaista bitno usporava rad i to: 1. Kod brisanja i dodavanja slogova na jednokorisničkom sistemu. 2. Kod svih operacija na višekorisničkom sistemu. Problem se može izbeći dodavanjem nekog random polja u slog pri njegovoj kreaciji, pa "produžavanjem" problematičnog indeksa sa datim poljem.
baze.podataka.195 nbatocanin,
> Na taj način se sva polja markirana za brisanje > koriste pri unosu novih podataka u bazu i komanda PACK > gubi smisao :) Sva rešenja koja recikliraju stare slogove imaju jednu veliku manu: uništavaju stare podatke. Lično mi se više sviđa da imam mogućnost da korisniku koji je neoprezno iskoristio naredbu za brisanje vratim neki važan podataka i jednom u nekoliko meseci prepakujem celu bazu.
baze.podataka.196 feniks,
Kako je poznato žiro-računi izgledaju otprilike ovako: 40801-601-X-15837... │ │ │ │ filijala ──────┘ │ │ │ namena ───────────┘ │ │ kontrolna cifra ──────────────┘ │ partija ──────────────────┘ Moja sestra pita da li neko zna formulu po kojoj se računa kontrolna cifra. Izvinjavam se ako je ovo već bilo... SP
baze.podataka.197 djelovic,
> Moja sestra pita da li neko zna formulu po kojoj se > računa kontrolna cifra. Izvinjavam se ako je ovo već bilo... Bilo je u prethodnoj PC.PROG, tema algoritmi (?).
baze.podataka.198 feniks,
│> Moja sestra pita da li neko zna formulu po kojoj se │> računa kontrolna cifra. Izvinjavam se ako je ovo već bilo... │ │ Bilo je u prethodnoj PC.PROG, tema algoritmi (?). └────────────────── Hvala na pointeru, valjda ću pronaći tamo...
baze.podataka.199 dr.grba,
>> Moja sestra pita da li neko zna formulu po kojoj se >> računa kontrolna cifra. Izvinjavam se ako je ovo već bilo... Još jednom, evo modula koji je snemcev dosada već slao na Sezam. U pitanju je funkcija koju je vrlo prikladno ugrađivati kao valid funkciju pri unosu nekog žiro računa. Funkcija ne samo da ispituje kontrolni broj žiro računa, nego i kontrolni broj individualne partije (poslednja cifra poslednjeg broja), tako da se verovatnoća unosa pogrešnog žiro računa bitno smanjuje, što i jeste svrha ovih kontrolnih brojeva. Algoritmi izračunavanja se lako vide u listingu. ziro.zip
baze.podataka.200 snemcev,
>> Moja sestra pita da li neko zna formulu po kojoj se >> računa kontrolna cifra. Izvinjavam se ako je ovo već bilo... Pogledaj u temi algoritmi -- tamo je dr.grba poslao veoma opširno objašnjenje.
baze.podataka.201 feniks,
│ Funkcija ne samo da ispituje kontrolni broj žiro računa, nego i kontrolni │ broj individualne partije (poslednja cifra poslednjeg broja), tako da se │ verovatnoća unosa pogrešnog žiro računa bitno smanjuje, što i jeste svrha │ ovih kontrolnih brojeva. │ │ Algoritmi izračunavanja se lako vide u listingu. └────────────────────────── Hvala i za ovo. Sestri je bio dovoljan podatak da se to nalazi u Računarima br.98 (Bajtovi lične prirode). Ona je programer i lako će se sada snaći. Ovaj algoritam koji si poslao je u clipper-u (zgodno kao primer), inače njena aplikacija ne radi pod DOS-om (valjda pod QMX-om). Pozdrav, SP
baze.podataka.202 max.headroom,
> Hvala na pointeru, valjda ću pronaći tamo... Ako ne nađeš, podseti me da spustim u konf.
baze.podataka.203 max.headroom,
> Problem se može izbeći dodavanjem nekog random polja u > slog pri njegovoj kreaciji, pa "produžavanjem" > problematičnog indeksa sa datim poljem. Da, tačno. Ali je sam sistem "reciklaže" nezgodan jer ostaješ bez starih podataka koji će (Marfi) kad-tad ustrebati :) Međutim, mene je dugo vremena morila jedna druga bedastoća: npr. program koristi jednu prolaznu bazu koja se briše i po stotinak puta u toku radnog dana. Baza nema random ime, tj. ZAPuje se pre svakog novog popunjavanja. Elem, tu nastaju nevolje - prečesto se dešava da joj se ošteti heder, što sam ja pripisivao HDD nepouzdanosti, ali sam na kraju morao da položim oružje i da "teram" baze koje će po pokretanju inkriminisanog dela programa biti iznova kreirane pod random imenom, a posle upotrebe obrisane. Da ne bih gušio, poenta je u sledećem: ako se ispostavi da neka temporary baza treba da postoji, gurnite je u RAM disk. Manje-više što je brže, nego je _pouzdanije_. Pomenuti primer se odnosio na bazu za unos faktura. Zamislite, ja sebe pretpostavljao za krelca što se toliko zlopatim sa njom, kad ono vidim softver u kojoj je programer kreirao vlastite sisteme za rad sa bazama, a koji se oslanjaju na matrice (!)... Stvarno cool :) Jeste, dobrodošlo je ako npr. Win4WGroups neće da se tera sa manje od 4MB, ali je princip rađen u Fox-u i pre pojave Win-a za radne grupe. žudna rešenje se iznalaze, stvarno... :)
baze.podataka.204 max.headroom,
Interesantno: Kada se kod FoxPro-a ošteti neki CDX fajl, pri otvaranju baze kojoj taj ind. fajl pripada Fox prijavljuje grešku. Međutim, pri svakom sledećem otvaranju iz baze bivaju izbrisane sve definicije indeksa i greška se više ne javlja, ali to nipošto ne rešava problem :)
baze.podataka.205 max.headroom,
Dilema sa DELETED() zapisima (Fox): Kada je SET DELETED postavljen na ON, sve komande za rad sa bazom ignorišu izbrisane zapise. Rushmore optimizacija se uglavnom sastoji od provere indeksa pre testiranja zapisa u bazi. Kada se izvrši COUNT ili SELECT COUNT() komanda, Rushmore nam omogućava dobijanje rezultata bez ikakvog pristupanja bazi. Međutim, u naš problem se sastoji u tome što je DELETED() fleg smešten u bazi. Tako, ako je SET DELETED ON, COUNT i SELECT COUNT() komande su prinuđene da testiraju zapise iz baze pre nego što vrate vrednost. Kao rezultat, COUNT i SELECT COUNT() se izvršavaju mnogo sporije ako je SET DELETED postavljen na ON. Rešenje ovog problema sastoji se u sledećem: indeksirajte bazu (u kojoj važi SET DELETED ON) po još jednom ključu - INDEX ON DELETED() TAG ime_taga Kada se ubaci indeks koji je baziran na DELETED() f-ji, Fox može ponovo odrediti sve zapise koji odgovaraju uslovu bez pristupanja samoj bazi.
baze.podataka.206 max.headroom,
Hmh, ali pokušavajući da pomognemo Rushmore-u tako što ćemo setovati master ključ pre pokretanja komande često više odmognemo i izgubimo na brzini: CLOSE ALL USE baza ORDER ime t1 = SECO() LIST FOR ime = "Mika" t2 = SECO() WAIT WINDOW STR(t2 - t1, 10, 4) && 18 sekundi CLOSE ALL USE baza t1 = SECO() LIST FOR ime = "Mika" t2 = SECO() WAIT WINDOW STR(t2 - t1, 10, 4) && 2 sekunde Elem, očigledno smo odmogli. Problem je u tome što FoxPro koristi Rushmore da odredi koji zapisi sadrže imena "Mika". To se završava za manje od dve sekunde. Međutim, pošto odredi koji zapisi odgovaraju uslovu, FoxPro mora da se vrati nazad i pročita čitav indeks da bi odredio u kakvom poretku da predstavi podatke :) (Rezultati odgovaraju bazi sa oko 5000 zapisa, ali sve to nije bitno - bitna je onol'ka razlika u vremenu izvršenja programa :) P.S. SQL SELECT ignoriše ORDER postavku, te tako ne pati od pomenutih "stomačnih tegoba".
baze.podataka.207 max.headroom,
Neka rešenja za SET ORDER probleme: Teorijski, lako je reći "ne setuj ORDER pre pozivanja BROWSE FOR ili SCAN FOR komande". U praksi je najčešće potrebno upravo to - želimo podatke sortirane po nekom kriterijumu (pa posle propuštene kroz sito). Evo nekih rezultata: CLEAR CLOSE DATA USE baza t1 = SECO() ** BROWSE FOR, bez ORDER-a t2 - t1 = 1.321 BROWSE FOR godina = 10 NOWAIT t2 = SECO() CLOSE DATA USE baza ORDER ime t3 = SECO() ** BROWSE FOR posle SET ORDER t4 - t3 = 4.581 BROWSE FOR godina = 10 NOWAIT t4 = SECO() CLOSE DATA USE baza t5 = SECO() ** SCAN FOR, bez ORDER-a t6 - t5 = 0.993 SCAN FOR godina = 10 mvar = ime ENDSCAN t6 = SECO() CLOSE DATA USE baza ORDER ime t7 = SECO() ** SCAN FOR posle SET ORDER t8 - t7 = 9.488 SCAN FOR godina = 10 mvar = ime ENDSCAN t8 = SECO() CLOSE DATA t9 = SECO() ** BROWSE trik t10 - t9 = 1.497 SELECT RECNO() AS trik ; FROM baza WHERE godina = 10 ; ORDER BY ime INTO CURSOR rezultat SET RELATION TO trik INTO baza BROWSE FIELDS baza.godina, baza.ime NOWAIT t10 = SECO() CLOSE DATA t11 = SECO() ** SCAN trik t12 - t11 = 1.388 SELECT RECNO() AS trik ; FROM baza WHERE godina = 10 ; ORDER BY ime INTO CURSOR rezultat SET RELATION TO trik INTO baza SCAN mvar = baza.ime ENDSCAN t12 = SECO() CLOSE DATA t13 = SECO() ** BROWSE posle SELECT ORDER t14 - t13 = 1.343 SELECT * FROM baza WHERE godina = 10 ; INTO CURSOR rezultat ; ORDER BY ime BROWSE NOWAIT t14 = SECO() CLOSE DATA t15 = SECO() ** SCAN posle SELECT ORDER t16 - t15 = 1.315 SELECT * FROM baza WHERE godina = 10 ; INTO CURSOR rezultat ; ORDER BY ime SCAN mvar = ime ENDSCAN t16 = SECO() CLOSE DATA t17 = SECO() ** BROWSE posle INDEX FOR t18 - t17 = 2.948 USE baza INDEX ON ime FOR godina = 10 TO rezultat COMPACT BROWSE NOWAIT t18 = SECO() CLOSE DATA t19 = SECO() ** SCAN posle INDEX FOR t20 - t19 = 2.786 USE baza INDEX ON ime FOR godina = 10 TO rezultat SCAN mvar = ime ENDSCAN t20 = SECO() ? "BROWSE FOR, bez ORDER-a ",t2-t1 && 1.321 ? "BROWSE posle SELECT ORDER ",t14-t13 && 1.343 ? "BROWSE trik ",t10-t9 && 1.497 ? "BROWSE posle INDEX FOR ",t18-t17 && 2.948 ? "BROWSE FOR posle SET ORDER ",t4-t3 && 4.581 ? ? "SCAN FOR, bez ORDER-a ",t6-t5 && 0.993 ? "SCAN FOR posle SELECT ORDER ",t16-t15 && 1.315 ? "SCAN FOR trik ",t12-t11 && 1.388 ? "SCAN FOR posle INDEX FOR ",t20-t19 && 2.786 ? "SCAN FOR posle SET ORDER ",t8-t7 && 9.488 Eto - zaključke izvlačite sami :)
baze.podataka.208 djelovic,
> Da, tačno. Ali je sam sistem "reciklaže" nezgodan jer ostaješ bez > starih podataka koji će (Marfi) kad-tad ustrebati :) Hm, ukoliko mi treba mogućnost da se neki slog stornira, ja ubacim bajt koji označava storniranje, umesto da ga brišem. Ukoliko je potrebna istorija sloga, onda imam posebnu tabelu u kojoj držim uvezanu listu prethodnih varjanti sloga. Van toga, ne vidim neku potrebu za čuvanjem obrisanih slogova? > Međutim, mene je dugo vremena morila jedna druga bedastoća: npr. > program koristi jednu prolaznu bazu koja se briše i po stotinak puta u > toku radnog dana. Baza nema random ime, tj. ZAPuje se pre svakog novog > popunjavanja. Elem, tu nastaju nevolje - prečesto se dešava da joj se > ošteti heder, što sam ja pripisivao HDD nepouzdanosti, ali sam na > kraju morao da položim oružje i da "teram" baze koje će po pokretanju > inkriminisanog dela programa biti iznova kreirane pod random imenom, a > posle upotrebe obrisane. Da ne bih gušio, poenta je u sledećem: ako se > ispostavi da neka temporary baza treba da postoji, gurnite je u RAM > disk. Manje-više što je brže, nego je _pouzdanije_. A kada smo dragisha i ja prigovarali Kliperašima što što za sve koriste tabele umesto da uposle adekvatne memorijske strukture, onda smo mi bili ludi, a? :) Nego, ukoliko ti RAM disk postane tesan, zašto ne probaš drugu metodu: umesto da koristiš fajlove sa random imenima, jednostavno na svakoj stanici u AUTOEXEC ubaciš jedno: SET JEDINSTVENOIME=<neko ime> pa onda ne otvaraš po tom imenu? To te rešava svih problema sa konkurentnošću pristupa podacima, a gornja SET naredba može da se automatizuje sa pomoću Novella tako što će u login skriptu svih koji pripadaju nekoj grupi koja koristi tvoj program promenljivoj JEDINSTVENOIME da se dodeljuje broj spoja.
baze.podataka.209 mdrazic,
> umesto da koristiš fajlove sa random imenima, jednostavno > na svakoj stanici u AUTOEXEC ubaciš jedno: > > SET JEDINSTVENOIME=<neko ime> Može, samo traži dodatno angažovanje oko dodeljivanja ovih imena. A i ne rešava problem (vrlo čest kod user-a) da se dve stanice jave pod istim username-om. Ja to radim ovako: - svaki korisnik je registrovan, ima password i tako to, ali i jedinstvene inicijale od dva znaka. - kad se korisnik prijavi, registruje se on kao i koji je broj procesa (ako je više stanica sa istim username-om unutar aplikacije). Primer: MD1 za mene, MD2 za nekog ko se posle mene prijavio pod mojim imenom u aplikaciju. Naravno, postoji i tabela procesa iz koje se mnogo toga jako lepo vidi :))) dinamički u toku rada. - gorepomenuta tri znaka su jedinstvena u datom trenutku za jednog korisnika. Njima dodaš po volji i ukusu još po neki znak ako hoćeš. Sistem sa brojem veze je isto dobar, (ali ne možeš multitasking da radiš sa jedne stanice ;), ali moj način ostavlja trag čiji je fajl bio u slučaju da ti zatreba. - pošto sve izveštaje prvo pravim u fajl pa zatim gledam, editujem, pa ako treba da se štampaju, prosto pošaljem u neki queue ili na local. Za te potrebe u jednoj static varijabli čuvam brojač koji dodam na gorepomenuta tri znaka. Ime fajla dobijaš funkcijom, otprilike cFileName := DajTmpIme() a u njoj se inkrementira brojač. Problemi koji slede kod Visual Object-a: kod multitaskinga možeš kao jedan logovan user imati više Win procesa (na istoj stanici) istovremeno u aplikaciji u koju si se samo jednom logovao!
baze.podataka.210 pedjav,
Pozdrav svima od novog sezamovca! Pišem jednu malu C++ biblioteku klasa za rad sa bazom podataka. Format datoteka je sopstveni. Pošto imam nameru da cela stvar radi pod Windows (dakle više procesa odjednom može tražiti da čita/piše po istoj datoteci i zapisu) moram nekako da izvedem zaključavanje zapisa. Pošto nemam ama baš nikakvo iskustvo sa SHARE i mehanizmima za zaključavanje pod DOS-om molim one koji su upućeni u problematiku da mi objasne kako SHARE radi i kako se izvodi zaključavanje cele datoteke i jednog njenog dela. Pomoglo bi i upućivanje na neku literaturu. pedjav
baze.podataka.211 max.headroom,
Daklem, što se dalo zaključiti iz moje prethodne poruke (BROWSE FOR i SCAN FOR u kombinacijama sa SET ORDER): SELECT ORDER BY je jasan izbor u momentu kada treba predstaviti čitavu skupinu rezultata. Međutim, da bi se dao ekranski pregled record-a (jedan skrin, dakle) najbolje rešenje je BROWSE FOR sa SET ORDER. (Ako su kriterijumi za vaš query uvek isti, najbolje rešenje je dodati kondicionalni tag u CDX fajl. Npr. ako se želi pregled imena ljudi koji su stariji od 30 godina, indeksirajte bazu sa: INDEX ON ime TAG imegod FOR godina > 30 pa se posle jednostavnim pozivanjem: SET ORDER TO imegod BROWSE dobijaju željeni rezultati).
baze.podataka.212 max.headroom,
Skeniranje indeksirane baze traje duže od skeniranja neindeksirane. Razlog je jednostavan: kada FoxPro "guli" po indeksiranoj bazi on mora da skače napred-nazad tražeći sledeći zapis u indeksu. Evo primera: --------------------------------------------- VREDNOST (key) REDNI BROJ ZAPISA --------------------------------------------- A 100,231 B 7 C 96,325 D 43 E 106,002 --------------------------------------------- Kada FoxPro krene da procesira ovu bazu po indeksiranom polju (key), on prvo mora da skoči na record 100,231. Tada ide na rec. br. 7. Potom na 96,325, pa na 43, i, najzad, na 106,002. Toliko skakanja ume da oduzme dosta vremena :) Sada je jasno zašto Fox neindeksiranu bazu pretrči za x sekundi manje od indeksirane. Ono što nije za pretposta- viti je to da sortiranje baze po određenom ključu traje čak i kraće od tih x sekundi. Iako je SORTiranje često brže od korišćenja postojećeg indeksa, postoje momenti kada SORT ne treba koristiti (čak i u slučaju da je potrebno napraviti novi indeks). Evo nekih činjenica: - Ako je u bazi manje od nekoliko hiljada zapisa, ili ako query vraća manje od 50 zapisa, metoda koja se izabere nije ni bitna (SORT ili ORDER). - Uvek prvo koristite SQL SELECT pristup problemu. U slučaju da je brzina ono što je neophodno potrebno, trebalo bi se odlučiti između indeksiranja i SELECT...ORDER BY. Evo "rešenja": IF (memo_postoji_i_postoji_sadržaj) .OR. (nedovoljno_mesta_za_SORT) IF tag_postoji SET ORDER ELSE INDEX ON ENDIF ELSE IF zapisi_su_već_u_odgovarajućem_poretku SET ORDER ELSE IF mnogo_zapisa IF TAG SET ORDER ELSE INDEX ON ENDIF ELSE SORT / SELECT...ORDER BY ENDIF ENDIF ENDIF Evo kako dobiti bazu za slučaj "zapisi_su_već_u_odgov._poretku": ** COPY TO pristup USE baza SET ORDER TO ime COPY TO temp USE ERASE baza.dbf ERASE baza.cdx USE temp RENAME temp.dbf TO baza.dbf USE baza && ponovo indeksiraj bazu ** SELECT...ORDER BY pristup SELECT * FROM baza INTO TABLE temp ORDER BY ime USE IN baza USE IN temp ERASE baza.dbf ERASE baza.cdx RENAME temp.dbf TO baza.dbf USE baza && ponovo indeksiraj bazu Ako vas brine ono "ponovo indeksiraj bazu" - džabe se brinete :) Indeksiranje već sortirane baze (naravno, isti ključ) traje kratko.
baze.podataka.213 max.headroom,
BROWSE KEY ili BROWSE FOR - šta je brže? ** Test program DEFINE WINDOW prozor FROM 1,0 TO 20,75 CLOSE DATA USE baza t1 = SECO() BROWSE FOR pol = "M" NOWAIT WINDOW prozor t2 = SECO() CLOSE DATA USE baza ORDER pol t3 = SECO() BROWSE KEY "M" NOWAIT WINDOW prozor t4 = SECO() CLOSE DATA USE baza ORDER pol t5 = SECO() BROWSE FOR pol = "M" NOWAIT WINDOW prozor t6 = SECO() ---------------- Evo i rezultata (baza ima nekih 20,000 zapisa): FOR 0.445 . KEY 0.493 . LAN (SET EXCLUSIVE ON) FOR sa SET ORDER 0.755 . FOR 0.117 . KEY 0.259 . LAN (SET EXCLUSIVE OFF) FOR sa SET ORDER 0.749 . Koristite BROWSE KEY kad kog možete. BROWSE FOR je fleksibilniji pristup, ali sporiji. I, što je najzanimljivije, provalite rezultate - ekskluzivno otvorena baza i sporiji pristup (!). Kažu da je ovo primećeno samo na Novell-u, u sprezi sa query-jem koji je moguće optimizovati a koji kao rezultat vraća mali broj zapisa.
baze.podataka.214 max.headroom,
A-uh, problema... Treba da uradim nekakav report na Epson LX-800 štampaču (znate ono malo devetopinsko čudo). Papir je beskonačni, i sve ide lepo kada report stane na jednu strane. Ali (agh!) čim se produži na dve-tri ili više strana, posle prve otštampane strane printer mu daje EJECT i baca me u nesvest. Tada report izgleda ovako: ---------------------------Prvi list xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx ---------------------------Drugi list <========================Ovde tera papir xxxxxxxxxxxxxxxx ---------------------------Treći list xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx <========================Ovde ponovo EJECT (?!) ---------------------------žetvrti, itd... U reportu sam izbacio sve "Paper Eject"-ove, dužina strane je 55 linija, tj. sve je standardno. Verovatno je do setovanja štampača. Ima li neko iskustva sa ovim malim mučiteljem (LX-800)?
baze.podataka.215 djelovic,
> U reportu sam izbacio sve "Paper Eject"-ove, dužina strane je 55 > linija, tj. sve je standardno. Verovatno je do setovanja štampača. Ima > li neko iskustva sa ovim malim mučiteljem (LX-800)? Biće da je štampač podešen da posle nekog broja linija sam uradi FF, ili ti je možda loše podešena dužina strane? Za prvo je najčešće kriv pogrešno postavljen džamper, a za drugo je potrebna ESC sekvenca na početku programa. P.S. Odjednom si počeo da pišeš ovo obilje lepih poruka? Odakle taj iznenadni entuzijazam? Na čemu god da si, daj i meni malo! :)
baze.podataka.216 evlad,
>> A-uh, problema... >> >> Treba da uradim nekakav report na Epson LX-800 stampacu (znate ono >> malo devetopinsko cudo). Papir je beskonacni, i sve ide lepo kada Ponosni vlasnik LX-800 ti pomaze: DIP switch group 2 (4 komada) 2-3 je skip over perforation on == 1 inch off == none 2-1 je set page length on == 12 inch off == 11 inch so 2-3 stavis na off i 2-1 stavis na on i resen problem. za IBM graficke karaktere DIP switch group 1 (8 komada) 1-1 je set condenset or normal on == condenset off == normal 1-2 je set zero type on == 0 off == O 1-3 je set character table on == graphics off == italics 1-5 je set print qality on == NLQ off == draft ako ti treba ostalo vici !
baze.podataka.217 max.headroom,
> Hm, ukoliko mi treba mogućnost da se neki slog stornira, > ja ubacim bajt koji označava storniranje, umesto da ga > brišem. Ukoliko je potrebna istorija Da, u globalu se sve stornira (a malo toga konkretno i briše). Al' vole korisnici onol'ko da brljaju, a posle... ko će sve to ispraviti i vratiti u normalno stanje :) > A kada smo dragisha i ja prigovarali Kliperašima što što > za sve koriste tabele umesto da uposle adekvatne > memorijske strukture, onda smo mi bili ludi, Jooj :) Ali zašto praviti, iznova, čitav sistem za rad sa bazama kada već isti postoji? Na samu pomisao da kreiram sopstveni BROWSE koji samo izdaleka liči na Fox-ov, diže mi se kosa na glavi :) Ja nekako praktikujem liniju manjeg otpora :) > SET JEDINSTVENOIME=<neko ime> Uh, vole njih petnaest odjednom pod isti user... To nemo'š ljudima objasniti :) Možda da se za svakog usera definiše neki skup identifikacionih znakova (3 ili 4) koji će se vući zajedno sa TMP datotekom - posle bi, verovatno, olakšalo osmatranje sa servera kada neka baza padne (mada nije tragedija jer su privremene, odn. kreiraju se po startovanju određenog dela programa). Mene je mnogo više zainteresovala ideja pravljenja neke Open f-je za baze, koja će videti da baza (u slučaju da je heder ili indeks oštećen) nije otvorena i preduzeti odgovarajući recovery. Ali... odakle mi source za taj recovery program? :) Pokušao sam ja nešto i sam ali mi se rezultati ne dopadaju (MEMO polja naprosto "odlepršaju").
baze.podataka.218 max.headroom,
> - pošto sve izveštaje prvo pravim u fajl pa zatim gledam, > editujem, pa ako treba da se štampaju, prosto pošaljem > u neki queue ili na local. Za te potrebe u jednoj static > varijabli čuvam brojač koji dodam na gorepomenuta tri Ako je štampa u pitanju - ne treba praviti dva queue-a (jedan local, jedan server). Ali se meni češće događa da je izveštaj potrebno importovati u Excel ili Word, pa mora da stoji i kao file (beuh). Ja pravim neki TMP stack svega toga, pa kada mi mreža javi da je stvar "finito", skidam je sa steka. Inače, programski procesi imaju 3 početna slova procesa i random nastavak. A sve to ide u LOG file. Pa onda traje, traje... Biraj: sigurnost ili brzina :) > Problemi koji slede kod Visual Object-a: kod > multitaskinga možeš kao jedan logovan user imati više Win > procesa (na istoj stanici) istovremeno u aplikaciji u koju > si se samo jednom logovao! Elem, reši stvar: svakom programskom procesu dodeli neko ime, pa to trpaj u neki privremeni stek. Ako user iz drugog taska pokuša da pokrene isti programski deo (deluje nebulozno), zabrani :) Logično je da neće da pravi isti izveštaj u oba taska. Ali postoji mogućnost da, npr. reši da dobije vrednosti za dva različita vremenska perioda (recimo, 1. task = pregled analitičkih kartica od 01.01.94 do 10.01.94, 2. task = isti pregled anal. kar. ali od 12.01.94. do 01.02.94.)... Tada je rešenje ubaciti i neki "komentar" u gorenavedeno ime prog. procesa - a to je u ovom primeru datum.
baze.podataka.219 max.headroom,
> Pišem jednu malu C++ biblioteku klasa za rad sa bazom > podataka. ==== A-uh :) Baci pogled u direktorijume, ili pitaj nekoga ko poseduje nešto slično. Kao C-laik pretpostavljam da je u pitanju sizifovski posao. Obrati se i u PC.PROG: razno, odn. kontaktiraj korisnika mjova.
baze.podataka.220 max.headroom,
RUSHMORE (Iliti - zašto je Fox brži od sličnih aplikacija) Rushmore je naziv koji Microsoft upotrebljava da predstavi skup algoritama i procedura koje koristi Fox da bi optimizovao query-je. Generalno, kad god se zada neka komanda koja vrši pretragu za podatkom (skupom podataka) koji odgovara zadatom uslovu, Fox koristi Rushmore da se čitava stvar izvede što je brže moguće. Na primer, pretpostavimo da imamo bazu faktura koja sadrži 680,000 istih (oko 50 MB na disku). Zatim, pretpostavimo da želimo da vidimo koliko je cipela prodato prošle nedelje... SELECT COUNT(artikal), SUM(kolicina) ; FROM fakture WHERE artikal = "cipele" .AND. ; datum >= š24.08.94ć .AND. datum <= š31.08.94ć Posle pretrage ispada da je za proteklih sedam dana urađeno 30 stavki, odn. prodato 96 pari cipela. A čitava pretraga je trajala 1.38 sekundi (!) Nije korišćen Cray, već odomaćena 486-ica na 50 MHz sa 8 MB RAM-a. A sada - rešili smo da napravimo query za istu bazu, a rezultati će odgovarati sledećem uslovu: SELECT COUNT(artikal), SUM(količina) ; FROM fakture WHERE artikal = "cipele" .AND. ; datum >= š24.08.94ć .AND. datum <= š31.08.94ć ; .AND. kolicina > 2 Daklem, tražimo slične podatke kao i malopre, ali sa još jednim uslovom - da stavka sadrži minimum tri para cipela. Query je dao rezultate za 0.02 sekunde. Ha! ŠTA RUSHMORE ZAHTEVA? Kada se zada komanda kojom tražimo određene podatke u bazi, Fox prvo proverava da li je i kako je baza indeksirana. Ako određeni indeksi postoje, Fox ih koristi za dobijanje rezultata a da nije ni pristupio samoj bazi. Drugim rečima, da bi Rushmore dao rezultate potrebno je da baza bude indeksirana. Takođe, potrebno je kao parametar poređenja (sa vrednošću ključa) upotrebljavati isključivo statičke vrednosti (odn. one koje se ne menjaju u toku vršenja same pretrage). Evo i demonstracije pravilnog i nepravilnog korišćenja Rushmore sistema: Kao prvo, kreira se baza: Structure for table: c:ĐprogramiĐbaza.dbf Number of data records: 106960 Date of last update: 02/05/93 Field Field Name Type Width Dec Index 1 IME Character 10 Asc 2 STAROST Numeric 10 Asc 3 DATRODJ Date 8 Asc ** Total ** 29 Select area: 1, Table in Use: C:ĐPROGRAMIĐBAZA.DBF Alias: BAZA Structural CDX file: C:ĐPROGRAMIĐBAZA.CDX Index tag: IME Key: IME+STR(STAROST,10) Index tag: STAROST Key: STAROST Index tag: DATRODJ Key: DATRODJ Index tag: BILOSTA Key: DELETED() Lock(s): Exclusive USE Kao što se da videti, baza BAZA.DBF sadrži 106,960 zapisa i zauzima oko 3.1 MB prostora na disku. Prvi query koristi Rushmore na pravilan način, i to da bi se dobili svi zapisi u kojima je STAROST 10 godina: mvar = 10 SELECT * FROM baza WHERE starost = mvar FoxPro vraća 33 zapisa za 0.22 sekunde. Ovaj primer se povrgava pravilima Rushmore-a jer: * Poredi statičku vrednost sa postojećom indeksiranom vrednošću * Koristi =, <, >, <=, >=, <>, #, odn. != operator. Sledeći primer je primer nepravilnog korišćenja Rushmore optimizacije: LIST FOR ime = "B0" Komandi je potrebno čitavih 16 sekundi da bi dobila i prikazala 35 zapisa. Nešto, očigledno, nije u redu. LIST komanda potpada pod one koje se mogu Rushmore optimizovati - to, dakle, nije problem. Operator = je takođe OK, a i konstanta "B0" je svakako statička vrednost. Evo razloga: mi imamo indeksni tag "ime", ali se isti sastoji od izraza IME+STR(STAROST,10)... Ponovimo komandu koristeći LIST FOR ime + STR(starost, 10) = "B0" Ovog puta sve traje 2.3 sekunde. Problem je bio u tome što navedeni query uslov mora biti identičan onome iz indeksa. Evo još jednog primera koji za vraćanje rezultata zahteva 23.78 sekundi (220 zapisa): SELECT * FROM baza WHERE starost + 0 > 10 .AND. starost + 0 < 20 Zašto izračunavanje traje toliko dugo? Zato što nemamo tag koji sadrži izraz STAROST + 0. Sledećem query-ju treba 4.7 sekundi za rezultat: SELECT * FROM baza WHERE starost + 0 > 10 .AND. starost < 20 Znamo da deo query-ja STAROST + 0 > 10 nemože da se optimizuje, ali se zato deo STAROST < 20 može optimizovati, a i Fox prepoznaje situaciju. Dakle, Fox prvo izvuče rezultate za deo query-ja koji je moguće optimizovati, pa zatim na njega primenjuje deo koji ne odgovara Rushmore-u. To znači da nije potrebno indeksirati baš svako polje da bi se dobila svemirska :) brzina. Evo i spiska komandi koje, kombinovane sa SELECT...FOR, mogu biti Rushmore optimizovane: AVERAGE INDEX BROWSE LABEL CALCULATE LIST CHANGE LOCATE COPY TO RECALL COPY TO ARRAY REPLACE COUNT REPORT DELETE SCAN DISPLAY SORT EDIT SUM EXPORT TOTAL
baze.podataka.221 djelovic,
> > SET JEDINSTVENOIME=<neko ime> > > Uh, vole njih petnaest odjednom pod isti user... To nemo'š ljudima > objasniti :) Znam, nisam ni predlagao da se za jedinstveno ime koristi username, već, pošto jedinstveno ime treba da bude jedinstveno za mašinu, broj konekcije (connection number). Varjanta dva jeste da na disku postoji nekakva prazna baza podataka, u kojoj bi svaka radna stanica zaključavala po jedan slog odmah po ulasku u program - i to, prvi ako može, pa ako ne može onda proba drugi, i tako do N-tog. Taj jedan slog za sve vreme rada drži zaključan, i njegov redni broj je *jedinstven*. Uzgredan plus ovog rešenja jeste što može da se ograniči trenutan broj korisnika programa - zgodno ukoliko se prodaje licenca za korišćenje na određenom broju mašina.
baze.podataka.222 neman,
> N-tog. Taj jedan slog za sve vreme rada drzi zakljucan, i > njegov redni broj je *jedinstven*. Uzgredan plus ovog > resenja jeste sto moze da se ogranici A uzgred minus je situacija kada aplikacija pukne tj. neregularno :) zavrsi rad.
baze.podataka.223 djelovic,
> A uzgred minus je situacija kada aplikacija pukne tj. neregularno :) > zavrsi rad. Zašto? Taj slog se otključa čim se korisnik sledeći put uloguje. Nema nikakve nekonzistentnosti i nikakvog reindeksiranja jer je zapravo tabela prazna - jedina svrha joj je međuprocesna konvencija.
baze.podataka.224 nbatocanin,
> Van toga, ne vidim neku potrebu za čuvanjem obrisanih slogova? "Slušaj, došo mi juče mali i igrao se sa kompjuterom. Jel smeta nešto što je izbrisao lager listu?" >> posle upotrebe obrisane. Da ne bih gušio, poenta je u >> sledećem: ako se ispostavi da neka temporary baza treba >> da postoji, gurnite je u RAM disk. Manje-više što je > brže, nego je _pouzdanije_. Hm, ovo mi nije baš najjasnije. Zašto bi kreiranje u RAM disku bilo sigurnije od kreiranja na disku? I kakve veze ima random ime sa sadržajem baze?
baze.podataka.225 nbatocanin,
> Problemi koji slede kod Visual Object-a: kod > multitaskinga možeš kao jedan logovan user imati više Win > procesa (na istoj stanici) istovremeno u aplikaciji u koju > si se samo jednom logovao! Kod moje koncepcije ovo ne utiče na program: svaki korisnik može kreirati proizvoljan broj procesa koji nešto rade. Ekvivalent je da se na klasičnom višekorisničkom sistemu uloguje na više terminala.
baze.podataka.226 max.headroom,
> so 2-3 stavis na off i 2-1 stavis na on i resen problem. Joj, to je :) Hvala - reko', Fox mi pobrljavio (a do sada nisam baš previše kalemio sa matričnim štampačima; plus što nemam nikakav Ref. menjual).
baze.podataka.227 max.headroom,
> P.S. Odjednom si počeo da pišeš ovo obilje lepih poruka? > Odakle taj iznenadni entuzijazam? Na čemu god da si, daj i > meni malo! :) A-iii, tajna beskrajna :)) Ma, bacim ja pogled na topic, kad ono - 20 poruka u dva reda. Pa se setim da ovde 50% ljudi piše raznorazne aplikacije koje, između ostalog, koriste i baze; pa mi deluje neobično. A u "Računarima" stalno nekakav "umetak", ali nipošto nešto konkretno. I tako, u krajnjem down-u, vidim da na SETNet-u (paramreža) ima više poruka na zadatu temu nego ovde. I tu mi pade mrak na oči... :) P.S. Još uvek su ljudi dosta tajanstveni kada treba objasniti princip rada neke aplikacije, nedajbože pisane za Fox ili Clipper. Sve mislimo - krademo jedni od drugih 'leba iz usta :) A ovo tržište, sa ovakvim (floating) zakonima, nikada neće dobiti univerzalni program za finansijsko, odn. materijalno knjigovostvo. Pa se ne plašim :) P.P.S. Program se ne prodaje sam - prodaje ga prodavac. Do debilnosti se divim ljudima koji su pravili "jednostavni podsetnik sa kalendarom, alias baza podataka" i prodavali ga (srećnih devedesetih) za 1000 DEM.
baze.podataka.228 max.headroom,
SQL SELECT SQL SELECT komanda daje rezultate izuzetno brzo, u sledećem slučaju i pod sledećim uslovima: ako je moguće potpuno Rushmore optimizovati, ako koristi samo jednu bazu, ako koristi polja samo iz te jedne baze, ako ne koristi aliase za imena polja, ako nema GROUP BY ili ORDER BY klauzule, i ako daje redirekciju rezultata u "cursor". Elem, umesto da se kopira rezultat jednog query-ja u posebnu bazu (a taj query se vrši nad podacima iz samo jedne baze), FoxPro pronalazi podatke koji odgovaraju zadatom uslovu, otvara istu bazu u drugoj radnoj oblasti i uspostavlja filter sa uslovima identičnim onima iz query-ja. Dakle, koristeći brzinsku prednost SQL SELECT komande možemo dobiti rezultate u obliku reporta, BROWSE-a, ili novih baza. Baze kreirane SQL-om mogu biti permanentne (DBF) ili privremene ("cursor"). Dalje, pošto je ANSI/ISO standardom definisano implementiranje klauzula u SQL SELECT, query-ji se lako prenose sa FoxPro platforme na raznorazne client-server primerke poput Oracle-a i SQL Server-a. FROM parametar -------------- Parametar (klauzula) FROM govori SQL-u gde da traži polja iz liste polja. Ako su navedene baze zatvorene, FoxPro će ih otvoriti ali ne i zatvoriti posle upotrebe. Ako su baze (baza) već otvorene, FoxPro ih ponovo otvara pomoću USE...AGAIN komande. Pošto je baza ponovo otvorena, Fox zahteva dodatnu radnu oblast, ali ne i dodatni file handle. Po mogućnosti otvorite baze pre upotrebe SQL SELECT, jer je vreme pristupa kraće. Lista polja ----------- Lista polja govori SQL SELECT-u koja polja treba uključiti u rezultat. Ovaj parametar sledi odmah posle SELECT naredbe. Lista može sadržati sledeće elemente: - * (zvezdica) iliti "wildcard" - Bilo koje polje iz baze navedene posle FROM parametra - Bilo koju FoxPro f-ju - Bilo koju SELECT f-ju za rad sa kolonama - Bilo koju UDF Primeri: SELECT ime,prezime FROM baza SELECT * FROM baza Ja preferiram da naznačim i ime radne oblasti ispred naziva polja (npr. baza.ime), u slučaju da dva polja iz dve različite baze imaju isto ime. U slučaju da ovo pravilo nije ispoštovano sledi i greška: "<polje> đ <promenljiva> is not unique and must be qualified". SQL i UDF-i (User Defined Functions) ------------------------------------ Kao što rekoh, FoxPro podržava upotrebu UDF-ova u SELECT listi polja. Očigledno, druge implementacije tako dobijene SQL SELECT komande možda neće raditi na različitim platformama. Ali postoji još jedan, malo nezgodniji problem - pošto SELECT vrši kreiranje privremenih baza, privremenih indeksa i privremenih relacija, UDF se ne sme oslanjati na njihovo postojanje, niti na način na koji su one indeksirane ili filtrirane. Još jedan problem je način na koji radi SQL parser: Ako se u listu polja uključi promenljiva koja se inkrementira pri svakom prolasku kroz UDF (brojač), da se uočiti da vrednost promenljive odstupa za jedan prolaz. Drugim rečima, ako UDF broji record-e čiji je sadržaj "X", vidi se da je krajnja vrednost veća za jedan od realnog stanja u bazi. SQL Parser ---------- Kada se query pusti u izvršavanje, FoxPro prvo razbije SELECT komandu na delove, proveravajući njihovu sintaksu i druge run-time greške. Zatim proverava postojanje navedenih baza i polja u bazama. Potom se proverava da slučajno ne postoje dva polja istog imena u dve različite baze (a da nisu navedena imena radnih oblasti). I na kraju se izvršava UDF eventualno naveden u query-ju. Pošto FoxPro "proveri" UDF, UDF je praktično izvršena, čak i pre nego što je bilo koji podatak iz baze proveren. Eto zašto se UDF u query-ju izvršava jedanput više nego što mi očekujemo. Pošto je sintaksa SELECT-a proverena, na scenu stupa SQL optimizer. On vrši optimizaciju prema sledećim kriterijumima: - postoje li indeksi koji bi mogli ubrzati query? - ako ne postoje, treba li ih kreirati "u hodu"? - da li bi query trebao prvo da izvrši JOIN, pa tek potom doda filtere i pod-filtere, ili obrnuto? - može li FoxPro izbeći sekvencijalnu pretragu po bazama kreirajući neku "međubazu"? (nastavak o SQL sledi...)
baze.podataka.229 max.headroom,
* Í─────────────────────────────────Ě * ║ DB2PRG DESCRIPTION ║ * Ë─────────────────────────────────Ż * While developing applications, use CREATE and MODIFY STRUCTURE as usual * to create and modify data file structures. * Just before distributing your application, use DB2PRG.PRG. The most * current structure of each DBF will be recorded in the MAKEDBF.PRG * generated. * DB2PRG.PRG does not need to be distributed with an application, only * the MAKEDBF.PRG it creates need be distributed with your application. * Your applications could use the following code in it's initialization * process to let it know if it needs to DO MAKEDBF: * * mmakedbf = .NOT. FILE('myfile1.dbf') * mmakedbf = mmakedbf .OR. .NOT. FILE('myfile2.dbf') * mmakedbf = mmakedbf .OR. .NOT. FILE('myfile3.dbf') * * ... and so forth for every dbf file in the application * IF mmakedbf * DO makedbf * * makedbf will only create missing files. * * makedbf will never overwrite any dbf files that already exist. * DO reindex && application specific reindexing procedure you supply * ENDIF * The author acknowledges John Bauman for his article "DBF'S ON THE FLY" in * the August 1989 DATA BASED ADVISOR. The article ably proved the value of * DBF from scratch capabilities. DB2PRG has incorporated adaptations of * some of the methodologies described in John's article. db2prg.arj
baze.podataka.230 jmilovic,
Zanima me koji se software za baze podataka pokazao kao najbolji pod UNIX operativnim sistemom ???
baze.podataka.231 mdrazic,
> Varjanta dva jeste da na disku postoji nekakva prazna baza > podataka, u kojoj bi svaka radna stanica zaključavala po > jedan slog odmah po ulasku u program - i to, prvi ako > može, pa ako ne može onda proba drugi, i tako do N-tog. > Taj jedan slog za sve vreme rada drži zaključan, i njegov > redni broj je *jedinstven*. Uzgredan plus ovog rešenja > jeste što može da se ograniči trenutan broj korisnika > programa - zgodno ukoliko se prodaje licenca za korišćenje > na određenom broju mašina. Jest, a šta biva kada padne stanica: slog osta zaključan? Kod mene kada user pristupa sistemu kada prođe password, prvo mu prikažem ko je tada na sistemu i definišem njegov proces (kao poslednji proces istog usera koji se trenutno vrti + 1). Tada upišem u tabelu procesa da se logovao, vreme, i tako to. Kod rada možeš ako želiš da u ovu tabelu upisuješ šta radi user (gde je u meniju, koje transakcije izvodi i slično), pa ovlašćeno lice :) može prilično detaljno da gleda šta ko trenutno radi (dinamički). Kada user izađe regularno, i to se registruje, pa oslobađa proces. Kada padne stanica, to je serveru isto kao da se ona duže vreme ne javlja. Tako posle pada vidiš da postoji proces koji je poslednji put bio aktivan pre neka tri sata i možeš da ga ukineš (pospremiš šta treba). I ovde je trivijalno ograničiti istovremeni broj usera. Milan
baze.podataka.232 mdrazic,
> Ako je štampa u pitanju - ne treba praviti dva queue-a > (jedan local, jedan server). Ali se meni češće Za više štampača, više queue-ova; bar je meni tako lakše ;)) > Ja pravim neki TMP stack svega toga, pa kada mi mreža javi > da je stvar "finito", skidam je sa steka. Inače, Što da Novell ne brine o tome? A ti vozić dalje... > Elem, reši stvar: svakom programskom procesu dodeli neko > ime, pa to trpaj u neki privremeni stek. Ako user iz Ima jedan manje-više pouzdan brojač: to je vreme. Informacija o satu, minutu i sekundi može se spakovati u ne više od tri čitljiva bajta. Kada tražiš od za to namenjene funkcije novo tmp ime, na proj procesa sa logovanja dodaj ova tri bajta, sačekaj sekundu (da zabraniš da neko otvori pet prozora u sekundi:) i vrati tmp ime. Na ovaj način izbegavaš klasičan brojač, ali praviš gužvu na disku ako ne brišeš ove fajlove. Ima situacija kada ne znaš kada je fajl slobodan za brisanje (print queue na primer). Sa klasičnim brojačem koristiš ista imena fajlova kao u prethodnoj seansi, pa ih ima ipak ograničen broj. Više taskova sa klasičnim brojačem zahteva zapisivanje na disk radi komunikacije sa drugim taskovima. > drugog taska pokuša da pokrene isti programski deo > (deluje nebulozno), zabrani :) Logično je da neće da > pravi isti izveštaj u oba taska. Ali postoji mogućnost Štaviše, uopšte nije nelogično, već vrlo verovatno. Milan
baze.podataka.233 pedjak,
> po istoj datoteci i zapisu) moram nekako da izvedem zaključavanje > zapisa. Pošto nemam ama baš nikakvo iskustvo sa SHARE i mehanizmima > za zaključavanje pod DOS-om molim one koji su upućeni u problematiku > da mi objasne kako SHARE radi i kako se izvodi zaključavanje cele > datoteke i jednog njenog dela. Pomoglo bi i upućivanje na neku > literaturu. Da bi mogao da zaključavaš slogove u nekom multitasking okruženju, potrebno je da prethodno učitaš SHARE. Ukoliko radiš pod nekom mrežom, to nije potrebno, jer sam mrežni softver ima ugrađen SHARE mehanizam. Dalje, za sve operacije zaključavanja datoteka i slogova koriste se dve dosove funkcije: DOS open file ------------- AH=3DH AL=sa kakvim atributima se otvara fajl ( read/write+mrežni atributi ) DS=SEG filename DX=OFS filename INT 21H DOS Control Record Access ------------------------- AH=5CH AL=0/1 ( 0 - zaključavanje, 1 - otključavanje ) BX=handle CX=FILE_OFFSET_HI_WORD DX=FILE_OFFSET_LO_WORD SI=RECORD_LEN_HI_WORD DI=RECORD_LEN_LO_WORD INT 21H Kao što vidiš funkcije zaključavanja slogova se mogu lako implementirati u bilo kom modernom jeziku. Ali, pošto vidim da radiš u C++, u C-u već postoje gotove funkcije koje omogućavaju zaključavanje slogova. Za otvaranje fajlova koristi sopen koji barata datotekama na handle nivou, a za zaključavanje funckiju locking. Pogledaj i /rsoft/r068cht.zip, dat je jedan mali primer na tu temu chat između dva noda na mreži. p.s. ove funkcije postoje u MS C-u, za Borland nisam siguran.
baze.podataka.234 djelovic,
> ove funkcije postoje u MS C-u, za Borland nisam siguran. Ih, pa nemoj da vređaš :). BC++ ne samo da nudi Microsoftovu funkciju locking, nego i nudi mnogo komfornije lock i unlock.
baze.podataka.235 neman,
> Zasto? Taj slog se otkljuca cim se korisnik sledeci put > uloguje. Nema nikakve nekonzistentnosti i nikakvog > reindeksiranja jer je zapravo tabela Zato sto dok se korisnik ponovo ne uloguje ( a recimo slucajno ispadne ) ti nemas pojma da li on stvarno radi, tj. morao bi da uporedjujes listu korisnika koju mozes da dobijes preko Novell API-ja, a cemu onda dodatna baza ?. Da, da, treba podesiti vreme ocitavnja stanja radnih stanica.
baze.podataka.236 neman,
> I ovde je trivijalno ograniciti istovremeni broj usera. Mislim da Novell ima mogucnost zabrane prijave korisnika pod istim username-om. Definisi zatim grupu koja pristupa tom programu i to je to.
baze.podataka.237 djelovic,
> Zato sto dok se korisnik ponovo ne uloguje ( a recimo slucajno ispadne ) > ti nemas pojma da li on stvarno radi, tj. morao bi da uporedjujes listu > korisnika koju mozes da dobijes preko Novell API-ja, a cemu onda dodatna > baza ?. Da, da, treba podesiti vreme ocitavnja stanja radnih stanica. Dodatna baza radi ograničenja maksimalnog broja ljudi koji koriste program i radi određivanja jedinstavnenog broja za svaki proces nezavisno od OS-a na kome se sve to izvršava.
baze.podataka.238 misa.m,
>> ...uglovi na okvirima koji imaju nešto jednostrukih i nešto dvostrukih... Što ne uradiš običnu zamenu, ništa se ne gubi u izgledu: repl all details with chrtran(details,"ÍĚËŻ║","┌┐└┘│")
baze.podataka.239 misa.m,
>> USE baza ORDER pol >> t5 = SECO() >> BROWSE FOR pol = "M" NOWAIT WINDOW prozor Kada već ovako lepo testiraš Fox ubaci ako te ne mrzi i varijantu koja bi trebalo da bude efikasnija od Rushmore tehnologije u ovom poslednjem slučaju, odnosno kada je sam uslov u master indeksu: use baza order pol if seek("M") brow while pol = "M" nowait endif
baze.podataka.240 evlad,
>> Joj, to je :) Hvala - reko', Fox mi pobrljavio (a do sada nisam bas >> previse kalemio sa matricnim stampacima; plus sto nemam nikakav Ref. >> menjual). Ako nemas YUSCII slova na svedskom setu moze se font download-ovati, ali na samo 6 mesta. Ako ti to treba javi mi se na mail posto je malo duze.
baze.podataka.241 nbatocanin,
> Ako user iz drugog taska pokuša da pokrene isti programski deo > (deluje nebulozno), zabrani :) Logično je da neće da pravi isti > izveštaj u oba taska. Ne bih rekao :) Na primer, jedan proces traži zbirni izveštaj o prodaji u poslednjih mesec dana, a drugi od početka godine, zbog poređenja. Ja sve privremene datoteke kreiram tako da budu jedinstvene za svaki proces - tako nema problema makar svi istovremeno tražili isti izveštaj. Biće reči u novim Računarima :)
baze.podataka.242 misa.m,
Mala uporedna analiza korišćenja memorije i veličine Fox-ovih run-time izlaza na jednoj maloj aplikaciji (sve u KB). Ponekad i samo par KB memorije više mnogo znači. A B C D E ----------------------------------------------------------- FOXR+APP 265(512) 471(3676) 38582 Comp EXE 275(513) 471(3676) 49182 22130 47205 Stan EXE 272(517) - 1303087 Ext EXE - 495(3768) 1355963 751590 776988 ----------------------------------------------------------- A - Standard: slobodna osnovna i do 1MB memorija (pokrenut sa -x) B - Extended: slobodna osnovna i ukupno rezervisana XMS memorija C - Veličina aplikacije na disku D - Veličina nakon pakovanja sa ARJ a E - Isto kao D, stim što je aplikacija napravljena sa Encrypt opc. Mašina je 386/40 sa 8MB, QEMM 7.04, Fox je 2.6 DOS
baze.podataka.243 max.headroom,
> Zašto? Taj slog se otključa čim se korisnik sledeći put > uloguje. Zar neće izabrati novi nezaključan record iz baze?
baze.podataka.244 max.headroom,
> Hm, ovo mi nije baš najjasnije. Zašto bi kreiranje u RAM > disku bilo sigurnije od kreiranja na disku? I kakve veze > ima random ime sa sadržajem baze? Dobro, ovo je reply na moje pisanije. Nisi me razumeo - pričao sam o malim temporary bazama (što se RAM diska tiče), ali drugi deo (random ime i sadržaj baze) nisam dovodio ni u kakvu vezu :)
baze.podataka.245 max.headroom,
(SQL SELECT nastavak...) Wildcard (*) ------------ Wildcard se u SQL komandi može pojaviti samo u listi polja. Kada se umesto naziva polja navede *, u rezultat se ubacuju sva polja iz navedene baze, odn. moguće je navesti * posle naziva radne oblasti. Primer: SELECT * FROM baza1, baza2 ; WHERE b1art = b2art SELECT baza1.*, baza2.polje1, baza2.polje2 ; FROM baza1, baza2 ; WHERE b1art = b2art U rezultat su (prvi primer) uključena sva polja iz obe baze (BAZA1.DBF i BAZA2.DBF). U drugom primeru u rezultat su uključena sva polja iz BAZA1.DBF baze i polja POLJE1 i POLJE2 iz BAZA2.DBF baze. AS (Alias za naziv kolone) -------------------------- Znate i sami da je dosta nezgodno gledati BROWSE ili neki report kada su nazivi kolona (Headings, parametar :H u BROWSE-u) identični nazivima polja u bazi (npr. "red_br_a" ili "datrodj"). SQL SELECT parametar AS nam omogućava da nazive kolona koje se pojavljuju u rezultatu predefinišemo. Primer: SELECT datrodj AS datum_rodj, pbr AS post_broj ; FROM baza1 Rezultujući BROWSE će imati nazive kolona "datum_rodj" i "post_broj". Alias ime kolone ne sme prelaziti 10 karaktera, i ne sme sadržati spejsove. Nezgoda je što ovaj parametar nije definisan ANSI/ISO standardom, pa će tako kreirani query biti neportabilan (neće moći da se seli na druge platforme). DISTINCT (zabrana ponavljanja) ------------------------------ DISTINCT eliminiše duplicirana polja iz rezultata. Na primer, ako želimo listu imena i svih zaposlenih u firmi, koristićemo: SELECT DISTINCT ime ; FROM baza1 Međutim, ako u rezultat ubacimo još jedno polje: SELECT DISTINCT ime, prezime ; FROM baza1 Pojavljivaće se duplirana imena u slučajevima kada su prezimena različita. Evo šta SQL radi kada naiđe na DISTINCT: - kreira se pomoćna baza koja sadrži sve vrednosti iz zadatog polja. - nad tom bazom se kreira unique indeks (odn. na polju (poljima) koje je obeleženo sa DISTINCT). - SQL tada primenjuje kreirani indeks na privremenu bazu i u rezultat povlači samo podatke iz indeksa. Daklem, bez duplikata. Međutim, sve ovo ume i da potraje... WHERE ----- Najčešće nam nije namera da u rezultat query-ja guramo sve vrednosti iz polja, tj. potrebno nam je da polja koja će stići u rezultat odgovaraju nekom uslovu. Za to nam je potrebna neka vrsta filtera. Ako koristimo SET FILTER komandu nad bazom iz koje rezultate vadimo sa SQL SELECT-om, nećemo postići ništa, jerbo se eksterni filteri ignorišu. Zato u sledećem primeru kao rezultat dobijamo sva polja iz baze: USE baza1 SET FILTER TO UPPER(republika) = "SRBIJA" SELECT ime, prezime, republika FROM baza1 Za željeni rezultat potrebno je sledeće: SELECT ime, prezime, republika ; FROM baza1 ; WHERE UPPER(republika) = "SRBIJA" Filteri i podfilteri -------------------- Podfiltere je moguće praviti sa AND i OR. Može ih biti koliko hoćete unutar jedne WHERE opcije. Primer: SELECT racun, predracun FROM racuni, predrac WHERE racun = predracun ; AND UPPER(ime) = "MARKO" ; AND UPPER(prezime) = "CICIĆ" ; AND datum >= š01.01.94ć ; AND datum <= š10.01.94ć Kao rezultat se dobija lista racuna i predracuna (sa identičnim brojevima) koje je kupio Marko Cicić u periodu od 01.01. do 10.01. 1994. godine. Još jedan primer: SELECT racun, predracun FROM racuni, predrac WHERE racun = predracun ; AND UPPER(ime) = "MARKO" ; AND UPPER(prezime) = "CICIĆ" ; OR datum >= š01.01.94ć ; AND datum <= š10.01.94ć Rezultat je identičan rezultatu iz prethodnog primera, sa tom razlikom što se izbacuju i računi/predračuni koji su ili pisani na Marka Cicića, ili pripadaju navedenom vremenskom periodu. JOIN ---- Kada u query-ju imamo posla sa više baza, potrebno je da primenimo specijalni tip WHERE opcije, zvane "join". Join uspostavlja relaciju bilo one-to-one, bilo one-to-many tipa nad bazama navedenim posle FROM. Ako se, pak, ne koristi JOIN, SQL primenjuje sistem po kome su svi zapisi iz BAZA1.DBF baze povezani sa svim zapisima iz BAZA2.DBF baze. U slučaju da baza1 ima 10,000 zapisa, a baza2 200,000 zapisa, rezultat sadrži 2,000,000 zapisa. To ume da POTRAJE. Ograničenja su sledeća: nemože se imati query u kome je jedna baza povezana relacijom sa više od jedne baze-roditelja. Na primer, ako je baza RACUNI (brojevi računa i suma sa računa) povezana relacijom one-to-many sa bazama SPECIFIK (brojevi računa, stavke sa računa i cene), odn. PLACENO (brojevi računa i datumi prispelih uplata na iste), nije moguće generisati rezultat koristeći jednostavno: SELECT * FROM racuni, specifik, placeno ; WHERE specifik.brracuna = racuni.brracuna ; AND placeno.brracuna = racuni.brracuna jer SQL poredi sadržaje polja iz više baza sa sadržajem polja u jednoj bazi, pa se kao rezultat dobija jedan zapis za svaki od zapisa u child-bazi, i tako za svaku relaciju. Jendostavnije, dobija se višak zapisa :) BETWEEN ------- Koristi se da se utvrdi da li vrednosti polja odgovaraju zadatom intervalu, sa tim da vrednosti polja ne smeju biti drugačijeg tipa od onog u uslovu. Primer: SELECT brracuna FROM racuni ; WHERE datum BETWEEN š01.01.94ć AND š10.01.94ć IN -- IN se koristi kada želimo poređene sadržaja navedenog polja sa definisanim skupom vrednosti. Primer: SELECT brracuna FROM racuni ; WHERE UPPER(kupac) IN("INTERSOFT","COMTRADE","ABC COMPUTING") Rezultat su svi brojevi računa koji su izdati firmama Intersoft, ComTrade i ABC Computing. Kao i u BETWEEN-u, vrednosti polja ne smeju biti drugačijeg tipa od onog navedenog u uslovu. Takođe, moguća je i sledeća kombinacija: SELECT brracuna FROM racuni ; WHERE UPPER(kupac) NOT IN("čIKA COMP","MIKA COMP") Pa se kao rezultat dobijaju brojevi računa koji NISU izdati firmama čika Computers i Mika Computers. (Nastavak o SQL SELECT sledi...)
baze.podataka.246 mdrazic,
> Zanima me koji se software za baze podataka pokazao kao > najbolji pod UNIX operativnim sistemom ??? Oracle 7 je po reklamama šio ostale po brzini otprilike duplo. Kako, ne znam. Najavljuje se Oracle 8 (višestruki commit, replikacija tabela,... koliko sam čuo). Ne znam ima li DB2 za Unix. Zavisi i na kojoj platformi. Milan
baze.podataka.247 mdrazic,
Evo stigla mi je pod ruku jedna bibliografija iz oblasti projektovanja i CASE-a. Ko ima informacije o nekoj od knjiga (kakva je, sadržaj, gde se nalazi itd.) molim da javi ovde. 1. Paul T. Ward, Stephen J. Mellor Structured Development for Real Time Systems (Vols I-III) Yourdon Press, 1985. 2. Derek J. Hatley, Imtiaz A. Pirbhai Strategies for Real-Time System Specification Dorset House, 1987. 3. Meiler Page-Jones Practical Guide to Structured Systems Design (Second Edition) Yourdon Press, 1987. 4. Tom DeMarco Structured Analysis and Systems Specification Yourdon Press, 1978. 5. E. N. Yourdon Modern Structured Analysis Yourdon Press, 1988. 6. S. Shlaer, S. Mellor Object Oriented Systems Analysis Yourdon Press, 1989. 7. M. McMenamin, J. F. Palmer Essential Structured Analysis Prentice-Hall, 1984. 8. B. Dickinson Developing Quality Systems Yourdon Press, 1989. 9. P. Chen The Entity-Relationship Approach to Logical Database Design QED Information Sciences, 1977. 10. James Martin, Carma McClure Structured Techniques for Computing Prentice-Hall, 1985. 11. Michael Jackson System Development Prentice-Hall Intl., 1983. 12. E. N. Yourdon, L. L. Constantine Structured design Prentice-Hall, 1979. 13. C. Gane, T. Sarson Structured Systems Analysis: Tools and Techniques Prentice-Hall, 1979. 14. B. Dickinson Developing Quality Systems (second edition) Yourdon Press, 1989. 15. Carma McClure CASE Is Software Automation Prentice-Hall, 1988. 16. R. Elmasri, S. Navathe Fundamentals of Database Systems The Benjamin/Cummings Company Inc., 1989. 17. Peter Coad, Edward Yourdon Object Oriented Analysis (second edition) Yourdon Press, 1990. 18. Rex Hogan A Practical Guide to Database Design Prentice-Hall, 1990. 19. C. Fleminf, B. VonHalle Handbook of Relational Database Design Addison-Wesley, 1989. 20. Larry Towner CASE Concepts and Implementation McGraw Hill, 1989. 21. James Martin Information Engineering (Books 1-3) Prentice-Hall, 1989. Ako neko ima još neku referencu u vezi projektovanja, molim da doda. Posebno molim kolege sa FONa i ETFa da provere ima li nešto od ovoga u njihovoj biblioteci. Milan
baze.podataka.248 ppekovic,
>> Zanima me koji se software za baze podataka pokazao kao najbolji pod >> UNIX operativnim sistemom ??? Teško je reći koji je najbolji, ali je najpopularniji svakako ORACLE. Paya
baze.podataka.249 djelovic,
> > Zašto? Taj slog se otključa čim se korisnik sledeći put > > uloguje. > > Zar neće izabrati novi nezaključan record iz baze? Ma hoće, ali sam odgovarao na zamerku da će u slučaju pada mašine slog ostati zaključan. Bez obzira da li mreža vrši automatski logout, sve se dovede na meste čim se korisnik opet uloguje.
baze.podataka.250 max.headroom,
> Štaviše, uopšte nije nelogično, već vrlo verovatno. Znaem, znaem :) Zato sam i dao primere sa datumima (nisam mislio da prog. task bude otvaranje prozora :)
baze.podataka.251 max.headroom,
> Ne bih rekao :) Na primer, jedan proces traži zbirni > izveštaj o prodaji u poslednjih mesec dana, a drugi od > početka godine, zbog Buhuhuu, pa ja sam ispod ovog citata dao još dva reda teksta u kojima objašnjavam da to ne važi kada task ima drugačiji parametar (npr. izveštaj sa drugačijim datumom, ili, npr. izveštaj za drugu firmu)... Mislio sam da se beleži u formatu: ime_taska+parametar. Medžutim ;), ako user pokuša da pokrene ISTI report sa ISTIM parametrima, tada on prosto ubija dosadu testirajući program, i ima da mu sledi poruka "Bolje igraj Tetris" :) Nego, videste li onaj Tetris za Fox? Zamislite koji je to komercijalni udar za end-usera :)
baze.podataka.252 max.headroom,
> Dodatna baza radi ograničenja maksimalnog broja ljudi koji > koriste program Baš sam počeo da pišem o Fox-ovom LAN interface-u kada mi neko reče da to stavim u fajl. Tu je lepo objašnjeno kako skinuti broj aktivnih usera.
baze.podataka.253 mdrazic,
> Mislim da Novell ima mogucnost zabrane prijave korisnika > pod istim username-om. Definisi zatim grupu koja pristupa > tom programu i to je to. Ja teram korisnike da se prijavljuju i u paket. Ne može mi tamo neki supervisor da radi ako mu ne dozvolim :)) . U principu imena u mreži i u paketu mogu biti različita. Pošto isti program (mora da) radi i u mrežnom okruženju i na običnom PC-ju, ne bakćem se čitanjem Novell username-a, mada i to ima dobrih strana. Milan
baze.podataka.254 pedjak,
>> ove funkcije postoje u MS C-u, za Borland nisam siguran. > Ih, pa nemoj da vređaš :). BC++ ne samo da nudi Microsoftovu > funkciju locking, nego i nudi mnogo komfornije lock i unlock. Ih :) na radim sa BC++, pa sam se odmah ogradio, da ne ispadne posle da pričam bezveze :)
baze.podataka.255 ndragan,
/ repl all details with chrtran(details,"ÍĚËŻ║","┌┐└┘│") To nije problem, za aplikaciju ionako generišem sopstveni *help.dbf, koji izbegava čudna slova, a za pendžersku verziju napokon generišem zglavan .rtf koji se uredno kompajlira. A u tu priču sa generisanjem .RTF fajla sam uleteo upravo zato što ne mogu da promenim font u dos_style help pendžeru, gde su okviri još najmanji problem - mnogo veći problem je kodna strana tog fonta. Nikad ne znam da li treba da mu dam memo polje za 1250 ili 852.
baze.podataka.256 ndragan,
/ rešenje. (Dobro, ovo nikome ne pada na pamet da koristi iz stojednog / razloga, ali hint je interesantan) Radio sam nešto slično kod nekih prepisa iz baze u bazu u stilu "ajde sad da prebacimo ove naloge iz fakturisanja u analitiku i glavnu knjigu". Pošto nije nikad sigurno da se prepis pušta prvi put, kao ni da li ima isti broj slogova ili ne, ciljna baza je bila indeksirana po broju naloga i kontu, pa su se svi slogovi koji su već postojali praznili (izuzev broja naloga), i prepis je išao po principu "ako nađeš slog sa ključem m.nalog+chr(254), gazi slobodno, inače pravi nov". Tako je, istina, ponekad ostajalo nešto slogova sa chr(254) u kontu, ali garant praznih po svim drugim pitanjima pa su se mogli ladno ignorisati. Inače, taj štos nije loš ako rutinu za upis pišeš peške i taj se trik pojavljuje regularno (u svim bazama itd). Ostaje još samo da se povremenu uradi Pack Memo, što opet treba sračunati kada treba da se radi. BTNJ, jel neko napisao funkciju koja bi umela da vrati količinu bačenog prostora u .fpt fajlu, pa da onda malo proračunamo kad je zrelo za pakovanje, ili čak za pregenerisanje baze sa drugom veličinom bloka.
baze.podataka.257 ndragan,
/ inkriminisanog dela programa biti iznova kreirane pod random imenom, a / posle upotrebe obrisane. Da ne bih gušio, poenta je u sledećem: ako se / ispostavi da neka temporary baza treba da postoji, gurnite je u RAM / disk. Manje-više što je brže, nego je _pouzdanije_. Ne volim da se oslanjam na to da se neka baza nalazi na direktoriju, i da ima strukturu koju treba da ima; više volim da program sadrži strukturu, tj Create Table/Cursor trt_mrt (polje1 c(13), ...) Naravno, vrlo retko pišem takve rutine... napisao sam programče koje ih generiše. Štaviše, kad menjam strukturu, izmenim je u takvoj rutini, jer nikad nisam siguran da neću kroz pet minuta odzipovati bazu sa starom strukturom ;).
baze.podataka.258 ndragan,
/ A uzgred minus je situacija kada aplikacija pukne tj. neregularno :) / zavrsi rad. Baš i nije neki minus - slog je ostao zaključan, piše čiji je, ako broj potrošenih slogova ne premašuje bonus, korisnik može ponovo da se zakači itd. Nije loše, mogao bih da probam (mada meni i ne treba, jer sam u položaju da propišem strogo jednokratno prijavljivanje). S druge strane, mislim da je zaključavanje sloga malo skupo rešenje, troši se po jedna brava za svakog korisnika; lakše bi bilo da se postavi indikatorsko polje i da se kontroliše iz aplikacije te da ladno otkačiš ponovo prijavljenog korisnika. Ovako ostavljaš mreži da se petlja sa bravama svaki put kad neko pristupi toj bazi.
baze.podataka.259 ndragan,
/ Mislim da Novell ima mogucnost zabrane prijave korisnika pod istim Na novelu 4.x (valjda i na 3.*) za svakog korisnika imaš varijantu da definišeš najveći broj istovremenih prijava; difolt je 3 a niko te ne sprečava da staviš 1.
baze.podataka.260 ndragan,
/ sledećem otvaranju iz baze bivaju izbrisane sve definicije indeksa i / greška se više ne javlja, ali to nipošto ne rešava problem :) Upravo tako, moraš sam da ga rešiš :). Naime, difolt ponašanje je da se prilikom otvaranja baze sa kršnim .cdx fajlom isti jednostavno ignoriše, i to tako što se u zaglavlju baze isti komplet zaboravi. Ja upravo tako i indeksiram, prvo obrišem .cdx sa diska, pa otvorim bazu; foks javi grešku, koju odignorišem (dobro, presretnem) i reagujem tako da bazu otvorim ponovo, i onda _pravim_ nov .cdx fajl. Naravoučenije: aman ljudi, svi smo se po jednom zeznuli stavljajući Reindex u proceduru za indeksiranje. To pada na prvom indeksu sa oštećenim hederom. Procedura za indeksiranje treba (mora!) da sadrži kompletnu informaciju o ključevima i eventualnim filtriranim indeksima, a ni u kom slučaju ne sme da zavisi od toga da li na disku već postoji indeksni fajl i u kakvom je stanju. p.s. problem je čak i ako se to desi kad smo kod korisnika - ko će se setiti naziva, redosleda i tačnih indeksnih pojmova za sve tegove, a?
baze.podataka.261 ndragan,
/ Rešenje ovog problema sastoji se u sledećem: indeksirajte bazu (u / kojoj važi SET DELETED ON) po još jednom ključu - Da, tako nešto piše i u helpu, mada mi se baš i ne sviđa previše. Ovo je u stvari problem tipa "starim putem pa bez drumarine ili obratno". S jedne strane, ako nemam mnogo obrisanih slogova, cela priča me se ne tiče previše, i samo me nervira što uopšte tretira te obrisane slogove /zar nisu mogli da drže i brojač obrisanih slogova u zaglavlju baze/, ali me se tiče što mi sve radi dovoljno sporije. Select count() upravo služi brojanju neobrisanih slogova (ukupan se ionako dobija sa recc()); s druge strane, inde on dele() to trt_mrt goji .cdx fajlove i usporava pristup istima čisto zbog veličine (jes' da ima ukupno dva indeksna pojma, ali zato ima po bar tri bajta za svaki slog, plus režija u zaglavljima blokova). Sve skupa, opet treba da proračunavamo kad nam se šta isplati.
baze.podataka.262 ndragan,
/ SQL SELECT ignoriše ORDER postavku, te tako ne pati od pomenutih / "stomačnih tegoba". Jes', ali u helpu isto kaže da i Select radi brže ako baza ima order 0; nemam pojma zašto, ali ako su to napisali isti ljudi koji su to i pravili, valjda oni znaju.
baze.podataka.263 ndragan,
/ Eto - zaključke izvlačite sami :) Jel to beše tek od 2.5 ili 2.6 uvedeno Browse ... Rest, tako da se uradi jedno Seek ili Locate, pa onda Browse For ... Rest, tako da ni ne pokušava da gleda bazu do tog mesta, nego odmah skače na taj slog i gleda ostatak. Trebalo bi da je brže od svega.
baze.podataka.264 max.headroom,
(Nastavak SQL SELECT...) LIKE ---- žesto se dešava da ne želimo tačno poređenje dva izraza, odn. da imamo potrebu da samo deo jednog izraza tražimo u drugom. Za to se kod SQL SELECT-a koristi LIKE opcija, sa odatkom % ili _ operanda. % - Koristi se da se zameni proizvoljan broj karaktera. Posebno je koristan za pretrage po memo-poljima. Primer: SELECT roba.brartikla, roba.opis, racuni.brracuna ; FROM roba, racuni ; WHERE racuni.brartikla = roba.brartikla ; AND roba.opis LIKE "%Patike%" Rezultat su svi brojevi artikala zajedno sa opisima, a koji su izdati po fakturama. Uslov je i taj da se u opisu robe mora nalaziti reč (deo reči) "Patike". Opis može biti i memo-polje. U rezultujućem polju OPIS mogu se naći "Crvene Patike", kao i "Patike Zelene" :) _ - (Underscore) Ovaj wildcard je sličan DOS-ovom ?. On zamenjuje jedan karakter u izrazu. Na primer: SELECT roba.brartikla, racuni.kupac, racuni.brracuna ; FROM roba, racuni ; WHERE racuni.brartikla = roba.brartikla ; AND racuni.kupac LIKE "M_rko" Rezultat su svi brojevi artikala zajedno sa opisima, a koji su izdati po fakturama. Uslov je i taj da se u imenu kupca pojavljuje "Marko" ili "Mirko". Normalno, džoker-znake _ i % moguće je i kombinovati unutar jednog izraza. Međutim, u slučaju da u izrazu tražimo upravo neki od ta dva znaka (% ili _), koristimo opciju ESCAPE. Primer: SELECT roba.brartikla, racuni.kupac, racuni.brracuna ; FROM roba, racuni ; WHERE racuni.brartikla = roba.brartikla ; AND racuni.kupac LIKE "%/%%" ESCAPE "/" Znači, u imenu kupca tražimo znak "%". Karakter koji je naznačen posle ESCAPE je karakter posle koga se nalazi znak koji se ne prevodi. Dakle, ako smo za ESCAPE karakter naznačili "/", tada i u izrazu, odmah posle ESCAPE karaktera (%/%%) mora da postoji vrednost koja se neće prevoditi kao wildcard - u ovom slučaju to je znak "%". SQL i makroi ------------ SQL komanda bez problema koristi makroe (macro substitution), i što je najvažnije, makro se u query-ju prevodi samo jednom. Primer: baza1 = "BAZA.DBF" baza2 = "LISTA.DBF" SELECT * ; FROM (baza1) ; WHERE baza = &baza2 A makroi se mogu koristiti čak i kod LIKE klauzule, radi poređenja: naziv = "Patike" SELECT roba.brartikla, roba.opis, racuni.brracuna ; FROM roba, racuni ; WHERE racuni.brartikla = roba.brartikla ; AND roba.opis LIKE "%&naziv%" SQL i veličina slova (Case Sensitivity) --------------------------------------- SQL je case-sensitive, tj. pravi razliku između velikih i malih slova. Npr. ako se u polju ime nalazi "Marko", tada poređenje tipa ime = "MARKO" daje False rezultat. Zato bi valjalo navesti jedno UPPER. SQL i indeksi ------------- WHERE opcija koristi Rushmore i indekse da bi ubrzala pretragu. SQL može koristiti sve tipove indeksa: structural CDX (tag), external CDX ili external IDX. Međutim, da bi SQL mogao da iskoristi eksterne indekse, pre pozivanja SELECT komande potrebno je takve indekse i otvoriti. Primer: USE baza INDEX idxfajl, extcdx Sortiranje rezultata sa ORDER BY -------------------------------- ORDER opcija može biti primenjena na proizvoljan broj polja, što znači da se rezultujuća baza može sortirati po proizvoljnom broju parametara (odn. onoliko polja koliko se nalazi u listi polja posle SELECT). Primer: SELECT republika, ime ; FROM baza ; WHERE republika IN ("SRBIJA","CRNA GORA") ; ORDER BY republika, ime Rezultujući BROWSE će prikazati podatke sortirane po republikama, a unutar njih po imenima. Sortiranje je ASCENDING (default, od A do Z), što se može i promeniti dodavanjem opcije DESCENDING (od Z do A). Moguće je čak kombinovati ASCENDING (ne navode se eksplicitno) i DESCENDING parametre. Primer: SELECT republika, ime ; FROM baza ; WHERE republika IN ("SRBIJA","CRNA GORA") ; ORDER BY republika, ime DESCENDING U rezultatu će podaci biti prikazani po republikama (prvo Crna Gora, zatim Srbija - od A do Z), a unutar tako isortiranih podataka sortiraju se imena od Z do A (DESCENDING). Konačno, moguće je rezultujuću bazu (sa ORDER BY) sortirati i po rednom broju polja navedenog u listi polja posle SELECT (korisno ako sortiramo po poljima koja sadrže neki UDF ili neku Fox-ovu f-ju tipa UPPER() ili LEFT()). Primer isti kao i prethodni: SELECT republika, ime ; FROM baza ; WHERE republika IN ("SRBIJA","CRNA GORA") ; ORDER BY 1, 2 DESCENDING Funkcije za rad sa kolonama --------------------------- U listi polja je moguće navesti bilo koju od sledećih funkcija: AVG(ime_polja) - Prosek za navedeno polje. Polje mora sadržati samo numeričke vrednosti. SUM(ime_polja) - Suma za navedeno polje. Polje mora sadržati samo numeričke vrednosti. MIN(ime_polja) - Najmanja vrednost u navedenom polju. Dozvoljeni tipovi podataka su: Numeric, Character i Date. MAX(ime_polja) - Najveća vrednost u navedenom polju. Dozvoljeni tipovi podataka su: Numeric, Character i Date. COUNT(ime_polja) - Broj zapisa u kojima se pojavljuje određeno polje. Taj broj zavisi isključivo od filtera koji se primenjuje nad bazom. Zato se umesto (ime_polja) može navesti i * wildcard. SELECT SUM(cena), artikal ; FROM racuni ; WHERE datum = š10.01.94ć Navedeni primer daje summary rezultat cena za svaki artikal prodat 10.01.1994., ali sve to u jednom zapisu (pogledati GROUP BY za drugačiju izvedbu). Rezultate je moguće i sortirati pomoću ORDER BY: SELECT SUM(cena), artikal ; FROM racuni ; WHERE datum = š10.01.94ć ; ORDER BY artikal, 1 DESC Moguće je koristiti i opciju DISTINCT za sve f-je za rad sa kolonama osim MIN() i MAX(). Npr: SELECT AVG(DISTINCT cena), artikal ; FROM racuni Ali pažnja - moguće je imati samo jedan DISTINCT u listi polja. Sledeći primer neće raditi: SELECT DISTINCT AVG(DISTINCT cena), artikal ; FROM racuni I još nešto: COUNT() f-ja neće dozvoliti upotrebu DISTINCT opcije ako je ime polja zamenjeno sa * (wildcard), npr. COUNT(DISTINCT *). Da bi se uradilo DISTINCT, u COUNT()-u se mora navesti i ime polja. I još jedna sitnica :) - nije moguće izvršavati "nested" f-je za rad sa kolonama, tipa: SELECT SUM(AVG(cena)) FROM racuni Jerbo Fox prijavljuje grešku "AVG.PRG cannot be found". (Nastavak SQL SELECT sledi...)
baze.podataka.265 zoranv,
Jedan problem vazna za Fox Pro za Win 2.5. Kako da se postigne poravnanje teksta uz desnu marginu u jednoj od kolona u BROWSE prozoru?
baze.podataka.266 zoranv,
Da li neko zna da li postoji grupa za Fox Pro za WIndows? Ja sam zainteresovan ...
baze.podataka.267 dr.grba,
>> Jel to beše tek od 2.5 ili 2.6 uvedeno Browse ... Rest, tako da se uradi >> jedno Seek ili Locate, pa onda Browse For ... Rest, tako da ni ne Eto, a mene si zimus zezao zbog "tek sad uvedenog" SCOPE indeksa u Clipper. (:
baze.podataka.268 pedjav,
> Da bi mogao da zaključavaš slogove u nekom multitasking okruženju, > potrebno je da prethodno učitaš SHARE. Ukoliko radiš pod nekom > mrežom, to nije potrebno, jer sam mrežni softver ima ugrađen SHARE Dobro, to je sve OK i jasno mi je. Ali tu se sad postavlja još jedan problem - dead-lock? Da malo pojasnim problem: Proces A je zaključao jedan slog i zahteva drugi slog koji, međutim, drži proces B, koji istovremeno zahteva baš onaj slog koji drži proces A. Tako se stvara jedna beskonačna petlja u kojoj dva procesa čekaju da budu oslobođeni slogovi koji im trebaju trošeći procesorsko vreme. U praksi se može dogoditi da jednu takvu petlju čini veći broj procesa. Mene sada interesuje da li SHARE o svemu ovome vodi računa pre nego što dozvoli zaključavanje nekog sloga ili ću sam morati da napišem neku rutinu koja će to regulisati (napr. neće dozvoliti zaključavanje ukoliko će to dovesti do pojave dead-locka).
baze.podataka.269 max.headroom,
> Jes', ali u helpu isto kaže da i Select radi brže ako baza > ima order 0; Hmmm... tada je baza već otvorena, pa je i logično - SQL SELECT nema potrebu da istu ponovo "fizički" otvara, već je iskopira u drugu radnu oblast (USE...AGAIN). Verovatno grešim.
baze.podataka.270 max.headroom,
> gleda ostatak. Trebalo bi da je brže od svega. Da, ja sam računao na ver. 2.00. Ipak, 2.5 for DOS/WIN je još uvek u fazi razbucavanja :)
baze.podataka.271 max.headroom,
(Nastavak SQL SELECT...) GROUP BY -------- Ranije sam pomenuo primer: SELECT SUM(cena), kupac ; FROM racuni ; WHERE artikal = "Cipele" Daklem, kao rezultat se dobija samo jedan zapis, a mi smo želeli zbirno izračunati koliko je koji kupac kupio cipela, odn. jedan zapis po kupcu (sa sub-totalom za svakog kupca). Za takvo nešto potrebno je koristiti GROUP BY opciju. Ona grupiše rezultat po navedenom parametru (nazivu polja). Primer koji to radi: SELECT SUM(cena), kupac ; FROM racuni ; WHERE artikal = "Cipele" ; GROUP BY kupac Kada Fox izvršava query sa GROUP BY, on kreira jednu međubazu u koju prenosi sadržaje svih navedenih polja iz liste polja, kao i polja navedena iza GROUP BY. To znači da rezultat možemo grupisati i po polju koje se ne pojavljuje u rezultatu. Tada se polja filtriraju po uslovu koji stoji posle WHERE. Potom se podaci grupišu i nad njima se izvršava SUM() ond. neka druga SQL f-ja. Posle GROUP BY se može navesti proizvoljan broj polja, pa je moguća i ova kombinacija: SELECT artikal, SUM(cena), kupac ; FROM racuni ; GROUP BY artikal, kupac Još nešto - GROUP BY radi brže od DISTINCT, pa je, ako želimo grupisanje podataka neke velike baze (a ne želimo redundantne zapise), grupisanje potrebno uraditi po nekom unique polju (U prethodnom primeru bi se mogla otvoriti i baza ROBA.DBF, iz koje bi se vadile šifre artikala - one se sigurno ne ponavljaju). HAVING ------ Pošto smo sa GROUP BY sredili da dobijamo subtotale, javlja se sledeći problem - kako ustanoviti kriterijum koja će se grupa pojavljivati u izveštaju, a koja neće? Nije moguće koristiti WHERE opciju jer ona ima uticaj samo na originalnu bazu, dok je nama potreban filter za međubazu kreiranu od GROUP BY. HAVING opcija nam omogućava upravo to - koje će grupe preći u međubazu i pojaviti se u izveštaju. Kontrola se vrši uglavnom AVG(), SUM() ili nekom sličnom SQL f-jom, a koja može i ne mora biti ista kao i SQL f-ja u listi polja. Primer: SELECT SUM(cena), kupac ; FROM racuni ; WHERE artikal = "Cipele" ; GROUP BY kupac ; HAVING SUM(cena) > 0 Tako da query omogućava pregled samo onih grupa kojima je subtotal veći od nule. (Dešava se da programer uradi sledeće: SELECT * FROM racuni HAVING artikal = "Cipele" što se izvršava sto puta sporije, a Rushmore-u ne pada na pamet da ga gleda. Najpravilnija kombinacija je: SELECT * FROM racuni WHERE artikal = "Cipele" ) U KOM OBLIKU ĆE BITI REZULTAT? ------------------------------ FoxPro 2.5 omogućava direkciju izlaza (SELECT INTO) u: CURSOR, DBF (TABLE) i ARRAY. Rezultat se može smestiti i u ASCII FILE ili biti poslat na PRINTER. Može se koristiti INTO ili TO opcija, ali ne obe odjednom (iako će SQL dati prednost INTO opciji). INTO CURSOR ----------- SELECT "cursor" je privremena baza na koju se primenjuje filter - sada, zavisno od veličine tog temporary fajla, on će biti ili u memoriji, ili na disku. I to su uglavnom read-only baze. Međutim, ako se podaci dobijeni kroz query žele zadržati za dalju upotrebu (npr. njihovo propuštanje kroz novi query), najbolje je raditi smeštanje podataka ne u "cursor", već u "dbf" (ili "table"). Ali ako je IPAK potrebno imati tu privremenu bazu na disku (dakle, da budemo sigurni da je ona i na disku, a ne da se samo povlači po memoriji), koristimo sledeće: - AS opciju za zaglavlja polja. - Korišćenje izraza u listi polja koji nije samo puko ime polja. - GROUP BY ili ORDER BY opciju. - Neka SQL f-ja za operacije nad kolonama (poljima) - AVG(), SUM()... Pretpostavimo da pokušate da koristite "cursor" da bi podatke iz njega prebacili u neku drugu bazu. Tada je neophodno znati da je "cursor" neka postojeća baza na disku, a ne njena kopija u memoriji. Ako "cursor" baza (sa odgovarajućim filterom) postoji na disku, APPEND FROM komanda će ignorisati filter uspostavljen SELECT komandom i dodati sve zapise iz izvorne baze. Da bi se odredilo da li imate filtrirani ili "pravi" cursor, treba posle završenog query-ja uneti sledeće: xx = DBF() Pa ako je xx baza sa nastavkom .TMP, u pitanju je "pravi" cursor. Međutim, još uvek se ne možete pozvati na alias radne oblasti (u ovom slučaju ime cursor-a), jer kada se koristi APPEND FROM, mora se navesti i ime baze. Tada se radi sledeće: SELECT * FROM racuni ; WHERE datum BETWEEN š01.01.94ć AND š10.01.94ć ; INTO CURSOR kursor ORDER BY datum SELECT baza APPEND FROM (DBF("kursor")) Još nešto - pazite šta se događa sa filtriranim cursor-om u višekorisničkoj sredini, jer je on, jednostavno, baza na koju se primenjuje filter. Svaka izmena u originalnoj bazi dovodi do promene resultata u cursor-u. INTO ARRAY ---------- SELECT kupac, brracuna ; FROM racuni ; WHERE artikal = "Cipele" ; INTO ARRAY matrica Padžnja :) - ako nema rezultata, nema ni matrice. Daklem, mora se proveriti postojanje iste pre njene dalje upotrebe. Najbolji trik je proverom vrednosti u _TALLY sistemskoj promenljivoj, posle izvršenog SELECT-a. Primer: IF _TALLY = 0 && Nema elemenata u matrici, tj. nema matrice .......... ENDIF Takođe, nemojte vršiti prenos podataka u matricu ako niste sigurni kolika je veličina rezultata. Maksimalni broj elemenata jedne matrice (FoxPro 2.5) je 65,000, a može zafaliti i memorije. U oba slučaja Fox prijavi grešku. INTO TABLE / DBF ---------------- Od rezultata query-ja kreira permanentnu bazu. Primer: SELECT kupac, brracuna ; FROM racuni ; WHERE artikal = "Cipele" ; INTO TABLE baza Pažnja - ako je SET SAFETY OFF, Fox ne prijavljuje nikakvu poruku u slučaju da je ime baze navedeno posle INTO TABLE isto kao i ime neke već postojeće baze (makar ona bila i otvorena), stara baza će biti zatvorena i nova će pretrčati preko nje (!). TO FILE ------- Prebacuje podatke dobijene query-jem u ASCII fajl. Primer: SELECT kupac, brracuna ; FROM racuni ; WHERE artikal = "Cipele" ; TO FILE fajl.txt ADDITIVE TO PRINTER ---------- Prebacuje podatke dobijene query-jem na printer. Primer: SELECT kupac, brracuna ; FROM racuni ; WHERE artikal = "Cipele" ; TO PRINTER NOCONSOLE
baze.podataka.272 nbatocanin,
> Mene sada interesuje da li SHARE o svemu > ovome vodi računa pre nego što dozvoli zaključavanje nekog > sloga ili ću sam morati da napišem neku rutinu koja će to > regulisati (napr. neće dozvoliti zaključavanje ukoliko će > to dovesti do pojave dead-locka). Nikako. Ovo je problem koji SHARE uopšte i ne može rešavati.
baze.podataka.273 gcurcic,
¨˙> Dobro, ovo je reply na moje pisanije. Nisi me razumeo - pričao sam o ¨˙> malim temporary bazama (što se RAM diska tiče), ali drugi deo (random A zašto ne iskoristiš ADDUSER i za svaku radnu stanicu definišeš direktorijum za .TMP baze?
baze.podataka.274 mdrazic,
> Dobro, to je sve OK i jasno mi je. Ali tu se sad postavlja > još jedan problem - dead-lock? > > broj procesa. Mene sada interesuje da li SHARE o svemu > ovome vodi računa pre nego što dozvoli zaključavanje nekog > sloga ili ću sam morati da napišem neku rutinu koja će to > regulisati (napr. neće dozvoliti zaključavanje ukoliko će > to dovesti do pojave dead-locka). Nema teorije da unapred znaš šta će neko drugi zaključati, pa nikakva rutina za otkrivanje takvih stvari tu ne pomaže. Stvar je ipak razrešiva. Kada praviš transakciju (upisivanje na jedno ili više mesta) radiš na sledeći način: 1. (faza širenja) Pokušaš da zaključaš SVE potrebne tabele. Ako uspeš ideš na sledeći korak. Ako ne uspeš, tipični scenario je da opet probaš određeni broj puta. Kada oceniš da nema šanse da SVE zaključaš, onda odustaješ od transakcije i otključavaš sve što si do tada zaključao. 2. Ako si došao dovde, znači da su sve potrebne tabele uspešno zaključane. Niko te sad ne može sprečiti da završiš transa- kciju. Upisuješ sve što imaš. 3. (faza skupljanja) Po završenom upisivaju otključaš sve tabele. Veoma je bitno za komotan rad više korisnika da u ove tri faze NEMAŠ stanje čekanja (ne daj bože neko editovanje) koje koči ostale korisnike. Bitno je da se sve tri faze što brže završe da tabele ne budu dugo zaključane. Pročitaj lepu knjižicu Suada Alagića: Relacione baze podataka. Milan
baze.podataka.275 mjevta,
>> MAX(ime_polja) - Najveća vrednost u navedenom polju. >> Dozvoljeni tipovi podataka su: Numeric, Character i Date. Još uvek koristim FoxPro 2.0 pa me zanima kako u FoxPro - u 2.6 funkcioniše SQL u jednom konkretnom slučaju. Elem: SELECT MAX( datum ), Ime, ... FROM maticna INTO CURSOR cur ; WHERE _neki_uslov ... pokupi najveći datum ali ubaci ostale podatke iz poslednjeg?!? sloga u tabeli. Alternativno rešenje .. SELECT DISTINCT datum, Ime, ... FROM maticna INTO CURSOR cur; WHERE datum IN ( SELECT MAX( datum ) FROM maticna ) AND ; _neki_uslov ... radi ali nisam testirao performanse na vecoj količini podataka. Kako to radi u 2.6 ?
baze.podataka.276 dr.grba,
>> Stvar je ipak razrešiva. Kada praviš transakciju (upisivanje >> na jedno ili više mesta) radiš na sledeći način: Scenario je egzaktan i jasan. Ali kako se u ovu priču uklapa neregularni prekid bilo koje vrste u slučajnom trenutku? Znaš na šta mislim: recimo prekid kabla ili nestanak struje na klijentovom računaru, baš neposredno posle zaključavanja tabela...
baze.podataka.277 pedjak,
> Dobro, to je sve OK i jasno mi je. Ali tu se sad postavlja još jedan > problem - dead-lock? Da malo pojasnim problem: > Proces A je zaključao jedan slog i zahteva drugi slog koji, međutim, > drži proces B, koji istovremeno zahteva baš onaj slog koji drži > proces A. Tako se stvara jedna beskonačna petlja u kojoj dva procesa > čekaju da budu oslobođeni slogovi koji im trebaju trošeći > procesorsko vreme. Naravno da je to problem, zato ih moraš sam izbeći. Najpre, nastojiš da slog držiš zaključanim što je moguće manje vremena, čisto da upišeš izmene. Drugo, prilikom pokušaja zaključavanja sloga, koji je već zaključan, DOS vraća informaciju da je slog već zaključan. Šta tada činiti..? Ne treba neprestano pokušavati sa zaključavanjem tog sloga, em što nema nekog naročitog smisla, em što dolazi do naglog pada performansi mreže. Šta se radi: sačeka se u proseku od 0.5-1.0 sec pa se onda pokuša ponovo. Broj pokušaja svesti na neku razumnu meru, na primer 10-20 puta. Ako i posle toga ne uspeš da zaključaš slog, onda program treba da prijavi grešku. Moraš nastojati da izbegneš situacije koje dovode do ded-loka, pisanjem programa koji takve situacije izbegavaju.
baze.podataka.278 max.headroom,
> A zašto ne iskoristiš ADDUSER i za svaku radnu stanicu > definišeš direktorijum za .TMP baze? U suštini, nisam mislio na Fox-ove sveprisutne TMP baze, već na one koje provejavaju kroz program - deo auditorijuma :) predlaže da se takve stvari organizuju od strane samog programera, u memoriji (dakle, pišeš vlastiti source za rad sa bazama, a koji u 99% slučajeva koristi matrice). Normalno je da postane nezgodno ako TEMPDIR našteluješ na RAM drajv, a ono TMP pređe tu granicu :)
baze.podataka.279 max.headroom,
> Nema teorije da unapred znaš šta će neko drugi zaključati, > pa nikakva rutina za otkrivanje takvih stvari tu ne > pomaže. Varijanta 2: - prepišeš ono što želiš da edituješ u mem.var.1 i u mem.var.2 (ništa se ne zaključava) - edituješ mem.var.1 - pogledaš da li je sadržaj sloga sada različit od mem.var.2 (ako jeste, neko je u međuvremenu pisao u njega, pa onoga koji je upravo završio sa editovanjem o tome obavestiti) - zaključaš record - upišeš mem.var.1 u record - otključaš record
baze.podataka.280 mdrazic,
> Varijanta 2: > > - prepišeš ono što želiš da edituješ u mem.var.1 i u > mem.var.2 (ništa se ne zaključava) > - edituješ mem.var.1 > - pogledaš da li je sadržaj sloga sada različit od > mem.var.2 ... To je ta ista varijanta, samo se nisam osvrtao na problem editovanja, već posle toga kako upisati transakciju a da ne dođe do deadlock-a. Milan
baze.podataka.281 mdrazic,
> Scenario je egzaktan i jasan. Ali kako se u ovu priču > uklapa neregularni prekid bilo koje vrste u slučajnom > trenutku? Znaš na šta mislim: recimo prekid kabla ili > nestanak struje na klijentovom računaru, baš neposredno > posle zaključavanja tabela... Da se razumemo: bilo je reči o tome kako sprečiti deadlock. Ako neko ostavi zaključane tabele posle pada, tu nema pomoći nego otkriti ko ih drži, i 'pospremiti' za njim. Pravi problem je da ne uđeš u deadlock na sred transakcije, pa si nešto upisao, a ostalo ne možeš. Milan
baze.podataka.282 mdrazic,
> Moraš nastojati da izbegneš situacije koje dovode do > ded-loka, pisanjem programa koji takve situacije > izbegavaju. Imam jedan takav program. Ništa ne upisuje na disk i dosad nijedan deadlock (kuc,kuc) ;)
baze.podataka.283 misa.m,
>> ORDER opcija može biti primenjena na proizvoljan broj polja, što znači >> da se rezultujuća baza može sortirati po proizvoljnom broju >> parametara (odn. onoliko polja koliko se nalazi u listi polja posle >> SELECT). Mala dopuna, ORDER BY ne mora biti iz liste izlaznih polja već može biti bilo koje polje tabela (osim memo i general). Ovo važi od verzije 2.5 i dalje.
baze.podataka.284 misa.m,
>> Kako da se postigne poravnanje teksta uz desnu marginu u jednoj od kolona >> u BROWSE prozoru? Isto kao i u DOS verziji: browse fields title:P='@j' font "FoxFont",10 Problem ustvari nastaje za neproporcionalne fontove jer se dužina polja računa na osnovu neke srednje veličine fonta a prava zavisi od konkretnih znakova u samom polju. Jedini način je da upotrebiš neki od proporcionalnih fontova kao npr FoxFont. >> Da li neko zna da li postoji grupa za Fox Pro za WIndows? Zašto grupa? Grupa predstavlja samo ograničenje na 12 korisnika i nema razloga da se o jednom sve popularnijem paketu pravi grupa. Jedino ako max.headroom nastavi ovako snažno, možda dobijemo temu :) i to jedino ako nekome bude previše Foxa u ovoj temi. BTW Grupa FOX je postojala (mislim i da postoji još uvek) ali je pre nekih godinu dana zamrla. Vlasnik je max.headroom.
baze.podataka.285 max.headroom,
> ne dođe do deadlock-a. Izvin'te na digresiji (pakovao sam bazu), ali ne pratih raspravu u celini pa mi se stoga javlja problem razumevanja "dead lock"-a. Šta mu to dođe? (ja sam video na delu "lunch-time lock", a za ovaj prvi značenje nagađam :) )
baze.podataka.286 tetragon,
¸> IF fp_int86( 33, čaRegs ) ¸> nReturn = aRegs(1) % 256 ¸> IF nReturn < 0 ¸> nReturn = nReturn + 256 ¸> ENDIF ¸> ENDIF Da li funkcija fp_int86() postoji u FP2.5/DOS ? Ako nema, da li ima načina da se "ugradi", (biblioteka...) ? Pozdrav, Zlatko
baze.podataka.287 vgenije,
Programiram vec jedno vreme u pascalu.Cinim mi da imam znanja koje bi zadovoljilo moje potrebe.Koji mi jezik preporucujete za baze podataka pod uslovom da bude objektni. p.s.dali paradox moze da radi kao objectni jezik i kako
baze.podataka.288 mdrazic,
> celini pa mi se stoga javlja problem razumevanja "dead > lock"-a. Šta mu to dođe? (ja sam video na delu > "lunch-time lock", a za ovaj prvi Skini temu ponovo pa vidi... :) Ukratko: Dva usera treba da zaključaju bazu A i bazu B. Ne pitaj zašto, ali 1. user prvo zaključa A, a drugi prvo zaključa B. Zatim obojica pokušavaju da zaključaju onu preostalu, ali ne mogu. To se zove 'deadlock'. Izlaz je da neko mora popustiti (prekinuti transakciju) da bi se baze mogle normalno koristiti. Uzgred, nije deadlock karakterističan samo za baze. Za programiranje višeprocesorskih ('paralelnih') računara postoji prigodan jezik OCCAM (čita se okam) i kod njega je glavni problem u komunikaciji između procesa na raznim procesima. Tu se često desi deadlock pošto ako procesor čeka nešto od drugog, ovaj od trećeg i tako zatvore krug, eto belaja. Studenti su u šali jezik zvali: OCCAM - deadlock-am Milan
baze.podataka.289 mdrazic,
> Programiram vec jedno vreme u pascalu.Cinim mi da imam > znanja koje bi zadovoljilo moje potrebe.Koji mi jezik > preporucujete za baze podataka pod uslovom da bude > objektni. Trenutno je lepa kombinacija Clipper 5.2 (imamo ga) sa Class(y) bibliotekom (nemamo je još, oko $150 u USA). Ovo gornje je po rečima Ricka Spencea (guru za Clipper) idealno za treniranje za budući Visual Objects (VO). Dok Clipper radi pod DOS-om (ima biblioteka da može da radi i pod Windowsima), dotle će VO da radi pod Windowsima u startu, biće 99% kompatibilan sa Clipperom, imaće prave objekte, drajvere za DBF, SQL, ODBC, funkcije za Windows kerefeke biće nalik na Visual Basic. VO bi trebalo da se pojavi do kraja godine. Uprkos kompatibilnosti, velika promena nije toliko sam Windows koliko prelaz na event-driven programiranje nasuprot dosadašnjem modalnom. Naravno, ako želiš, možeš raditi i u C++ sa svim lepim (portabilnost,...) i ružnim stranama (nije komforan kao prethodni, manje pratećih biblioteka za baze,...). Milan
baze.podataka.290 max.headroom,
> BTW Grupa FOX je postojala (mislim i da postoji još uvek) > ali je pre nekih Ja, lično, nisam za grupu. Konferencija je sasvim prihvatljivo mesto da se raspravlja o ovakvim temama. Pre neki dan sam na Hellas BBS-u video znatnu količinu fajlova za Fox, pa ću se već potruditi da ovde prenesem najzanimljivije detalje...
baze.podataka.291 max.headroom,
Spisak programa iz dir-a CLIPPER na HELLAS BBS-u: NAZIV VELICINA DATUM OPIS SADRZAJA DATOTEKE ============ ======== ======== ============================================ 52AN00.ARJ 16298 12-05-93 Spisak nepravilnosti u CA-Clipper 5.2 52CAPI.ARJ 112568 02-20-94 Clipper 5.2C Technical ref. book 52CUS.A01 183559 02-20-94 Update sa Clipper 5.2C US verzije 1/2 52CUS.A02 180901 02-20-94 -đđ- 2/2 AE501A.EXE 10328 07-18-93 Bug fix za fju. AEVAL za Clipper 5.01A BLI201NG.ZIP 29148 02-20-94 Update za Blinker 2.01 Norton Guide BLINK201.ZIP 144540 02-20-94 Update za Blinker 2.01 compiler BLINKER3.A01 150559 03-31-94 Instalaciona verzija Blinker-a 3.0 #2/5 BLINKER3.A02 150651 03-31-94 Instalaciona verzija Blinker-a 3.0 #3/5 BLINKER3.A03 150659 03-31-94 Instalaciona verzija Blinker-a 3.0 #4/5 BLINKER3.A04 34373 03-31-94 Instalaciona verzija Blinker-a 3.0 #5/5 BLINKER3.ARJ 150559 03-31-94 Instalaciona verzija Blinker-a 3.0 #1/5 BUMENU14.ZIP 13466 02-20-94 Bulaja Menu System ver. 1.4 C50XP300.A01 105881 02-20-94 Biblioteka raznih fja za Clipper 5.01 1/2 C50XP300.ARJ 106357 02-20-94 -đđ- 2/2 C52TN1.ARJ 4736 02-20-94 Technical notes za Clipper 5.2 (prvi tom) CL-YUSRT.ZIP 3471 01-18-93 Sortiranje indeksa po YU standardima CL5103.ZIP 32490 02-20-94 Spisak bugova u Clipper 5.01 CLDEBUGE.ARJ 8565 02-20-94 Kako koristiti Clipper debugger CLHLP23.ZIP 175854 02-20-94 Help sistem za Clipper 5.01/S87 CLIP52A.ZIP 97590 02-20-94 Update sa verzije 5.2 US CLIPDIAL.ZIP 10720 01-18-93 Biblioteka za rad sa modemom CLIPFPCX.ZIP 38235 02-20-94 Prikaz .PCX za verzije S87/5.XX (EGA i VGA) CLIPGR12.ZIP 66609 11-22-90 Graficke rutine iz clippera CLIPGR21.ZIP 153742 02-20-94 Graficka biblioteka za verzije S87/5.XX CLIPINT.ARJ 4853 06-08-92 Pozivanje interapta iz clippera CLIPINT.ZIP 6012 02-20-94 Pozivanje interapta iz Clipper-a CLIPTOOL.ARJ 11087 02-20-94 Biblioteka fja za Clipper (Goranr sa Sezama) CLIP_52B.ZIP 5811 02-20-94 Noviteti u Clipper 5.2B CLIP_52C.ZIP 4634 02-20-94 Noviteti u Clipper 5.2C CLPATCH.ZIP 46408 02-20-94 Patch.exe potreban za update Clipper 5.XX CLUG0194.ARJ 37748 02-20-94 Listing Clipper korisnickih grupa u svetu CRC32.ZIP 6606 02-20-94 Funkcija za racunanje 32-bit CRC (asm) CT_BLI.ARJ 4406 02-20-94 Automatski overlay uz Blinker DBUPLUS.ARJ 67359 02-20-94 Update za Clipper 5.2 (DBU) DENTAL1.ZIP 344176 11-24-93 Aplikacija za zubnu ordinaciju DGXGENER.ARJ 223978 11-16-93 Generator dge src-a za dBase, Clipper i Fox Uploaded by: Cedomir Suljagic DISCLIPP.ZIP 109920 01-18-93 Clipper dekompajler DM_101.EXE 18689 01-14-94 Demo maker (dodatak za Vern 6 library) FEDO10.ARJ 27164 02-20-94 OOP zamena za MemoEdit() FIXLIB2.ZIP 16680 02-20-94 Koriscenje 5.01 bibl. iz verzije 5.02 FLIP1.ZIP 360088 02-28-94 Graficka biblioteka za Clipper 1/4 FLIP2.ZIP 361803 02-28-94 -đđ- 2/4 FLIP3.ZIP 360795 02-28-94 -đđ- 3/4 FLIP4.ZIP 129856 02-28-94 -đđ- 4/4 FPCLIP.ZIP 16674 08-16-93 ZA Cliper FRANK.ARJ 243255 02-20-94 Frankie lib. User Interface Engine v. 2.01 FRANKG.ARJ 87571 02-20-94 Frankie lib. Norton Guide v. 2.01 FRANKN.ARJ 12007 02-20-94 Frankie lib. Newsletter v. 2.01 FRANKR.ARJ 67101 02-20-94 Frankie lib. Reference v. 2.01 FT_DOC.ARJ 30249 02-20-94 Kreiranje NG iz source koda FXCOLOR.ARJ 56249 02-20-94 Specijalni efekti sa bojama za Clipper 5.2 GENIFER.ZIP 256649 12-05-93 Generator aplikacija IE52NG.ARJ 8982 12-05-93 NG o I/O error handlerima za Clipper 5.2 ISNET.ARJ 3017 02-20-94 patch za Netto.lib LLIBCA.ARJ 122034 02-20-94 MSC 5.1 lib. za vezu Clipper <-> C NEDESC11.ARJ 4787 02-20-94 Spisak fja. Netto.lib 1.1 NETGUIDE.ZIP 28400 08-16-93 Primeri za rad pod Novellom iz clippera NETTOL.ZIP 168283 02-20-94 Novell NETWARE API lib. za Clipper 5.2 NETTOS11.A01 113435 02-20-94 Netware Clipper lib. source code 1/2 NETTOS11.A02 110604 02-20-94 -đđ- NFDESC.ARJ 14348 01-10-92 Nanforum library toolkit NFLIB.ARJ 167326 01-10-92 --đđ-- NFLIB21.ARJ 172416 02-20-94 NanForum Toolkit lib. ver. 2.1 NFLIB_CH.ARJ 4746 02-20-94 Header fajlovi (.CH) za Nflib21 NFPAT.ARJ 24607 01-10-92 --đđ-- NFPAT.ZIP 58077 02-20-94 Patches za NFlib21 (source...) 1...7 NFPAT8.ZIP 13259 02-20-94 Patches za NFlib21 8 deo NFSRC.A01 150265 01-10-92 --đđ-- NFSRC.ARJ 159186 01-10-92 --đđ-- NFSRC21.A01 163620 02-20-94 Nanforum Toolkit v 2.1 source 1/2 NFSRC21.ARJ 164314 02-20-94 -đđ- 2/2 NUM2STR.ZIP 4469 02-20-94 Konverzija brojeva u slovni oblik OBJECTCL.A01 176334 02-20-94 OOP biblioteka za Clipper 5.01 2/4 OBJECTCL.A02 176480 02-20-94 -đđ- 3/4 OBJECTCL.A03 174072 02-20-94 -đđ- 4/4 OBJECTCL.ARJ 176375 02-20-94 -đđ- 1/4 OCLIP.ZIP 17482 03-26-92 Object Oriented Lib. za Clipper ONOTES.ZIP 29002 02-09-93 Koriscenje objektno orijentisanih biblioteka PKV4.ZIP 15847 08-16-93 Rad sa zip 2.0 arhivama iz clippera PPUPD1.ZIP 96842 10-04-91 1/2 Zastita Clipper programa PPUPD2.ZIP 30332 08-18-93 2/2 --đđ-- PROPLUS.ZIP 273913 04-16-91 Biblioteke za zastitu Vasih Clipper programa PUSHBU.ARJ 21788 02-20-94 Pushbutons za GET sistem RADIOBUT.ZIP 5160 08-18-93 Source za radiobuttons u Clipper-u RCMPLB20.ZIP 26120 01-11-94 kompresija za kliper Uploaded by: Cedomir Suljagic RPCXLB10.ZIP 196669 02-20-94 Clipper lib. za prikaz .PCX RSHPCX12.ZIP 7056 08-16-93 Prikaz PCX iz Clipper-a SG202.ZIP 13472 09-21-92 Scrolled GET's (skrolujuci GET, source) SIX15_P1.ZIP 61027 02-20-94 Fix za SIx driver v 1.5 SPRINGB.ZIP 59545 10-26-91 Poziva drugi program dok se ucitava Vasa Clipper aplikacija STRALEY.ZIP 29194 02-20-94 Diskusija tvorca Clippera o "reusable system" SUBNTX2.ZIP 62154 02-20-94 Filtriranje slogova u .NTX datotekama TBMORE.ZIP 8705 12-05-93 Opis TBrowse bug-a VERN_SIX.ZIP 6781 10-18-93 Spisak funkcija u Vern Six's Clipper 5.x biblioteci VS_904.A01 185609 10-18-93 Vern Six's Clipper ToolBox V.9.04 biblioteka #1 VS_904.A02 185628 10-18-93 Vern Six's Clipper ToolBox V.9.04 biblioteka #2 VS_904.A03 182629 10-18-93 Vern Six's Clipper ToolBox V.9.04 biblioteka #3
baze.podataka.292 max.headroom,
FoxPro Editor Enhancements by Fred Wampler Ph (615)247-6674 Dodaje još jedan popup u sistemski meni. Popup sadrži svu silu korisnih (i manje korisnih) alatki za debugovanje korisnikovih programa. fpedfn2.zip
baze.podataka.293 nbatocanin,
> Uzgred, nije deadlock karakterističan samo za baze. Preciznije, javlja se svuda gde ima upravljanja deljenim resursima.
baze.podataka.294 max.headroom,
> Izlaz je da neko mora popustiti (prekinuti transakciju) > da bi se baze mogle normalno koristiti. A i bilo bi logično :) Mislim, pre pokretanja transakcije prvo se provere uspeli lock-ovi, pa ako su svi .T. onda giljaj, a ne da te sistem odjedared iznenadi (a ti baš otišao na pauzu da nešto gricneš).
baze.podataka.295 max.headroom,
> Class(y) bibliotekom (nemamo je još, oko $150 u USA). VGENIJE, u međuvremenu pogledaj FoxPro for Windows (ako ti se baš 'oće da radiš pod Prozorima).
baze.podataka.296 max.headroom,
Izvinjenije :) U poruci 11.292 - FPEDFN2.ZIP E, ali nije ZIP nego ARJ (greškica)
baze.podataka.297 mdrazic,
>> Izlaz je da neko mora popustiti (prekinuti transakciju) >> da bi se baze mogle normalno koristiti. > > A i bilo bi logično :) Mislim, pre pokretanja > transakcije prvo se provere uspeli lock-ovi, pa ako su > svi .T. onda giljaj, a ne da te sistem odjedared > iznenadi (a ti baš otišao na pauzu da nešto gricneš). To što je ovo logično meni i tebi, ne znači da je i drugima:) Puno se poletaraca u ovom poslu opeklo po ovom pitanju. Ali zato postoje knjige (recimo Suad Alagić: Relacione baze podataka) pa se tamo pročita šta je drugima bio problem i kako treba raditi. Ako pretpostavimo da učenje komandi i funkcija programerima nije problem, onda vidim dva ključna prelaza od programiranja na recimo dBaseIII+ do programiranja za Windows u mreži: 1. Prelaz sa 'single user' mašine na mrežu. Na mreži više ne možeš očekivati da te išta čeka na disku što očekuješ, a ako i postoji, ko zna da li je u poslednjoj milisekundi neko to promenio, obrisao,... . Za svaku transakciju moraš prvo da pripremiš teren, pa da je obaviš pazeći da ne zagušuješ druge korisnike. Ovde se menja i filozofija otvaranja baza i indeksa, zaključavanje tabela, editovanje itd. Video sam puno 'mrežnih' verzija paketa koji sve otvaraju ekskluzivno - radi na mreži, ali samo po jedan korisnik istovremeno. 2. Prelaz sa modalnog na 'event driven' programiranje. Tu već ne znaš ni šta ti korisnik (sve) radi, kuda klikće mišom, koje je sve procese pokrenuo (recimo otvorio više prozora za koji je zadužen isti deo programa). Za ovo mu dođe prirodno da se koristi neki objektno orijentisani jezik (CA-Visual Objects biće takav). Milan
baze.podataka.298 mdrazic,
> VGENIJE, u međuvremenu pogledaj FoxPro for Windows (ako ti > se baš 'oće da radiš pod Prozorima). Uz sav respekt prema proizvodu (Fox) i firmi (Microsoft) ipak ću da sačekam CA-Visual Objects koji plasira firma orijentisana na softver za veće sisteme pa sa client/server aplikacijama neće biti problema. Jezik je objektni, ima sve lepe osobine nasleđene iz Clippera (slično kao Fox), radi pod Windowsima, a poznato je da je za Clipper (biće i za VO) najveće tržište raznih biblioteka, RDD (database drajvera) i utilitija. U startu ima DBF, SQL i ODBC drajvere, a kome treba još nešto, lako se doda. Veza sa asemblerom i C jezikom je jako korisna:) Usto Clipper je oduvek pravio kao izlaz standardni EXE fajl. Milan
baze.podataka.299 dejanr,
>> Uz sav respekt prema proizvodu (Fox) i firmi (Microsoft) ipak >> ću da sačekam CA-Visual Objects koji plasira firma orijentisana >> na softver za veće sisteme pa sa client/server aplikacijama >> neće biti problema. Zanimljiva stvar, u poslednjem PC Magazine-u (15. septembar) su testirali relacione baze podataka. Ono što me je začudilo je da ni Clipper (ni bilo šta od CA) nisu uopšte ni uzeli u obzir. Ne znam zašto. Editor's Choice je bio Access 2.0, dok su negde odmah iza njega Paradox za Windows i FoxPro za DOS i Windows. Access po performansama nije baš briljirao (FOX je redovno bio bolji) ali je izabran zbog izuzetne fleksibilnosti, mogućnostima provere podataka, konzistencije relacija itd. Doduše, PC Magazine je uvek bio sklon Microsoft-u ;)
baze.podataka.300 .marko.,
Ima li neko iskustva, pozitivna/negativna sa kursom ORACLE-a koji organizuje "Vinca" institut. Kazu mi (preko telefona) da su autorizovani, pa zna li neko koliko je to tacno, s obzirom na sankcije (nicim izazvane :)).Usput mi rekose da njihove diplome priznaju i napolju (daju diplomu i na Engleskom). Unapred hvala na odgovoru!
baze.podataka.301 mdrazic,
> Zanimljiva stvar, u poslednjem PC Magazine-u (15. > septembar) su testirali relacione baze podataka. Ono što > me je začudilo je da ni Clipper (ni bilo šta od CA) nisu > uopšte ni uzeli u obzir. Ne znam zašto. Evo zašto: Clipper i nije baza podataka! Clipper je samo (odličan) jezik za pisanje aplikacija, a ranije se zvao prevodilac za dBase programe. Pošto nemać integrisanu okolinu kao u dBase, FoxBase Clipper nije zgodan korisnicima koji ujedno nisu i programeri. Da ne pominjemo interpreter naredbi! Pre godinu ili nešto više u Data Based Advisor-u (časopis specijalizovan za baze na PC-ima) je bila anketa među korisnicima o dobrim i lošim stranama raznih softvera za baze. Na početku je bilo i napomenuto da Clipper iskače iz opšte slike pošto je to samo jezik. Na testovima brzine, mogućnosti, generisanja reporta i sl. testirali su za Clipper verovali ili ne, DBU (tj. ono što ide u paketu). Na tim testovima je lošije prošao od nekih konkurenata, ali ubedljivo najviše ocene je (od korisnika) Clipper dobio za bogatstvo jezika i snagu istog.:))) Normalno, i ja se slažem da je Fox mnogo bolji po mogućnostima od DBU.EXE . Ista firma koja izdaje Data Based Advisor počela je da izdaje i Clipper Advisor (dvomesečno) a tek kasnije se pojavilo dBASE Advisor a ako postoje Fox Advisor, Access Advisor to je tek od ovog leta možda. Milan
baze.podataka.302 vlador,
> Evo zašto: Clipper i nije baza podataka! Clipper je samo Ali, u PC Worldu od maja ove godine je takođe bio uporedni test baza podataka ali je tu bio i Clipper!
baze.podataka.303 mdrazic,
> Ali, u PC Worldu od maja ove godine je takođe bio uporedni > test baza podataka ali je tu bio i Clipper! Šta su testirali i kako je prošao?
baze.podataka.304 max.headroom,
Svima onima koji imaju pristup Internet-u, preporučujem: FOXWISHčMICROSOFT.COM
baze.podataka.305 max.headroom,
FOXDCOMP A DECOMPILER FOR FOXBASE PROGRAMS by Doyle and Associates FOXDCOMP is a program reads a precompiled Foxbase program and recreates the original program source. This is an essential utility for the Foxbase environment that can be used for the following purposes: - Recreating lost, unavailable, or destroyed source code. This will allow modifications to an existing system without starting from scratch. - As an aid in understanding a purchased compiled package that was delivered without source code. This can be a very useful tool when adding a customized front-end to a purchased compiled system. - To view the source code of professionally-developed systems in order to learn programming techniques used to create efficient, reliable, and visually- appealing systems. FEATURES - Simple DOS command-line operation. - Correctly decompiles programs compiled with Foxbase version 2.1 or lower. - Written in efficiently structured C language for FAST execution. - Fully indented source code is produced. - Language keywords are printed in capital letters. Variable name are printed in lower-case. - Macros, arrays, user-defined functions, and functions with variable arguments are fully supported. Doyle and Associates 101 Westminster Road Rochester, NY 14607 Telephone: (716) 461-1148
baze.podataka.306 max.headroom,
BROWSE komanda & mrežno okruženje NOREFRESH opcija BROWSE prozor će biti "osvežavan" onoliko puta koliko je navedeno pri setovanju SET REFRESH komande. Ako se želi "statičan" BROWSE prozor, tj. prikaz podataka uzetih u određenom momentu bez daljeg obaziranja na to da li je došlo do promene sadržaja nekog od njih, iza BROWSE komande navodi se NOREFRESH opcija. U slučaju da je potrebno prikazati neki read-only fajl, poželjno je navesti i NOREFRESH opciju, jerbo se performanse time poboljšavaju. Međutim, čak i ako se ova opcija navede (a nije u pitanju read-only fajl), i započne se sa editovanjem podataka, editovani zapis će ipak biti pročitan sa diska (tj. biće "svež"). TIMEOUT opcija Uvek koristite ovu opciju BROWSE komande. žak i ako je postavite na jedan sat, i to će biti bolje nego da BROWSE prozor "čeka" i troši vreme serveru zahtevajući sveže podatke. Zna se kako je narod aljkav, odn. kako voli da odluta od terminala - a te momente softver bi trebao da prepozna. Popravljanje BROWSE performansi - Smanjite broj kolona (polja). Najčešće se BROWSE koristi bez liste polja koje treba prikazati, tj. prikazuju se sva polja iz baze. Dakle, redukujte broj dostupnih polja (BROWSE FIELDS) što više. - Smanjite broj redova (zapisa) prikazanih na ekranu. Što je manje zapisa prikazano, to BROWSE brže "osvežava" prozor. - Ukinite relacije, ili bar redukujte njihov broj. Ako se vrši BROWSE samo jedne baze, tada je mnogo bolja izvedba primeniti ručni SEEK, ako slučaj već nalaže, tj. ako se krene sa editovanjem nekog zapisa. Evo primera: zamislite pet baza - jedna sadrži imena takmičara, druga njihove datume rođenja, treća postignute rezultate, četvrta adrese, a peta plasman na tekućem takmičenju. Kada se radi BROWSE takmičara, tada je za pretpostaviti da će se uvesti relacije kojima ćemo na ekranu u istom redu za svakog takmičara imati prikazane sve ostale relevantne podatke. Medžutim, ;), svakako je brže pre BROWSE-a ukinuti relacije, a po aktiviranjui sa ON KEY LABEL uraditi SEEK u svakoj bazi i tako na ekranu prikazati ostale podatke, a pomoću BROWSE-a samo imena takmičara (primer glup ali ukazuje na suštinu ekonomisanja sličnog tipa :) - Učestalost osvežavanja (SET REFRESH). Što je ona veća, performanse opadaju. Na primer, u bazama u kojima se promene vrše retko (baza dobavljača, na primer), ova cifra treba da bude velika (tj. osvežavanje se vrši u većim vremenskim razmacima - 300 sekundi ili više). Ako se, pak, zaželi edit određenog zapisa, uvek se dobija najsvežija informacija. - Fizički sortirajte bazu. FoxPro nije jedina aplikacija koja inteligentno koristi keševe i bafere; većina mrežnih operativnih sistema koristi disk-keš da poboljša performanse. Kada se zatraži zapis iz DBF fajla, FoxPro konvertuje broj zapisa u ofset u fajlu. Tada traži od mreže podatke sa pomenute ofset lokacije, u dužini od onoliko bajtova kolika je veličina zapisa. Mreža ispunjava zahtev, ali takođe kopira taj sektor u svoj vlastiti interni keš. Ako je dužina sektora (mreža) 4,096 bajtova, na primer, i dužina zapisa 64 bajta, tada sektor prekopiran u keš sadrži tekući zapis, zajedno sa još 47 susednih :) Ali ako su zapisi sortirani fizički, tada je mreži potrebno da pristupi disku tek posle svakih 48 zapisa. Ako se, međutim, zapis čita preko indeksa, brojevi zapisa mogu biti razbacani po fajlu, smanjujući verovatnoću da će traženi podatak biti moguće izvući direktno iz keša.
baze.podataka.307 max.headroom,
Jeste li već čuli da... :) FLOCK() i RLOCK() komande Fox-a "pate" od jednog nedostatka: naime, raznorazne prethodne i buduće Fox razvojne aplikacije prepoznaju da je fajl zaključan; ali, drugi xBASE paketi poput CA-Clipper-a - NE. Sledi objašnjenje: DOS 3.1 je predstavio novu funkciju koja bi trebala da bude korišćena od strane programa glede kontrole shared pristupa podacima. Ta LOCK/UNLOCK funkcija uzima četiri parametra: file handle, ofset, veličinu, i fleg koji indicira da li je u pitanju lock ili unlock. Kada se izvrši lock, svaki pristup tom delu fajla (odn. fajlu) je zabranjen. Ali, trenutak... ako je pristup zabranjen, kako FoxPro čita zaključani zapis? Odgovor na ovo pitanje je da su FoxPro dizajneri iskoristili činjenicu da LOCK ne mora da bude fizički smešten u okviru fajla. Kada FoxPro zaključa zapis, on preračuna ofset u fajl uzimajući veličinu hedera + veličinu zapisa * broj zapisa (minus jedan). Potom dodaje 40,000,000 heksadecimalno (ili 1,073,741,824) bajtova na ofset, i zaključava tako dobijene bajtove u dužini zapisa. Fox ne zaključava ofset unutar samog fajla. To omogućava read pristup fajlu, dok se write pristup koordinira preko FoxPro programa. Ekipa koja je osmišljala CA-Clipper koristila je sličnu strategiju da dozvoli čitanje zaključanih zapisa. Nažalost, oni su uzeli jednu milijardu kao ofset (a ne 40 miliona). I CA-Clipper zaključava samo jedan bajt, a ne onoliko kolika je dužina zapisa. Tako, ako je CA-Clipper-om zaključan deseti zapis, a isto se uradi i sa Fox-om, operativni sistem misli da postoje dva lock-a: jedan na ofsetu 1,000,000,010, a drugi na drugom ofsetu. I eto haosa :)
baze.podataka.308 max.headroom,
The GOFER UDF gofer() Definition The gofer UDF allows the programmer to place database information in picklist format in a FoxPro browse window so a user can easily locate and accept or reject items in the list. gofer() returns a .t. or .f. reflecting the choice made. gofer002.arj
baze.podataka.309 sir.oracle,
Postovane kolege, Iako ovo mozda nije najprikladnije mesto za oglasavanje ovakve vrste pokusacu da vam za trenutak skrenem paznju ovim tekstom. Ukoliko medju vama ima dobrih ORACLE programera, koji su spremni na saradnju po pitanju izrade jednog vrlo kokretnog projekta sa vrlo konkretnim rokom i vrlo konkretnim zadatkom, molio bih da mi se jave ili preko prijatelja ostave svoje podatke u mail-u za korisnika sir.oracle (odnosno mene). Ocekujem da ce u vasim dopisima biti puno pitanja, ali bih molio da u prvom dopisu koji posaljete prilozite sledece podatke: -Ime i prezime (obavezno) -Username na sezam-u za slanje dopisa (obavezno) -Godina rodjenja (opciono) -Broj telefona (opciono) -Gde radite (opciono) -Koliko dugo radite u ORACLE-u (obavezno) -Na kojim ste projektima radili do sad (opciono) (njihov naziv i trajanje) -Ostali licni i profesionalni podaci (opciono) po vasem izboru U odgovoru na vas dopis dobicete sto je moguce vise podataka o poslu i projektu osim informacija koje predstavljaju poslovnu tajnu. U OBZIR DOLAZE SVI OBLICI SARADNJE POCEV OD UGOVORA ZA "SLOBODNJAKE" DO STALNOG ZAPOSLENJA ZA PROGRAMERE KOJI ZELE DA PROMENE RADNO MESTO. Javite se na mail: sir.oracle, ocekujem vase dopise ps. Rok za odgovor je 7 dana.
baze.podataka.310 .ken.,
> FLOCK() i RLOCK() komande Fox-a "pate" od jednog nedostatka: > naime, raznorazne prethodne i buduce Fox razvojne aplikacije > prepoznaju da je fajl zakljucan; ali, drugi xBASE paketi poput > CA-Clipper-a - NE. Clipper-a 5.2 cak i sam poseduje dve vrste zakljucavanja (za RDD NTX) Default koje je kompatabilno sa starim nacinom zakljucavanja (Clipper 5.01) i nova vrsta kod koje je ofset prebacen na FFFFFFFF (sto je najveci ofset dozvoljen sistemom DOS-a - izvor Joseph D.Booth i Greg Lief) Ako zelimo da imamo novi nacin zakljucavanja treba ulinkovati datoteku NTXLOCK2.OBJ Mislim, mada nisam imao prilike da probam da SIXCDX RDD za Clipper ima mogucnost da radi kompatabilno sa FOX-om i da ne prave probleme jedan drugom.
baze.podataka.311 vlador,
>> Ali, u PC Worldu od maja ove godine je takođe bio uporedni > Šta su testirali i kako je prošao? Na žalost, nisam čitao, samo mi je tekst proleteo kroz ruke. O:)
baze.podataka.312 .marko.,
Ima li ko kakva pozitivna/negativna iskustva sa kursom za ORACLE koji organizuje "Vinca"?
baze.podataka.313 nkbog,
Dva problema sa FoxPro 2.6: 1. SELECT nesto AS a, SUM(nestodrugo) AS b FROM blabla WHERE blabla GROUP BY nesto INTO CURSOR temp dodeljuje polju b MMMMMsirinu od nula decimala ako je prvo "nestodrugo" vezano za nesto nula (cela suma). Ovo smo resili tako sto pisemo 0.0001 + SUM(...), al' me interesuje dal' ima neko bolje resenje. 2. Na nekoliko sporijih masina (dve): AT i 386-ica, kod BROWSE-a kada se brzo pritiska leva strelica ispali poruku "Invalid file descriptor". S obzirom da nas to upucuje na MS Support (tamo negde u Nemackoj), da li neko zna kako to izbeci (ON ERROR, ON KEY ili nesto slicno). NB.
baze.podataka.314 misa.m,
>> 1. SELECT nesto AS a, SUM(nestodrugo) AS b FROM blabla WHERE blabla >> GROUP BY nesto INTO CURSOR temp >> dodeljuje polju b MMMMMsirinu od nula decimala ako je prvo "nestodrugo" Rezultujuće polje bi trebalo uvek da ima isti broj decimala kao ulazno, bez obzira na sadržaj. Ja za forsiranje dužine decimalnog dela koristim ROUND funkciju, npr: SELECT nesto AS a, SUM(ROUND(nestodrugo, 4)) AS b ...
baze.podataka.315 ndragan,
/ Eto, a mene si zimus zezao zbog "tek sad uvedenog" SCOPE indeksa u / Clipper. Ej, pajto, spusti malo. Pomenuti Browse je _već_ u 2.0 imao opcije Key k1 (, k2) For Valid When (poslednje dve na nivou celog sloga i pojedinog polja). Rest opcija je samo mali dodatak koji sprečava prečitavanje baze i/ili indekasa od početka, nego tek od tekućeg sloga naniže, kol'ko da se ubrza stvar.
baze.podataka.316 ndragan,
/ SELECT MAX( datum ), Ime, ... FROM maticna INTO CURSOR cur ; Ovde implicitno praviš grupu (group by) čim koristiš neku od agregatnih funkcija nad kolonama, u ovom slučaju MAX(); pošto nisi naveo kriterijum grupisanja, podrazumeva se da vadi jedan slog iz cele baze; samo za prvo polje si naveo šta tačno hoćeš i to si dobio, za ostala polja se smatra da ti je svejedno iz kog su sloga. / SELECT DISTINCT datum, Ime, ... FROM maticna INTO CURSOR cur; / WHERE datum IN ( SELECT MAX( datum ) FROM maticna ) AND ; E ovde si već bio precizniji, tražio si da ti izdvoji sve slogove kod kojih je datum jednak najvećem datumu. / Kako to radi u 2.6 ? Isto tako.
baze.podataka.317 ndragan,
/ Veoma je bitno za komotan rad više korisnika da u ove tri faze / NEMAŠ stanje čekanja (ne daj bože neko editovanje) koje koči Što reče help za TTS u FP2.6: "When other users on the network try to access records you have modified, they must wait until you end your transaction. They receive the message "Record not available ... please wait" until the records become available. Because of this, it is important to keep the length of the transaction to a minimum. It is best to end a transaction before you go to lunch."
baze.podataka.318 max.headroom,
> 2. Na nekoliko sporijih masina (dve): AT i 386-ica, kod > BROWSE-a kada se brzo pritiska leva strelica ispali poruku > "Invalid file descriptor". S obzirom da De, ako te ne mrzi, opiši problem malo podrobnije.
baze.podataka.320 nbulatovic,
> FOXDCOMP > A DECOMPILER FOR FOXBASE PROGRAMS Gde to može da se nabavi? ja sam inače radio sa sličnim programima i nisam baš oduševljen njihovom efikasnošću. Nikola
baze.podataka.321 gaston,
Zdravo narode ! Nije me dugo bilo, pa sam bio prijatno iznenadjen kvalitetom diskusije u zadnja 2-3 meseca. Posebno se to odnosi na priloge max.headroom-a. Ne znam cime ga hrane, ali samo neka tako nastave ! Verovatno ce "dosaditi" moderatorima konferencija pretrpavanjem istih korisnim (i dugackim) prilozima vezanim za FOX, pa cemo valjda dobiti posebnu konferenciju. Od mene licno ima gajbu piva, samo neka javne broj ziro-racuna, pa neka sve knjizi u fond za reprezentaciju. Imam nekoliko pitanja i zapazanja: 1) Sve sto je u vezi strukture DBF i ostalih fajlova poslao milanv je tacno, nema se sta zameriti, ali jedan podatak koji me jako interesuje nije spomenut. To je u vezi sa zapazanjima max.headroom-a i ndragan-a u vezi nacina kako FOX resava situaciju nedostajeceg CDX fajla i kako je programer mora resiti. I ja imam slicna zapazanja o toj pojavi. Mislim da FOX negde u DBF fajlu upisuje da li uz fajl ide i CDX ili ne. Prema tome, ako je nekome poznato gde i kako, neka to javne. Onda bi se dala napraviti procedura za proveru postojanja CDX fajla iz hedera DBF fajla. U vrlo lepoj knjizici "CA-Clipper 5.2 i mrezno programiranje" od J.D.Booth i G.Lief daju se strukture DBF , NDX, CDX i dr., kao i kompletna procedura za proveru izpravnosti hedera DBF i CDX fajlova. Medjutim ni u toj knjizi se nista ne kaze o mestu u hederu DBF fajla gde je zapisana informacija o tome da li postoji CDX fajl. 2) U jednom od priloga max.headroom-a vezanih za mreze, daje se lep primer programceta za dobijanje nekih parametara mreze putem funkcije FP_INT86(). Slicnih stvari ima i u gorepomenutoj knjizi. Iako je knjiga pisana za Clipper moze sasvim lepo da posluzi i za FOX. Jedino sto sam ja vrrrrlooo slab sa asemblerom (sama funkcija FP_INT86() je deo NanForum Clipper biblioteke i data je u asembleru). Elem, treba taj asemblerski program preraditi na odredjeni nacin (sto meni nije uspelo, i pored svojevremenih sugestija ndragan-a), prevesti i koristiti u FOX-u. Ako je noko voljan da opise kako je to resio, verujem da ne bih bio jedini koji bi mu bio vrlo zahvalan. 3) Da li neko ima iskustva sa Library Construction Kit-om za FOX ?????? Ajd pa tako Nesa - Gaston P.S. Bolje naka max.headroom javno objavi broj ziro-racuna, verovatno nisam jedini koji zeli da konkretno zahvali ...
baze.podataka.322 goxx,
■ Mislim da FOX negde u DBF fajlu upisuje da li uz fajl ide i CDX ili ne. ■ Prema tome, ako je nekome poznato gde i kako, neka to javne. Onda bi se dala ■ napraviti procedura za proveru postojanja CDX fajla iz hedera DBF fajla. U Gotovo da sam sto posto siguran da tako nešto ne postoji. U vezi procedure: Da li bi ti to bila pouzdana informacija o postojanju CDX-a? Šta kad ručno izbrišeš CDX, a u DBF-u ostane indikator? Postoje file sistemi koji drže opis indeksa u osnovnom fajlu (naročito na većim sistemima). Goran
baze.podataka.323 dobrada,
Zanima me da li za biblioteke za rada sa bazama podataka pre svega za C/C++ (Paradox Engine ili Code Base) postoje alati koji omogucavaju pri debugovanju da se vidi sta se desava sa bazom podataka (trenutni slog, aktivni index i sl.). U clipper-u je to integrisano u njegov debuger.
baze.podataka.324 ndragan,
/ Uz sav respekt prema proizvodu (Fox) i firmi (Microsoft) ipak BTW, nisam nešto najjače zadovoljan ponašanjem lisice pod prozorom. Prvo, brzina grafike je drastično manja nego u aplikacijama pisanim u jezicima nižih nivoa; drugo, sve mi se čini da je, otkako je Mali Mekani kupio Lisicu, počelo zbrzeljavanje (paz' verzije: 1.00, 1.01, 1.02, 2.00 pa odma 2.5, 2.6 - tipično za maleckog mekanog). Takođe mi ide na I.I. što između #if i #endif ne može da se uglavi nikakav #define, te izmišljam promenljive gde bi lepo došle konjstante. Inače je ok, i ima većinu stvari (tri od četiri :) koje su dosad nedostajale. --> jel nekom pao šaka LCK za fp3.0?
baze.podataka.325 ndragan,
/ za nesto nula (cela suma). Ovo smo resili tako sto pisemo 0.0001 + / SUM(...), On pokušava da na osnovu prvog sloga proračuna širinu polja, pa šta dobije (probaj ? 0+0 i ? 0+0.00) . Najbolje je da se zada kompletna širina navođenjem potrebnog broja nula sa obe strane decimalne tačke: 000000000000.00+sum(trt_mrt) as rkekoke / to izbeci (ON ERROR, ON KEY ili nesto slicno). Ovo vuče na neki bag iz 2.5, koji se javljao na strelici ulevo na brauzu na numeričkom polju. Nisam imao slučaj, mada sam čuo, a prema dokumentaciji treba da je ispravljeno u 2.6. Probaj "on key label leftarrow keyb 'šbacktabć' plain', istina skakaće po celo polje ulevo, a korisnici mogu još da pomisle da tako i treba :)
baze.podataka.326 dr.grba,
>> jezicima nižih nivoa; drugo, sve mi se čini da je, otkako je Mali Mekani >> kupio Lisicu, počelo zbrzeljavanje (paz' verzije: 1.00, 1.01, 1.02, 2.00 >> pa odma 2.5, 2.6 - tipično za maleckog mekanog). Gotovo sam siguran da Microsoft ovo radi namerno, a u nameri da izbaci Access u prvi plan.
baze.podataka.327 bulaja,
│ Mislim da FOX negde u DBF fajlu upisuje da li uz fajl ide i CDX ili ne. │ Prema tome, ako je nekome poznato gde i kako, neka to javne. └─── Ne upisuje! :) Pretpostavljam da to misliš zbog postojanja .CDX-ova koji se automatski otvaraju kad se otvori .DBF, ali tu se jednostavno radi o tome da database engine (Fox-ov ili npr. kod Clippera neki RDD, npr. SIx CDX) kod otvaranja baze (npr. "test.dbf") proveri da li postoji .CDX sa istim imenom ("test.cdx") i ukoliko je uključeno samootvaranje CDX-ova (auto-open) otvori i njega.
baze.podataka.328 ndragan,
/ Prema tome, ako je nekome poznato gde i kako, neka to javne. Onda bi / se dala napraviti procedura za proveru postojanja CDX fajla iz hedera / DBF fajla. U Knjiga ('razvijačke gajde') mi je u Mađarskoj, pa ako se setim negde od nedelje. Mislim da piše gde je. Što se mene tiče, za indeksiranje svakako _preventivno_ obrišem .cdx fajl. Zatim ga otvaram Excl (mora, inače odbija da pravi tegove). Rutina za obradu greške javi da je fajlu nestao .cdx, foks obriše informaciju o postojanju .cdx i onda forsirano ponovo otvorim .dbf (ovog puta je on bez ikakvog indeksa) i onda sve prolazi. Ono brisanje ne ide tek tako zbog mreže, zato prvo probam da otvorim za čitanje/pisanje: xx=fopen(cdxf, 2) if xx<0 ... (neko drži otvoreno) Zašto brišem .cdx? Zato što foks odbija da otvori bazu ako je on oštećen, a upravo hoću da napravim nov pa dobar - ergo, uopšte me ne zanima kakav je stari.
baze.podataka.329 max.headroom,
FOXDCOMP A DECOMPILER FOR FOXBASE PROGRAMS Evo ga, stiže. Nisam proveravao njegovu pouzdanost, pa ti ne mogu garantovati kvalitet :) P.S. Nikola, zanimaš li se i dalje neuronskim mrežama? Ako da, jesi li u kakvoj zanimljivoj grupi? foxdcomp.arj
baze.podataka.331 misa.m,
>>>> jezicima nižih nivoa; drugo, sve mi se čini da je, otkako je Mali Mekani >>>> kupio Lisicu, počelo zbrzeljavanje (paz' verzije: 1.00, 1.01, 1.02, 2.00 >>>> pa odma 2.5, 2.6 - tipično za maleckog mekanog). >> Gotovo sam siguran da Microsoft ovo radi namerno, a u nameri da izbaci >> Access u prvi plan. U septembarskom PC Magazine je objavljen test Developer Databases (Clarion 3.0, DataEase 4.53, DataFlex 3.05, dBase IV 2.0, Access 2.0, FoxPro 2.6 prof DOS i WIN, Paradox 4.5 DOS i WFG, R:Base 4.5+ ) i normalno ;) Editors' choice je Access. Paradox for DOS i obe verzije Foxa imaju najbolje perfomanse u single user varijanti dok je FOX daleko iznad svih u mreži (32 stanice). Access je (sa pozajmljenom Rushmore tehnologijom) u mreži izbio na treće mesto. U prilog vaših teza evo i zadnje rečenice iz Fact FILe-a: ACCESS: If you're looking for a superb Windows development tool, look no further. FOX4WIN: Yuo might be better off waiting for the next release.
baze.podataka.333 gaston,
Mislim da FOX negde u DBF fajlu upisuje da li uz fajl ide i CDX ili ne. Prema tome, ako je nekome poznato gde i kako, neka to javne. Onda bi se dala napraviti procedura za proveru postojanja CDX fajla iz hedera DBF fajla. U >> Gotovo da sam sto posto siguran da tako nesto ne postoji. U vezi procedure: >> Da li bi ti to bila pouzdana informacija o postojanju CDX-a? Sta kad rucno >> izbrises CDX, a u DBF-u ostane indikator? A ja sam sto posto siguran da TAKO NESTO POSTOJI ! Mozda se nismo dovoljno razumeli... Sa instaliranim error handler-om (npr. iz FOX2EROR.PRG ili slicno) ako obrisete CDX neke baze, javice gresku: "Structural .CDX file not found - Error #1707" Evo kako se ponasa FOX ako se uradi recimo sledece: ON ERROR() DO GRESKA.PRG WITH .... SELECT 0 USE ABC INDEX ON _POLJE TAG _PO_POLJU CLOSE DATABASES !DEL ABC.CDX <<< USE ABC >>> tu ce javiti poruku o gresci. Medjutim, kada sledeci put otvorite ABC, a CDX ne postoji, greska nece biti prijavljena. Ja iz takvog ponasanja zakljucujem sledece: Informacija da neki DBF fajl ima CDX se zapisuje negde u zaglavlju baze podataka. Ako obrisemo CDX, FOX ce po tom znaku zakljuciti da CDX treba da postoji,ali ce proverom na disku utvrditi da ga nema i javice poruku o gresci #1707. Pored toga, upisace u zaglavlje DBF fajla znak da DBF fajl nema CDX fajl, tako da kada se sledeci put pokusa otvaranje baze, nece biti greske. Program za proveru ispravnosti DBF i CDX fajlova bi radio sledece: - proverio bi ispravnost strukture DBF fajla, memo i CDX fajla - proveravao bi postojanje memo i CDX fajlova i dr. i u zavisnosti od toga preduzimao odredjene akcije: popravke ili prekide rada. Da li sam sada malo jasniji ? U svakom slucaju hvala na primedbi. Nesa Gaston
baze.podataka.334 max.headroom,
Izvinjavam se na odsutnosti - sve je posledica nedostatka vremena. Da se iskupim, šaljem programske pristupe otvaranju baza po Booth-u i Lief-u... * Function: INITDB() * Purpose: Initialize database structure arrays * Syntax: InitDB() * Arguments: <NONE> * Returns: .T. * * Notes: This function is used to create two public * arrays which the opening programs use to make * sure that all necessary files are opened when * you need to access a table. * ********************************************************* PUBLIC AFiles_Š5Ć PUBLIC ARelat_Š1Ć PUBLIC AIndex_Š6Ć * Alias DBF Name Index file names * ------ ---------- ----------------- AFiles_Š1Ć = "EMPLOYEE; F:ĐAPPĐEMPLOYEE ; EMP_INIT,EMP_NAME" AFiles_Š2Ć = "EMP_DEPT; F:ĐAPPĐEMP_DEPT ; EMP_LINK" AFiles_Š3Ć = "DEPTS ; F:ĐPAYĐDEPTS ; DEPTS" AFiles_Š4Ć = "POSITION; F:ĐPAYĐPOSITION ; POSITION" AFiles_Š5Ć = "MANAGERS; F:ĐPERSĐMANAGERS; MGRS" * * Index Expression * ------ ---------- AIndex_Š1Ć = "EMP_INIT; INITIALS" AIndex_Š2Ć = "EMP_NAME; EMPLOYEE" AIndex_Š3Ć = "EMP_LINK; INITIALS+DTOS(START)" AIndex_Š4Ć = "DEPTS ; DEPT_NO" AIndex_Š5Ć = "POSITION; POS_NO" AIndex_Š6Ć = "MGRS ; MGR_INIT" * * Logical * Table Required files * -------- -------------- ARelat_Š1Ć = "EMPLOYEE; EMPLOYEE,EMP_DEPT,DEPTS,POSITION,MANAGERS" * return .T.
baze.podataka.335 max.headroom,
Po Booth-u i Lief-u... * Function: SHARED() * Purpose: Open a list of tables in shared mode * Syntax: <logical> = Shared( cTable(s) ) * Arguments: cTable - Name of logical table(s) to open * Returns: .T. - If files were opened ok, * .F. - if the files could not be opened * ********************************************************* FUNCTION Shared PARAMETERS cTab1,cTab2,cTab3,cTab4,cTab5,cTab6,cTab7,cTab8,cTab9,cTab10 PRIVATE all_ok,x PRIVATE aFlist_Š PARAMETERS() Ć FOR X = 1 TO PARAMETERS() TMP = "CTAB"+ALLTRIM(STR(X,2)) aFLIST_ŠXĆ = &TMP NEXT all_ok = OPENLIST(.F.,čAFLIST_) return all_ok ***************************** FUNCTION OPENLIST PARAMETERS isExcl,FilesToDo PRIVATE x,y,z PRIVATE tmp,cFile PRIVATE all_ok IF isExcl SET EXCLUSIVE ON ELSE SET EXCLUSIVE OFF ENDIF SET EXACT OFF FOR X = 1 TO ALEN(FILESTODO) Y = ASCAN(ARELAT_,FILESTODOŠXĆ) && Look for this table IF Y = 0 && File name does not exist CLOSE DATABASES && in our database, so we return RETURN .F. && FALSE ENDIF tmp = ARELAT_ŠYĆ && Extract the file information Y = AT(";",tmp) tmp = SUBSTR(tmp,Y+1)+"," && Get required files Z = AT(",",tmp) DO WHILE Z > 0 cFile = ALLTRIM(SUBSTR(tmp,1,Z-1)) && Extract each file name all_ok = OPENFILE(cFile) && and attempt to open it IF NOT all_ok && File could not be opened CLOSE DATABASES && so we close any open files RETURN .F. && and return FALSE ENDIF IF z < LEN(tmp) tmp = SUBSTR(tmp,Z+1) z = AT(",",tmp) ELSE z = 0 ENDIF ENDDO IF NOT all_ok CLOSE DATABASES RETURN .F. ENDIF NEXT RETURN .T. ********************************************************* FUNCTION OpenFile PARAMETER cFileName PRIVATE y,z,tmp PRIVATE cDBFname,cIndx PRIVATE all_ok PRIVATE cPath cPath = "" all_ok = .T. y = ASCAN( aFiles_,cFileName ) ON ERROR DO OPENERR WITH cFilename,cDBFName IF y > 0 tmp = aFiles_ŠyĆ y = AT(";",tmp) tmp = SUBSTR(tmp,y+1) y = AT(";",tmp) cDBFname = SUBSTR(tmp,1,y-1) z = RAT("Đ",cDBFname) if z > 0 cPath = substr(cDBFName,1,z) endif tmp = alltrim(SUBSTR(tmp,y+1))+"," IF NOT USED( cFileName ) USE &cDBFName IN 0 ALIAS &cFileName IF USED( cFileName ) && File was opened ok * * DEAL WITH THE INDEX FILES * SELECT &cFileName Z = AT(",",tmp) DO WHILE Z > 0 cIndx = cPath+ALLTRIM(SUBSTR(tmp,1,Z-1)) SET INDEX TO &cIndx ADDITIVE IF NOT all_ok ** RECREATE THE INDEX FILE zz = ASCAN(AIndex_,ALLTRIM(SUBSTR(tmp,1,Z-1)) ) IF zz > 0 temp2 = aIndex_ŠzzĆ zz = AT(";",temp2) temp2 = ALLTRIM(SUBSTR(temp2,zz+1)) INDEX ON &temp2 TO &cIndx all_ok = .T. SET INDEX TO &cIndx ADDITIVE ELSE CLOSE DATABASES RETURN .F. ENDIF ENDIF IF z < LEN(tmp) tmp = ALLTRIM(SUBSTR(tmp,Z+1)) Z = AT(",",tmp) ELSE Z = 0 ENDIF ENDDO SET ORDER TO 1 ENDIF ENDIF ELSE RETURN .F. ENDIF ON ERROR RETURN USED( cFileName ) ****************************************************************************** FUNCTION OPENERR PARAMETER cAlias,cDBF PRIVATE nError PRIVATE cMessage nError = ERROR() cMsg = MESSAGE() DO CASE ** ** These errors handle missing or corrupt index files ** CASE nError = 1 .or. nError = 114 .or. nError = 19 all_ok = .F. ENDCASE RETURN ******************************************************************************
baze.podataka.336 max.headroom,
FP_INT86() f-ja (plus raznorazne, u temi ranije obrađene f-je korisne Fox-u pod Novell-om), i to u tri oblika: C, FLL i PLB. Molim dobre duše koje se identifikuju sa C-magovima :) da pogledaju ovaj source. blnet.arj
baze.podataka.337 max.headroom,
Ko se latio korišćenja svih resursa Novell-a iz Fox-a, eto mu prilike da se raduje... FoxPro Functions to access Netware's Bindery (1) * * Function: N_ScanBindery() * Purpose: Scans the bindery for a given object type * Syntax: nCount = N_scanBindery( nType,čaObjects ) * Arguments: nType - Type of objects to be returned * aObjects - Array of objects of the * indicated type * * Returns: nCount - How many objects were found * * Notes: This function is used to get a list of all * objects in a bindery type. For example, * type 4 is the servers, so N_ScanBindery(4) * would return all servers within the bindery. * ********************************************************* function N_ScanBindery PARAMETERS nType,aObjects PRIVATE cBuffer,cRequest,nCount,cList PRIVATE x,y,z nCount = 0 cBuffer = SPACE(57) cRequest = CHR( 55)+CHR(255)+CHR(255)+; CHR(255)+CHR(255)+; CHR(0)+CHR(nType)+; Lstring("*",48) cList = "" DO WHILE NetWare( 227,cRequest,čcBuffer ) == 0 AND ; LEN(TRIM(cBuffer)) > 0 ************************************************ ** Extract the object name and save in array ** ************************************************ nCount = nCount +1 cList = cList +CleanStr(SUBSTR(cBuffer,7,48))+";" ** ** Update the send buffer to get next member ** cRequest = SUBSTR(cRequest,1,1)+SUBSTR(cBuffer,1,4)+; SUBSTR(cRequest,6) ENDDO IF nCount > 0 DIMENSION aObjectsŠnCountĆ z = 1 FOR x = 1 TO nCount y = AT(";",cList,x) aObjectsŠxĆ = SUBSTR(cList,z,y-z) z = y+1 NEXT ENDIF RETURN nCount **********************************************************
baze.podataka.338 max.headroom,
FoxPro Functions to access Netware's Bindery (2) * Function: N_BindLevel() * Purpose: Get workstations access level to the bindery * Syntax: xReturn = N_BindLevel( cOption ) * Arguments: cOption = R -Read security * W -Write security * U -User id number * ********************************************************* function N_BindLevel PARAMETERS cWhich PRIVATE cBuffer,cRequest PRIVATE xAnswer,y IF PARAMETERS() = 0 cWhich = "U" ENDIF cBuffer = SPACE(5) cRequest = CHR(70) xAnswer = -1 IF Netware(227,cRequest,čcBuffer) == 0 DO CASE CASE cWhich = "R" y = ASC(cBuffer)%16 xAnswer = SUBSTR("ALOSN",y+1,1) CASE cWhich = "W" y = INT(ASC(cBuffer)/16) xAnswer = SUBSTR("ALOSN",y+1,1) OTHERWISE xAnswer = Long2Fox(SUBSTR(cBuffer,2,4)) ENDCASE ENDIF RETURN xAnswer
baze.podataka.339 max.headroom,
FoxPro Functions to access Netware's Bindery (3) ********************************************************** * * Function: N_ObjectName() * Purpose: Returns object's name from a bindery object * Syntax: cName = N_ObjectName( nId ) * Arguments: nId - Bindery object id * Returns: cName - The object's name in the bindery * * Notes: * ********************************************************* function N_ObjectName parameter nId PRIVATE cBuffer,cRequest PRIVATE cName cBuffer = SPACE(54) cRequest = CHR(54)+Fox2Long(nId) cName = "" IF Netware(227,cRequest,čcBuffer) == 0 cName = CleanStr( SUBSTR(cBuffer,7) ) ENDIF RETURN cName **********************************************************
baze.podataka.340 max.headroom,
FoxPro Functions to access Netware's Bindery (4) * Function: N_ObjectId() * Purpose: Returns the object id for a given object * Syntax: nIdCode = N_ObjectId( <cObject>,<nObjType> ) * Arguments: cObject - Object name * nObjType - Type of object * * Returns: nIdCode - Bindery id number * * Notes: Every object in the bindery has a unique * number to identify it. This function can be * used to determine the number for any object. * ********************************************************** function N_ObjectId PARAMETERS cObject,nObjType PRIVATE cBuffer,nId,cRequest cBuffer = SPACE(54) && Set up Receive Buffer nId = 0 cRequest = CHR(53)+CHR(0)+CHR(nObjType)+; Lstring(cObject,48) if Netware(227, cRequest, čcBuffer) == 0 nId = Long2Fox(SUBSTR(cBuffer,1,4)) && Extract id endif RETURN nId *********************************************************
baze.podataka.341 max.headroom,
FoxPro Functions to access Netware's Bindery (5) * Function: N_WhoAmI() * Purpose: Get workstation's user id * Syntax: cUser = N_WhoAmI() * Arguments: <NONE> * Returns: cUser - Object name for current connection * * Notes: This function is used to determine the * bindery name for the current connection. * You could use this function to determine * a user's id code for logging purposes. * ********************************************************* function N_WhoAmI PRIVATE nId,cUser nId = N_BindLevel("U") cUser = "" if !empty(nId) cUser = N_ObjectName(nId) endif RETURN cUser **********************************************************
baze.podataka.342 max.headroom,
FoxPro Functions to access Netware's Bindery (6) * Function: N_Properties() * Purpose: Scans the bindery object for properties * Syntax: nCount = N_Properties(cObject,nType,; * aProperties ) * Arguments: cObject - Object to determine properties * nType - Type of object being checked * aProperties - List of object's properties * * Returns: nCount - Number of properties associated * with this object. * * Notes: This function is used to determine what * properties are associated with this object. * You can also use the N_PropVal() function to * determine the value of the properties. * ********************************************************** function N_Properties PARAMETERS cObject, nType,aProperties PRIVATE cBuffer,cRequest,nCount,cList PRIVATE x,y,z cBuffer = SPACE(24) cRequest = CHR(60)+; CHR(0)+CHR(nType)+; Lstring(cObject,48)+; CHR(255)+CHR(255)+CHR(255)+CHR(255)+; Lstring("*",15) nCount = 0 cList = "" DO WHILE Netware( 227, cRequest, čcBuffer) = 0 nCount = nCount +1 cList = cList +CleanStr(LEFT(cBuffer,16))+";" **************************************************** ** replace sequence number with last one received ** **************************************************** cRequest = STUFF(cRequest, 53, 4, SUBSTR(cBuffer,19,4)) ENDDO IF nCount > 0 DIMENSION aPropertiesŠnCountĆ z = 1 FOR x = 1 TO nCount y = AT(";",cList,x) aPropertiessŠxĆ = SUBSTR(cList,z,y-z) z = y+1 NEXT ENDIF RETURN nCount **********************************************************
baze.podataka.343 max.headroom,
FoxPro Functions to access Netware's Bindery (7) * Function: N_PropVal() * Purpose: Return value of a specified property * Syntax: xValue := N_PropVal( cObject,; * ntype,; * cProperty,; * lClean ) * * Arguments: cObject - Object to be queried * nType - Type of object being queried * cProperty - Property value to extract * lClean - Should the return value be * NULL stripped? * * Returns: xValue - varies depending upon the * object and property * * Notes: This function is used to determine the value * for a property from an another object. For * example, you can use this function to * determine the full name of a bindery object. * ********************************************************** function N_PropVal PARAMETERS cObject,nType,cProperty,lClean,aList PRIVATE cBuffer,xReturn,nSegment,nPos,cName,nObjtype PRIVATE cId,cRequest,cList,isList PRIVATE x,y,z cBuffer = SPACE(130) xReturn = "" nSegment = 1 isList = .F. cRequest = CHR(61)+; CHR(0)+CHR(nType)+; Lstring(cObject,48)+; CHR(nSegment)+; Lstring(UPPER(cProperty),16) IF type("lClean") <> "L" lClean = .T. ENDIF DO WHILE Netware(227, cRequest, čcBuffer) == 0 IF ASC(SUBSTR(cBuffer,130,1)) >0 IF nSegment == 1 cList = "" isList = .T. xReturn = 0 ENDIF nPos = 1 DO WHILE nPos < 128 cId = Long2Fox(SUBSTR(cBuffer,nPos,4)) && Read bindery ID IF cId == 0 && Check for end of segment exit ENDIF cName = N_ObjectName(cId) && Lookup Name & Type cList = cList + cName+";" && and put in Return Array xReturn = xReturn +1 nPos = nPos + 4 && then point to next ID ENDDO ELSE IF nSegment == 1 xReturn = "" ENDIF xReturn = xReturn + left(cBuffer, 128) ENDIF nSegment = nSegment +1 cRequest = STUFF(cRequest,53,1,CHR(nSegment)) ENDDO DO CASE CASE isList IF xReturn > 0 DIMENSION aListŠxReturnĆ z = 1 FOR x = 1 TO xReturn y = AT(";",cList,x) aListŠxĆ = SUBSTR(cList,z,y-z) z = y+1 NEXT ENDIF CASE lClean and type("xReturn")="C" xReturn = CleanStr(xReturn) ENDCASE RETURN (xReturn) **********************************************************
baze.podataka.344 max.headroom,
FoxPro Functions to access Netware's Bindery (8) * Function: N_FullName() * Purpose: Get the users full name * Syntax: <cFullName> := N_FullName( cUser ) * * Arguments: cUser - User bindery name * * Returns: cFullName - Full name of this user * * Notes: This function returns the user's * identification string, usually their name. * * ********************************************************** function N_FullName PARAMETER cUser IF PARAMETERS()=0 cUser = N_WhoAmI() ENDIF RETURN N_PropVal(cUser,1,"IDENTIFICATION",.T.) *************************************
baze.podataka.345 max.headroom,
FoxPro Functions to access Netware's Bindery (9) * Function: N_AcctExpire() * Purpose: Get a the date this account expires * Syntax: <dExpire> := N_AcctExpire( cUser ) * * Arguments: cUser - User bindery name * * Returns: dExpire - Expiration date of user's account * * Notes: This function returns the user's expiration * date, which can be used for scheduling purposes * to prevent future activities from being * scheduled past the user's access date. * * Example: LOCAL dExpire := N_AcctExpire( N_WhoAmI() ) * *********************************************************************** function N_AcctExpire PARAMETER cUser PRIVATE cString,yy,mm,dd IF PARAMETERS()=0 cUser = N_WhoAmI() ENDIF cString = N_PropVal(cUser,1,"LOGIN_CONTROL",.T.) yy = 1900 + ASC(SUBSTR(cString,1,1)) mm = ASC(SUBSTR(cString,2,1)) dd = ASC(SUBSTR(cString,3,1)) RETURN IIF(mm=0,CTOD(" / / "),CTOD(str(mm,2)+; "/"+STR(dd,2)+"/"+STR(yy,4))) **********************************
baze.podataka.346 max.headroom,
FoxPro Functions to access Netware's Bindery (10) * Function: N_Balance() * Purpose: Get the current account balance for a user * Syntax: <nBalance> := N_Balance( cUser ) * * Arguments: cUser - User bindery name * * Returns: nBalance - User's balance if accounting is * installed * * Notes: This function returns the current balance for * the specified user. If accounting is not * installed, zero will be returned. You can use * this function to restrict certain program * operations to users with sufficient funds. * * Example: LOCAL nBalance := N_Balance( N_WhoAmI() ) * ********************************************************** function N_Balance PARAMETER cUser PRIVATE cAmt IF PARAMETERS()=0 cUser = N_WhoAmI() ENDIF cAmt = N_PropVal(cUser,1,"ACCOUNT_BALANCE",.F.) RETURN Long2Fox(SUBSTR(cAmt,1,4)) **********************************
baze.podataka.347 max.headroom,
FoxPro Functions to access Netware's Bindery (11) * Function: N_CredLimit() * Purpose: Get the current credit limit for a user * Syntax: <nCredLimit> := N_CredLimit( cUser ) * * Arguments: cUser - User bindery name * * Returns: nBalance - User's credit limit if accounting is installed * * Notes: This function returns the current credit limit for the * specified user. If accounting is not installed, zero * will be returned. You can use this function to restrict * certain program operations to user with sufficient funds. * * ********************************************************** function N_CredLimit PARAMETER cUser PRIVATE cAmt IF PARAMETERS()=0 cUser = N_WhoAmI() ENDIF cAmt = N_PropVal(cUser,1,"ACCOUNT_BALANCE",.F.) RETURN Long2Fox(SUBSTR(cAmt,5,4)) **********************************************************
baze.podataka.348 max.headroom,
FoxPro Functions to access Netware's Bindery (12) * Function: N_IsMember() * Purpose: Check for group membership * Syntax: <logical> := N_IsMember( cObject,cGroup ) * * Arguments: cObject - Object to be tested * cGroup - Group to test * * Returns: TRUE if object is a member, FALSE otherwise * * Notes: This function is used to see if an object is * a member of a group. It can be used to * restrict menu choices to only members of a * department. * ********************************************************** function N_IsMember PARAMETERS cObject,cGroup PRIVATE cRequest cRequest = CHR(67)+; CHR(0)+CHR(1)+; Lstring(cObject,48)+; Lstring("GROUPS_I'M_IN",16)+; CHR(0)+CHR(2)+; Lstring(cGroup,48) RETURN Netware(227,cRequest,"") == 0 **********************************************************
baze.podataka.349 max.headroom,
FoxPro Functions to access Netware's Bindery (13) * Function: N_IsManager() * Purpose: Check if user is manager of a group * Syntax: <logical> := N_IsManager( cObject,cGroup ) * * Arguments: cObject - Object to be tested * cGroup - Group to test * * Returns: TRUE if object is a manager, FALSE otherwise * * Notes: This function is used to see if an object is * a manager of a group. It can be used to * restrict menu choices to only managers of a * department. * ********************************************************** function N_IsManager PARAMETERS cObject,cGroup PRIVATE cRequest cRequest = CHR(67)+; CHR(0)+CHR(2)+; Lstring(cGroup,48)+; Lstring("OBJ_SUPERVISORS",16)+; CHR(0)+CHR(1)+; Lstring(cObject,48) RETURN Netware(227,cRequest,"") == 0 **********************************************************
baze.podataka.350 max.headroom,
FoxPro Functions to access Netware's Bindery (14) * Function: N_IsInSet() * Purpose: See if one object is with another's set * property * Syntax: <logical> = N_IsInSet( cObject1,nType1,; * cObject2,nType2,cProperty) * * Arguments: cObject1 -Object to be tested for ownership * nType1 -Type of owner object * cObject2 -Object to be tested for membership * nType2 -Type of member object * cProperty -Set property to test * * Returns: TRUE if in group, FALSE otherwise * * Notes: This function is used to determine if one * object is a member of the specified property * for another object. For example, you can * use this function to determine if a user * should be allowed to perform a menu option. * ********************************************************** function N_IsInSet PARAMETER cObject1,nType1,cObject2,nType2,cProperty PRIVATE cRequest cRequest = CHR(67)+; CHR(0)+CHR(nType1)+; Lstring(cObject1,48)+; Lstring(cProperty,16)+; CHR(0)+CHR(nType2)+; Lstring(cObject2,48) RETURN Netware(227,cRequest,"") == 0 **********************************************************
baze.podataka.351 max.headroom,
FoxPro Functions to access Netware's Bindery (15) * Function: N_IsOperator( cUser, cServer ) * Purpose: See if the user has operator rights to the * server * Syntax: <logical> := N_IsOperator( cUser,cServer ) * Arguments: cUser - User Id to test * cServer - Server to check * * Returns: TRUE if user has rights, FALSE otherwise * * Notes: This function is used to see if the user id * has operator rights on a server. You could * use this function to control access into * parts of your FoxPro application. * * ********************************************************** function N_IsOperator PARAMETERS cUser,cServer PRIVATE x X = PARAMETERS() IF X < 1 cUser = N_WhoAmI() ENDIF IF X < 2 DIMENSION arr_(1) =N_ScanBindery(4,čarr_) cServer = arr_Š1Ć ENDIF RETURN N_IsInSet( cServer,4,cUser,1,"OPERATORS" ) **********************************************************
baze.podataka.352 max.headroom,
FoxPro Functions to access Netware's Bindery (16) * Function: N_DefExpire() * Purpose: See the default expiration date for new * user-ids * Syntax: <dExpire> := N_DefExpire() * Arguments: NONE * * Returns: An date value or an empty date if a * problem occurs * * Notes: This function is used to see what date the * user id could expire on. You might use this * date to limit future scheduling to before * the expiration date. * * ********************************************************** function N_DefExpire PRIVATE cString,yy,mm,dd ** cString = N_PropVal("SUPERVISOR",1,"USER_DEFAULTS",.F.) yy = 1900 + ASC(SUBSTR(cString,1,1)) mm = ASC(SUBSTR(cString,2,1)) dd = ASC(SUBSTR(cString,3,1)) RETURN IIF(mm=0,CTOD(" / / "),; CTOD(STR(mm,2)+"/"+STR(dd,2)+"/"+STR(yy,4))) **********************************************************
baze.podataka.353 max.headroom,
FoxPro Functions to access Netware's Bindery (17) * Function: N_AddObject() * Purpose: Adds an object into the bindery * Syntax: <logical> := N_AddObject(cObject,; * nType,; * cFlag,; * cRead,; * cWrite ) * Arguments: cObject - Object to be added to the bindery * nType - Type of object being added * cFlag - Static/Dynamic * cRead - Read security * cWrite - Write security * * Returns: TRUE if added, FALSE otherwise * * Notes: This function is used to add a new object into the * bindery. You must specify the object name, type, * flag and security for any item added. * ********************************** function N_AddObject PARAMETERS cObject, nType, cFlag, cRead, cWrite PRIVATE cRequest,nRead,nWrite cRequest = chr(50) IF PARAMETERS() < 4 cFlag = "S" ENDIF IF PARAMETERS() < 5 cRead = "O" ENDIF IF PARAMETERS() < 6 cWrite = "O" ENDIF nWrite = AT(cWrite,"ALOSN")-1 nRead = AT(cRead ,"ALOSN")-1 cRequest = cRequest + CHR(IIF(cFlag="D", 1, 0))+; CHR((nWrite * 16) + nRead)+; CHR(0)+CHR(nType) +; Lstring(cObject,48) RETURN Netware(227,cRequest,"") == 0 **********************************************************
baze.podataka.354 max.headroom,
FoxPro Functions to access Netware's Bindery (18) * Function: N_DelObject() * Purpose: Removes an object from the bindery * Syntax: <logical> := N_DelObject( cOject,nType ) * * Arguments: cObject - Object to be remove from bindery * nType - Type of object being removed * * Returns: TRUE if removed, FALSE otherwise * * Notes: This function is used to remove a bindery * object. Keep in mind that Netware's security * will probably restrict you from removing any * objects unless the id has supervisory rights. * ********************************************************** function N_DelObject PARAMETERS cObject, nType PRIVATE cRequest cRequest = CHR(51)+; CHR(0)+CHR(nType)+; Lstring(cObject,48) RETURN Netware(227,cRequest,"") == 0 **********************************************************
baze.podataka.355 max.headroom,
FoxPro Functions to access Netware's Bindery (19) * Function: N_RenObject() * Purpose: Renames a bindery object * Syntax: <logical> := N_RenObject( cOld,nType,cNew ) * * Arguments: cOld - Original name of the object * nType - Type of object being renamed * cNew - New name of the bindery object * * Returns: TRUE if changed, FALSE otherwise * * Notes: This function is used to rename an object * in the bindery. * ********************************************************** function N_RenObject PARAMETERS cOld, nType, cNew PRIVATE cRequest cRequest = CHR(52)+; CHR(0)+CHR(nType)+; Lstring(cOld,48)+; Lstring(cNew,48) RETURN Netware(227,cRequest,"") == 0 **********************************************************
baze.podataka.356 max.headroom,
FoxPro Functions to access Netware's Bindery (20) * Function: N_AddProperty() * Purpose: Adds a property to a bindery object * Syntax: <logical> = N_AddProperty( cObject,; * nType,; * cProperty,; * cFlag,; * cItemSet,; * cRead,; * cWrite ) * * Arguments: cObject - Object to add the property to * nType - Type of object * cProperty - Set property to add to object * cFlag - Property flag, Static or Dynamic * cItemSet - (I)tem or (S)et property * cRead - Property read security * cWrite - Property write security * * Returns: TRUE if added, FALSE otherwise * * Notes: This function is used to add a property to an * existing bindery object. For example, you can * use this function to add a fax number property * to a user bindery object. Keep in mind this * function only adds the property, it does not * assign a value to it. * ********************************************************** function N_AddProperty PARAMETERS cObject,nType,cProperty,cFlag,cItemSet,cRead,cWrite PRIVATE cRequest,nRead,nWrite cRequest = CHR(57)+; CHR(0)+CHR(nType)+; Lstring(cObject,48) IF PARAMETERS() < 4 cFlag = "S" ENDIF IF PARAMETERS() < 5 cItemSet = "I" ENDIF IF PARAMETERS() < 6 cRead = "O" ENDIF IF PARAMETERS() < 7 cWrite = "O" ENDIF nWrite = AT(cWrite,"ALOSN")-1 nRead = AT(cRead ,"ALOSN")-1 cRequest = cRequest +CHR(IIF(cFlag="D", 1, 0)+; IIF(cItemSet="S",2,0))+; CHR((nWrite*16)+nRead)+; Lstring(UPPER(cProperty),16) RETURN Netware(227,cRequest,"") == 0 ********************************************************** CONF JOIN PC.PROG.4 CONF REPLY baze.podataka
baze.podataka.357 max.headroom,
FoxPro Functions to access Netware's Bindery (22) * Function: N_ChgValue() * Purpose: Changes a property's value * Syntax: <logical> := N_ChgValue( cObject,nType,; * cProperty,xValue ) * * Arguments: cObject - Object name to be updated * nType - Type of object being updated * cProperty - Property to change * xValue - New value for the property * * Returns: TRUE if property value was changed, * FALSE otherwise * * Notes: This function is used to change the value * for a given property. For example, after * adding a property called FAX_NUMBER to a * user object, you would use this function * to write the person's fax number in. * ********************************************************** function N_ChgValue PARAMETERS cObject, nType, cProperty, xValue PRIVATE cRequest cRequest = CHR(62)+; CHR(0)+CHR(nType)+; Lstring(cObject,48)+; CHR(1)+CHR(255)+; Lstring(UPPER(cProperty),16)+; PADR(xValue,128,CHR(0)) RETURN Netware(227,cRequest,"") == 0 **********************************************************
baze.podataka.358 max.headroom,
FoxPro Functions to access Netware's Bindery (23) * Function: N_Add2Set() * Purpose: Adds an object to a set * Syntax: <logical> := N_Add2Set( cOwner,nOwnType,; * cObject,nType,cProperty ) * * Arguments: cOwner - Bindery object that owns the set * nOwnType - Owner's object type * cObject - Object to be added to owner set * nType - Type of object being added * cProperty - Set property to add cObject to * * Returns: TRUE if added, FALSE otherwise * * Notes: This function is used to add an object to a * group owned by another object. For example, * you can use this function to place a user * bindery object into a group. * ********************************************************** function N_Add2Set PARAMETERS cOwner, nOwnType, cObject, nType, cProperty PRIVATE cRequest cRequest = CHR(65)+; CHR(0)+CHR(nOwnType)+; Lstring(cOwner,48)+; Lstring(UPPER(cProperty),16)+; CHR(0)+CHR(nType)+; Lstring(cObject,48) RETURN Netware(227,cRequest,"") == 0 **********************************************************
baze.podataka.359 max.headroom,
FoxPro Functions to access Netware's Bindery (24) * Function: N_DelFromSet() * Purpose: Removes an object from a set * Syntax: <logical> = N_DelFromSet( cOwner,nOwnType,; * cObject,nType,cProperty ) * * Arguments: cOwner - Bindery object that owns the set * nOwnType - Owner's object type * cObject - Object to be removed to owner's * set * nType - Type of object being removed * cProperty - Set property to remove cObject * from * * Returns: TRUE if removed, FALSE otherwise * * Notes: This function is used to remove an object * from a group owned by another object. * ********************************************************** function N_DelFromSet PARAMETERS cOwner, nOwnType, cObject, nType, cProperty PRIVATE cRequest cRequest = CHR(66)+; CHR(0)+CHR(nOwnType)+; Lstring(cOwner,48)+; Lstring(UPPER(cProperty),16)+; CHR(0)+CHR(nType)+; Lstring(cObject,48) RETURN Netware(227,cRequest,"") == 0
baze.podataka.360 max.headroom,
FoxPro Functions to access Netware's Bindery (25) * Function: N_Members() * Purpose: Get members of a group * Syntax: <nCount> := N_Members( cObject,čALIST ) * * Arguments: cGroup - Group to test * aList - List of users * * Returns: Number of users found within the group * * Notes: This function is used to determine the number * of members in a group. It also returns a list * list of members. * ********************************************************** function N_Members PARAMETERS cGroup,aList PRIVATE nCount if PARAMETERS() < 2 return 0 endif nCount= N_PropVal(cGroup,2,"GROUP_MEMBERS",.F.,čALIST) RETURN nCount
baze.podataka.361 max.headroom,
FoxPro Functions to access Netware's Bindery (26) * Function: N_Managers() * Purpose: Get managers of a group * Syntax: <nCount> := N_Managers( cObject,čALIST ) * * Arguments: cGroup - Group to test * aList - List of managers * * Returns: Number of managers found within the group * * Notes: This function is used to determine the number * of managers in a group. It also returns a list * list of managers. * ********************************************************** function N_Managers PARAMETERS cGroup,aList PRIVATE nCount if PARAMETERS() < 2 return 0 endif nCount= N_PropVal(cGroup,2,"OBJ_SUPERVISORS",.F.,čALIST) RETURN nCount
baze.podataka.362 max.headroom,
FoxPro Functions to access Netware's Bindery (27) * Function: N_Qdir() * Purpose: Get the name of the print queue's directory * Syntax: <cDir> = N_Qdir( nQueueId ) * * Arguments: nQueueId -Bindery object id of queue * * Returns: cDir - Directory where files are stored * * Notes: This function is used to determine the name * of the directory where the print queues files * are stored until they are printed. * ********************************************************** function N_Qdir PARAMETER nId PRIVATE cDir cDir = N_PropVal( nId,3,"Q_DIRECTORY",.T. ) RETURN cDir
baze.podataka.363 max.headroom,
FoxPro Functions to access Netware's Bindery (28) * Function: N_QOperators() * Purpose: Get a list of queue operators * Syntax: <nCount> = N_QOperators( nQueueId,čaList ) * * Arguments: nQueueId -Bindery object id of queue * aList -Array passed by reference * * Returns: nCount -Number of queue operators * * Notes: This function is used to determine the user * ids of the print queues operators. * ********************************************************** function N_QOperators PARAMETER nId,aList PRIVATE nCount nCount = N_PropVal( nId,3,"Q_DIRECTORY",.T.,čALIST ) RETURN nCount
baze.podataka.364 max.headroom,
FoxPro Functions to access Netware's Bindery (29) * Function: N_NetAddr() * Purpose: Returns the file server's network address * Syntax: <nAddr> := N_NetAddr() * Arguments: cServer * * Returns: 0 or the specified servers network * address * ********************************************************** function N_NetAddr PARAMETERS cServer PRIVATE cString IF PARAMETERS() < 1 DIMENSION arr_(1) =N_ScanBindery(4,čarr_) cServer = arr_Š1Ć ENDIF cString = N_PropVal(cServer,4,"NET_ADDRESS",.F.) RETURN cString **********************************************************
baze.podataka.365 max.headroom,
FoxPro Functions to access Netware's Bindery (30) ********************************************************** * Function: Netware() * * Purpose: Shell for call Netware's API * ********************************************************** function Netware PARAMETERS nService,cRequest,cReply DIMENSION aRegsŠ10Ć PRIVATE nReturn nReturn = -1 aRegsŠ 1Ć = nService * 256 aRegsŠ 5Ć = .T. aRegsŠ 6Ć = .F. aRegsŠ 8Ć = CHR(LEN(cRequest))+CHR(0) + cRequest aRegsŠ 9Ć = CHR(LEN(cReply))+CHR(0) + cReply IF fp_int86( 33, čaRegs ) nReturn = aRegsŠ1Ć % 256 IF nReturn < 0 nReturn = nReturn +256 ENDIF ENDIF cReply = SUBSTR(aRegsŠ9Ć,3) RETURN nReturn ********************************************************** Eto i poslednje funkcijice. Gigantsko izvinjenje onima koje ovako nešto ne zanima, ali bih lično dao i poslednji nerv nervirajući se zbog većeg broja poruka slične sadržine :) Uskoro sledi i rasprava vezana za pomenute f-je, te sam ih zato i dao odvojeno, a ne u obliku fajla (kako bi predložili zli jezici ;), edabi se pozivao na broj poruke pri detaljisanju.
baze.podataka.366 max.headroom,
> P.S. Bolje naka max.headroom javno objavi broj > ziro-racuna, verovatno nisam jedini koji zeli da konkretno > zahvali ... Hvala na pivu, ali predlažem kokakolu :) Naravno, tek kad nam otvore temu ;)
baze.podataka.367 max.headroom,
> Da li bi ti to bila pouzdana informacija o postojanju > CDX-a? Šta kad ručno izbrišeš CDX, a u DBF-u ostane > indikator? U tom slučaju Fox napomene da je došlo do oštećenja/brisanja CDX fajla, i negde (verovatno u strukturi DBF-a) ukine tu informaciju. Pa kad sledeći put otvoriš pomenuti DBF ne javlja se nikakva greška, jerbo su indeksi (CDX) nestali :) A mene brine to ukidanje informacije, jerbo je greška samim tim jednokratna. Poruka dela: OBAVEZNO startovati programče koje kontroliše strukture baza i pripadajuće indekse pri svakom podizanju aplikacije, a sve po undapred definisanom šablonu. Ako je CDX oštećen, obrisati ga i nanovo otvoriti bazu pa rekreirati - u svakom drugom slučaju ostaste bez otvorene baze :)
baze.podataka.368 max.headroom,
> Ne upisuje! :) Bre :), pa zašto onda Fox daje poruku "Structural CDX file reference removed"? I još nešto: 1. kreiraš CDX fajl 2. CLOSE DATA 3. zatim ga obrišeš (na kvarno - !DEL *.CDX) i otvoriš bazu 4. Fox kaže "CDX-a nema" 5. ti kažeš "Ignore" i fleg je ukinut 6. CLOSE DATA 7. sada lepo napraviš jedan Undelete tog CDX fajla 8. otvoriš bazu 9. uočiš da nigde nema definicija indeksa (a CDX-a ima - recovered) 10. cvrc! :)
baze.podataka.369 max.headroom,
FoxPro Functions to access Netware's Bindery (21) * Function: N_DelProperty() * Purpose: Removes a property from a bindery object * Syntax: <logical> := N_DelProperty( cObject,nType,; * cProperty ) * * Arguments: cObject - Object to be updated * nType - Type of object being updated * cProperty - Property to remove from object * * Returns: TRUE if removed, FALSE otherwise * * Notes: This function is used to remove a property * from a bindery object. For example, you can * use this function to remove the FAX_NUMBER * property from a user-id object * ********************************************************** function N_DelProperty PARAMETERS cObject, nType, cProperty PRIVATE cRequest cRequest = CHR(58)+ ; CHR(0)+CHR(nType)+; Lstring(cObject,48)+; Lstring(UPPER(cProperty),16) RETURN Netware(227,cRequest,"") == 0 **********************************************************
baze.podataka.370 dr.grba,
>> ACCESS: If you're looking for a superb Windows development tool, >> look no further. Tek sam zagnjurio u Access. Alat je nešto daleko nadmoćnije od svega što sam dosada video na DOS ili Win platformama, naravno uz ogradu da nisam video sve (((: Ali da ždere resurse mašine - ždere. Na 486 DX2 VLB sa 8 MB RAM je tek podnošljivo. Na 386/40 sa 4 MB RAM ne prestaje da drlja po disku. Istina: specifikacija je izričita da Access 2.0 zahteva 6 MB RAM za sebe. Ako hoćete udobnu razvojnu mašinu za Access, stavite u nju 16 MB RAM i optimizujte parametre rada diska. I šta činiti, pitanje je sad? Ostati na XT socijali ili ići dalje? Moj izbor je ovo drugo.
baze.podataka.371 djelovic,
> > Ne upisuje! :) > > Bre :), pa zašto onda Fox daje poruku "Structural CDX file reference > removed"? Bre! :) Zašto jednostavno ne napravite dve baze, jednu sa indeksima i jednu bez, pa uradite compare? Tako ćete najbrže otkriti u kom zecu leži grm.
baze.podataka.372 nkbog,
> U vrlo lepoj knjizici "CA-Clipper 5.2 i mrezno programiranje" od > J.D.Booth i G.Lief daju se strukture DBF , NDX, CDX i dr., U knjižici pod imenom "Update" iz FoxPro-a 2.6 se nalaze sve strukture fajlova (uključujući i Report, Screen itd), ali tamo nema pomena o identifikatoru o postojanju .CDX. Ipak on POSTOJI: na offsetu 0x1C u .DBF se nalazi 01 ako postoji, a 00 ako ne postoji. Kad smo kod struktura: .MNX datoteke imaju polje za MESSAGE kojega nema u dijalozima u Menu Builderu. Kada se podesi ručno (USE kukulele.MNX, pa BROWSE) GENMENU napravi ispravan menu (sa porukama u na dnu ekrana). NB. p.s. Jel' neko uspeo da skreše veličinu .FRX datoteka - t.j. da izbaci one stvari koje trebaju za Windowse.
baze.podataka.373 nkbog,
>> to izbeci (ON ERROR, ON KEY ili nesto slicno). > Ovo vuče na neki bag iz 2.5, koji se javljao na strelici ulevo na brauzu > na numeričkom polju. Nisam imao slučaj, mada sam čuo, a prema > dokumentaciji treba da je ispravljeno u 2.6. Mea culpa (glupa?): na serveru smo imali i 2.5 i 2.6, a na tim računarima je bilo mapiranje na katalog 2.5, a ne 2.6... U 2.6 nema tog problema. NB.
baze.podataka.374 djorzor,
Ja sam možda malo glup, ali ... Kako da u Paradox-u ili Access-u napravim Query koji vraća samo one record-e koji su u duplikatu? Na primer, imam spisak imena i adresa i hoću da vidim koje su unete više od jedanput.
baze.podataka.375 zelkop,
Valjda je najjednostavnije da se indeksira, pa se vizuelno vide duplikati. Ako se postavi i key na indeksiranoj bazi, trebalo bi da se automatski formira izveštaj tipa "key violation".
baze.podataka.376 max.headroom,
Za sve one koji se bave Fox-om pod Novell-om, evo zanimljivog materijala za proučavanje. Slede opisi funkcija navedenih u fajlu NETPRINT.ARJ - a tiču se mrežnog printera. Sve po Booth-u i Lief-u... Function: N_STARTCAP() Purpose: To allow capture of local printers from within a FoxPro 2.5 program Syntax: <logical> = N_STARTCAP( Š<nPrinter>Ć ) Arguments: nPrinter - Optional print to capture Returns: TRUE is successful, FALSE otherwise Notes: This function is used to start a capture to the specified printer. --------------------------------------------------------------------- Function: N_FLUSHCAP() Purpose: To force the network to print the current capture file. Syntax: <nJob> = N_FLUSHCAP( Š<nPrinter>Ć ) Arguments: nPrinter - Optional captured printer to flush Returns: Job number for print queue handling printing, or zero if a problem occurs. Notes: This function is used to send a capture file to the network printer. The capture will not be stopped and all subsequent output will be redirected as well. --------------------------------------------------------------------- Function: N_CLOSECAP() Purpose: To close the capture and return control to the local printer Syntax: <nJob> = N_CLOSECAP( Š<nPrinter>Ć ) Arguments: nPrinter - Optional captured printer to close Returns: Job number for print queue handling printing, or zero if a problem occurs. Notes: This function is used to close a capture being run on a printer. The output will be set to the network printer. --------------------------------------------------------------------- Function: N_CANCELCAP() Purpose: To cancel the capture and return control to the local printer. The file is not printed. Syntax: <logical> = N_CANCELCAP( Š<nPrinter>Ć ) Arguments: nPrinter - Optional captured printer to cancel Returns: TRUE if canceled, FALSE otherwise Notes: This function is used to cancel a capture being run on a printer. No output will be set to the network printer, it will all be discarded if the function returns TRUE. --------------------------------------------------------------------- Function: N_CAPFLAGS() Purpose: To set the network capture flags Syntax: <logical> = N_CapFlags( aOldFlags Š,<aNewFlags>Ć ) Arguments: aOldFlags - Current capture flags aNewFlags - Optional array of new flags to set Notes: This function is used to set the capture flags for the default printer. The array consists of twelve elements as defined below: 1 Logical Should banners be printed? 2 Char Text of the banner 3 Numeric Which local printer is captured? 4 Numeric Which network printer is serving it? 5 Numeric Bindery print queue object id 6 Numeric Number of copies to print 7 Numeric Form number 8 Char Name of the form to load in printer 9 Numeric Job number 10 Numeric Maximum lines down 11 Numeric Maximum characters across 12 Numeric Timeout value in seconds --------------------------------------------------------------------- Function: N_QJOBLIST() Purpose: Get the list of jobs within the queue Syntax: <nCount> = N_QjobList(nQueue,čaJobs) --------------------------------------------------------------------- Function: N_QPOSITION() Purpose: Queries/Changes a job's print position Syntax: <logical> = N_QPOSITION(nQueue,nJob,nPosition) --------------------------------------------------------------------- Function: N_QREMOVE() Purpose: Remove a job from the print queue Syntax: <logical> = N_QREMOVE(nQueue,nJob) --------------------------------------------------------------------- Function: Q_INSTALLED() Purpose: To check installed state of PRINT.EXE Returns: lInstalled - TRUE if installed, FALSE otherwise --------------------------------------------------------------------- Function: Q_ADD.PRG Purpose: To add a file to the print queue Syntax: Q_add( cFilename ) Parameter: cFilename Returns: lSuccess - TRUE if file added, FALSE otherwise --------------------------------------------------------------------- Function: Q_REMOVE() Purpose: To remove a file from the print queue Syntax: Q_remove( cFilename ) Parameter: cFilename Returns: lSuccess - TRUE if removed, FALSE otherwise --------------------------------------------------------------------- Program: Q_CANCEL.PRG Purpose: To cancel all jobs in the print queue Syntax: Q_cancel() Parameter: NONE Returns: lSuccess - TRUE if all jobs were canceled FALSE otherwise --------------------------------------------------------------------- Function: P_WHERE() Purpose: Selects where to print a report Returns: TRUE if printer select, FALSE if the escape key pressed --------------------------------------------------------------------- Function: P_START() Purpose: Sets the environment up to print --------------------------------------------------------------------- Function: P_CANCEL() Purpose: Check to see if ESCAPE was pressed Returns: FALSE to continue printing TRUE if the escape key pressed --------------------------------------------------------------------- Function: P_END() Purpose: Finishes the report and prints it netprint.arj
baze.podataka.377 max.headroom,
* Fox & Novell (1) * * Program: SYSINFO.PRG * Function: N_Login() * Purpose: Attempt to log in to a server * Syntax: <logical> = N_Login(cUser,cPassword) ********************************** function N_login PARAMETERS cUser,cPassword PRIVATE cRequest,cReply cRequest = CHR(14)+; FOX2LONG(1)+; LSTRING(UPPER(cUser),48) IF LEN(TRIM(cPassword)) > 0 cRequest = cRequest + LSTRING(UPPER(cPassword),16) ENDIF cReply = SPACE(2) return ( Netware( 227, cRequest, čcReply ) = 0 )
baze.podataka.378 max.headroom,
* Fox & Novell (2) * * Function: N_Logout() * Purpose: Attempt to log out from the server * Syntax: <logical> := N_Logout() ********************************** function N_Logout PRIVATE is_gone DIMENSION aRegs(10) STORE 0 TO aRegs aRegsŠ1Ć = 215 * 256 is_gone = FP_Int86(33,čaRegs) RETURN is_gone
baze.podataka.379 max.headroom,
* Fox & Novell (3) * * Function: N_ConInfo() * Purpose: Get array of connection information * Syntax: <logical> = N_ConInfo(cUser,čaInfo) ********************************** function N_ConInfo PARAMETERS cUser,aInfo PRIVATE cRequest,cReply,dLogDate,cLogTime,is_ok DIMENSION aRegs(10),aWhere(1) STORE 0 TO aRegs is_ok = .F. IF N_FINDSTAT(cUser,čaWhere) > 0 cRequest = CHR(22)+CHR( aWhere(1) ) cReply = SPACE(63) IF Netware(227,cRequest,čcReply) = 0 DIMENSION aInfo(5) SET LIBRARY TO BLNET ADDITIVE aInfo(1) = LONG2FOX(SUBSTR(cReply,1,4)) aInfo(2) = INT2FOX(SUBSTR(cReply,5,2)) aInfo(3) = CLEANSTR(SUBSTR(cReply,7,48)) dLogDate = CTOD( STR(ASC(SUBSTR(cReply,56,1)),2)+"/"+; STR(ASC(SUBSTR(cReply,57,1)),2)+"/"+; STR(ASC(SUBSTR(cReply,55,1)),2) ) aInfo(4) = dLogDate cLogTime = STR(ASC(SUBSTR(cReply,58,1)),2)+":"+; STR(ASC(SUBSTR(cReply,59,1)),2)+":"+; STR(ASC(SUBSTR(cReply,60,1)),2) aInfo(5) = cLogTime is_ok = .T. ENDIF ENDIF RETURN is_ok
baze.podataka.380 max.headroom,
* Fox & Novell (4) * * Function: N_FindStat() * Purpose: Get a list of stations for a user * Syntax: <nCount> = N_FindStat( cUser,čaList ) ********************************** function N_FindStat PARAMETERS cUser, aStations PRIVATE cReply,cRequest,nCount,x cReply = SPACE(103) && Reply buffer cRequest = CHR(21)+; FOX2INT(1)+; LSTRING(cUser,47) nCount = 0 IF NetWare( 227,cRequest,čcReply ) = 0 nCount = ASC(SUBSTR(cReply,1,1)) IF nCount > 0 DIMENSION aStations(nCount) FOR x = 1 TO nCount aStations(x) = ASC(SUBSTR(cReply,x+1,1)) NEXT ENDIF ENDIF RETURN nCount
baze.podataka.381 max.headroom,
* Fox & Novell (5) * * Function: N_ShellVer() * Purpose: Retrieves network shell information * Syntax: cVersion = N_ShellVer() ********************************** function N_ShellVer PRIVATE x,cVersion DIMENSION aRegsŠ10Ć STORE 0 TO aRegs cVersion = "" aRegs(1) = 234 * 256 IF FP_Int86(33,čaRegs) IF aRegs(1) >= 0 cVersion = ALLTRIM(STR(INT(aRegs(2)/256)))+"."+; ALLTRIM(STR(INT(aRegs(2)%256)))+; CHR(65+(aRegs(3)%256)) IF SUBSTR(cVersion,1,1)>="3" x = aRegs(3)/256 IF x > 0 cVersion = cVersion + IIF(x=1,"e","x") ENDIF ENDIF ENDIF ENDIF RETURN cVersion
baze.podataka.382 max.headroom,
* Fox & Novell (6) * * Function: N_ConsPriv() * Purpose: Determines if user has console privileges * Syntax: <logical> := N_ConsPriv() ********************************** function N_ConsPriv PRIVATE cReply,cRequest,is_ok is_ok = .F. cReply = SPACE(2) cRequest = CHR(200) IF Netware(227,cRequest,čcReply) = 0 is_ok = .T. ENDIF RETURN is_ok
baze.podataka.383 max.headroom,
* Fox & Novell (7) * * Function: N_ServLogin() * Purpose: Get/set block for server logins allowed * Syntax: <logical> := N_ServLogin( ŠlSettingĆ ) ********************************** function N_ServLogin PARAMETER lSetting PRIVATE is_allowed,cReply,pcount pcount = PARAMETERS() is_allowed = .T. cReply = space(1) IF NetWare(227,CHR(205),čcReply) = 0 is_allowed = ASC(cReply)>0 IF pcount > 0 cReply = SPACE(2) =NetWare( 227, CHR(IIF(lSetting,204,203)),čcReply ) ENDIF ENDIF RETURN is_allowed
baze.podataka.384 max.headroom,
* Fox & Novell (8) * * Function: FsDateTime() * Purpose: Get the file server date and time * Syntax: <array> := FSDateTime() ********************************** function FsDateTime PARAMETERS aInfo DIMENSION aRegs(10) PRIVATE cReply,dDate,cTime,is_ok STORE 0 TO aRegs is_ok = .F. cReply = SPACE(7) aRegs(1) = 231 * 256 aRegs(8) = cReply aRegs(4) = .T. IF FP_int86( 33, čaRegs ) dDate = CTOD( STR(ASC(SUBSTR(aRegs(8),2,1)),2)+"/"+; STR(ASC(SUBSTR(aRegs(8),3,1)),2)+"/"+; STR(ASC(SUBSTR(aRegs(8),1,1)),2) ) cTime = STR(ASC(SUBSTR(aRegs(8),4,1)),2)+":"+; STR(ASC(SUBSTR(aRegs(8),5,1)),2)+":"+; STR(ASC(SUBSTR(aRegs(8),6,1)),2) aInfo(1) = dDate aInfo(2) = cTime is_ok = .T. ENDIF RETURN is_ok
baze.podataka.385 max.headroom,
* Fox & Novell (9) * * Function: N_WhoBlame() * Purpose: Get the file-server installation array * Syntax: N_WhoBlame( čarray ) ********************************** function N_WhoBlame PARAMETERS aInfo PRIVATE cRequest,cReply,x,jj,is_ok cRequest = CHR(201) cReply = SPACE(512) is_ok = .F. IF Netware( 227, cRequest, čcReply ) = 0 DIMENSION aInfo(4) FOR jj = 1 TO 4 x = AT(CHR(0),cReply) IF x > 0 IF jj = 3 aInfoŠjjĆ = CTOD(SUBSTR(cReply,1,x-1)) ELSE aInfoŠjjĆ = SUBSTR(cReply,1,x-1) ENDIF cReply = SUBSTR(cReply,x+1) ENDIF NEXT is_ok = .T. ENDIF RETURN is_ok
baze.podataka.386 max.headroom,
* Fox & Novell (10) * * Function: N_MiscInfo() * Purpose: Get an array of miscellaneous server information * Syntax: N_MiscInfo(čarray) ********************************** function N_MiscInfo PARAMETERS aInfo PRIVATE cRequest,cReply,is_ok cRequest = CHR(17) cReply = SPACE(130) is_ok = .F. IF Netware( 227, cRequest, čcReply ) = 0 DIMENSION aInfo(17) SET LIBRARY TO BLNET ADDITIVE aInfoŠ 1Ć = CLEANSTR(SUBSTR(cReply,1,48)) aInfoŠ 2Ć = ASC(SUBSTR(cReply,49,1)) aInfoŠ 3Ć = ASC(SUBSTR(cReply,50,1)) aInfoŠ 4Ć = INT2FOX(SUBSTR(cReply,51,2)) aInfoŠ 5Ć = INT2FOX(SUBSTR(cReply,53,2)) aInfoŠ 6Ć = INT2FOX(SUBSTR(cReply,55,2)) aInfoŠ 7Ć = ASC(SUBSTR(cReply,57,1)) aInfoŠ 8Ć = ASC(SUBSTR(cReply,58,1)) aInfoŠ 9Ć = ASC(SUBSTR(cReply,59,1)) aInfoŠ10Ć = INT2FOX(SUBSTR(cReply,60,2)) aInfoŠ11Ć = ASC(SUBSTR(cReply,62,1)) aInfoŠ12Ć = ASC(SUBSTR(cReply,63,1)) aInfoŠ13Ć = ASC(SUBSTR(cReply,64,1)) aInfoŠ14Ć = ASC(SUBSTR(cReply,65,1)) aInfoŠ15Ć = ASC(SUBSTR(cReply,66,1)) aInfoŠ16Ć = ASC(SUBSTR(cReply,67,1)) aInfoŠ17Ć = ASC(SUBSTR(cReply,68,1)) is_ok = .T. ENDIF RETURN is_ok
baze.podataka.387 max.headroom,
* Fox & Novell (11) * * Function: N_Down() * Purpose: Brings down the file server * Syntax: N_Down( lForceDown ) ********************************** function Down PARAMETER lForceDown PRIVATE cRequest,cReply cRequest = CHR(211)+CHR(IIF(lForceDown,1,0)) cReply = SPACE(2) return NetWare(227,cRequest,čcReply)
baze.podataka.388 max.headroom,
* Fox & Novell (12) * * Function: N_ClearCon() * Purpose: Clear an individual connection * Syntax: N_ClearCon( nConnect ) ********************************** function N_ClearCon PARAMETER nConnect PRIVATE cRequest,cReply cRequest = CHR(210)+CHR(nConnect) cReply = SPACE(2) return NetWare(227,cRequest,čcReply)
baze.podataka.389 max.headroom,
* Fox & Novell (13) * * Function: N_SetDate() * Purpose: Sets the server's date and time * Syntax: N_SetDate( dDate,cTime ) ********************************** function N_SetDate PARAMETERS dDate,cTime PRIVATE cRequest,cReply cRequest = CHR(202)+; CHR(YEAR(dDate)-1900)+; CHR(MONTH(dDate))+; CHR(DAY(dDate))+; CHR(VAL(SUBSTR(cTime,1,2)))+; CHR(VAL(SUBSTR(cTime,4,2)))+; CHR(VAL(SUBSTR(cTime,7,2))) cReply = SPACE(2) return NetWare(227,cRequest,čcReply)
baze.podataka.390 max.headroom,
─────────────────────────────────────────────── PHDBASE 2.0 LAST-MINUTE NOTES AND INFORMATION SHAREWARE VERSION Last Updated October 1991 Korenthal Associates, Inc. ─────────────────────────────────────────────── This file contains last-minute notes and instructions on installing and using the shareware version of PhDbase 2.0. We welcome all disk vendors and BBS sysops who wish to distribute the PhDbase utility, and invite them to refer to VENDOR.DOC and SYSOP.DOC for complete information relating to them. Individuals who wish to share the PhDbase utility with their friends and colleagues, or to upload PhDbase to their favorite BBS's, are also welcome; please see LICENSE.DOC for details. Sample descriptions of PhDbase suitable for BBS file listings and vendor catalogs are available in DESCRIBE.DOC. Please note that there are several separate products called the PhDbase Developer's Editions which are *NOT* shareware and may *NOT* be freely distributed. See below for additional information. Information on registering PhDbase and other KA products can be found in REGISTER.DOC and PRODUCTS.DOC. ───────────── Introduction: ───────────── PhDbase ("Phonetic Database") is a FoxPro 2 add-on utility that finds names based upon the way they sound, rather than the way they're spelled. Because PhDbase becomes part of the FoxPro system menu, it's available for use whenever FoxPro's other menu options are available. And because it's so easy to use, you can put PhDbase's searching power to work right away! PhDbase has two ways of finding names. Quick Search finds names when they appear at the beginning of a search field (such as "amerikin" in "American Express"). A typical Quick Search for a misspelled personal or company name will often return a list of most likely selections in a 100,000 record database in less than five seconds. Full Search finds names when they appear anywhere in a search field (such as "pyureena" in "Ralston Purina"), but it takes longer. How much longer depends upon the number of records that PhDbase has to scan. If you can create a FoxPro index on one or more fields in the database (such as STATE), and provide some information about the contents of this field in the record you're looking for (such as STATE = "NY"), even a Full Search in a large database can be performed fairly rapidly. Last-Minute Information Page 1 of 4 PhDbase 2.0 README.DOC ───────────────────────────────── The PhDbase Developer's Editions: ───────────────────────────────── In addition to the PhDbase utility, there are the PhDbase Developer's Editions, which allow you to incorporate PhDbase technology into your own database applications. Through a set of simple function calls such as PHDFIND, PHDTEST, and PHDFUZZY, you'll be able to closely integrate PhDbase's powerful search capabilities into your own exist- ing or new applications using whatever user interface code you prefer. The PhDbase Developer's Editions are separate products available from Korenthal Associates. Currently, Developer's Editions are available for FoxPro 2.0, Clipper Summer '87/5.0, and dBase III Plus/IV, with other platforms coming soon. Please see PRODUCTS.DOC for information about ordering the PhDbase Developer's Edition. ─────────────────────────── Printing the Documentation: ─────────────────────────── You may print the PhDbase User's Guide directly by typing: C>copy phdbase.doc prn If you have a LaserJet or DeskJet, a better way to print the documentation files is by using Korenthal Associates' popular laser printing utility 4Print. 4Print saves paper by printing two or three fully readable pages of text sideways across the page. By printing on both sides, 4Print can yield four, six, or even more pages of text on each sheet! As of version 4.1, 4Print includes a booklet-printing utility called 4Book which is ideal for printing the PhDbase and other shareware documentation. ───────────── Installation: ───────────── If you are installing PhDbase from a floppy disk, change directories to your FoxPro directory. Place the PhDbase distribution disk in drive A: or B: and run the installation program: C>cd Đfoxpro2 C>a:install OR C>b:install Alternatively, you may install PhDbase without changing to your FoxPro directory by specifying the FoxPro path on the install command line. Note that you *MUST* include the trailing backslash!!! For example: C>a:install c:Đfoxpro2Đ Last-Minute Information Page 2 of 4 PhDbase 2.0 README.DOC If you are installing a version of PhDbase that was compressed for electronic distribution, you should uncompress all the files into a temporary directory, make that the current directory, and then run install, specifying the FoxPro directory (with the trailing back- slash!) on the install command line (see above). Then you can delete the files from the temporary directory. The install program will place the files PHDBASE.APP, PHDBASE.SET, PHDBASE.HLP, PHDBASE.FPT, and PHSAMPLE.DBF in your FoxPro directory. In addition, the program will create a subdirectory within your FoxPro directory called PHDBASE (i.e. C:ĐFOXPRO2ĐPHDBASEĐ) in which it will store the PhDbase documentation files. ───────────────────── PhDbase is Shareware: ───────────────────── The PhDbase utility (not the Developer's Edition) is being marketed as shareware. Shareware gives users an opportunity to evaluate a program before buying it. If you like PhDbase and wish to continue using it beyond a 30-day trial period, you must order the registered version. You'll receive the full retail package including typeset manual. Please see the text file REGISTER.DOC for more information about the benefits of becoming a registered user. For information about shareware and the Association of Shareware Professionals (ASP), please see the text file SHR-WARE.DOC. ─────────────────────────── Uploading PhDbase to BBS's: ─────────────────────────── We encourage you to give copies of the shareware version of the PhDbase utility to your friends and colleagues, and to upload it to any BBS's that you use. When uploading PhDbase, please use the file name PHD200.ZIP. For sample descriptions of PhDbase suitable for BBS file listings, please see DESCRIBE.DOC. Please note that there are several separate products called the PhDbase Developer's Editions which are *NOT* shareware and may *NOT* be freely distributed. ────────── Thank you! ────────── The latest versions of all Korenthal Associates shareware products can always be found in our support forum on CompuServe, PCVENB Section 3, as well as on The Consultant BBS at 1-718-837-3236. Please feel free Last-Minute Information Page 3 of 4 PhDbase 2.0 README.DOC phdbase.arj
baze.podataka.391 max.headroom,
AD HOC FOXRPT WRITER MODULE Ad Hoc FOXRPT Writer requires very little from the user beyond pointing at a desired action and hitting the ENTER key. It was designed this way from the start. Reports and mail label definitions created with FOXRPT Writer can be saved, edited, and rerun at will. All output can be sent to the printer, screen, or to a disk file. Custom indexes can be built from within FOXRPT for your report and label runs. Theses index files can be created with conditional expressions through the use of a very powerful online Query builder. ( ** VERY IMPORTANT ** ) FOXPRO 2.0 COMPATIBILITY FOXRPT Writer is completely compatible with Foxpro 2.0 DBF and FPT files. The present version is ONLY COMPATIBLE WITH Foxpro 2.0 COMPACT .IDX and COMPACT structural .CDX files! You can create these index files with Foxpro 2.0 with the following syntax: .IDX - INDEX ON <field> TO <index file name> COMPACT .CDX - INDEX ON <field> TAG <tag name> COMPACT FOXRPT Writer creates these COMPACT indexes by DEFAULT with its Index Builder module! The LOG_USEIDX field in the configuration database FOXRPT.DBF will determine whether FOXRPT.EXE will use COMPACT .IDX or COMPACT structural .CDX index files. IF LOG_USEIDX is set to .T. COMPACT .IDX indexes are used. IF LOG_USEIDX is set to .F. COMPACT structural indexes are used. Report definitions created while using COMPACT .IDX files will have the "RPI" extension. Report definitions created using COMPACT structural indexes will have the "RPC" extension. FOXRPT automatically displays the correct report definitions for selection. FOXRPT will also correctly diplay either .IDX files or structural index file TAG information during the index selection phase of report creation. Both types of indexes for the same files may reside in the same directory. Both types of report definitions may reside or be created in the same directory. You only have to remember one thing: USE ONLY COMPACT INDEXES WITH THIS PROGRAM! USE ONLY COMPACT INDEXES WITH THIS PROGRAM! USE ONLY COMPACT INDEXES WITH THIS PROGRAM! ENVIRONMENT VARIABLE FOXRPT Writer is written in Clipper 5.01. Since Clipper will use expanded memory for indexing purposes it is standard practice to include the following statment in your AUTOEXEC.BAT file if you should experience corrupt indexes: SET CLIPPER=E:0 (or) SET CLIPPER=//E:0 Unlikely index corruption of this sort can occur with incompatible expanded memory managers. This should alleviate any problems with expanded memory you might encounter. *-------------------------------------------------------------------* MAIN MENU *-------------------------------------------------------------------* CREATING A REPORT DEFINITION FOR THE FIRST TIME Ad Hoc Report Writer creates three distinct types of reports. A single file report uses just one primary file. A relational report type one uses both a primary and secondary file. There is one record in the secondary file for each primary record. A relational report type two uses both a primary and secondary file. There are multiple secondary records for each primary record. Your data detemines which type of report you will need to create. Creating a report is essentially the same process for all report types. First, the report type is chosen and then report parameters are entered. You can control things like the left margin, spaces between printed fields on the report, page width, page length, etc. The only parameter that may be confusing to the you is the subtotal parameter. Say, for example, you have a file of customer purchases like ORDER.DBF. It is indexed on customer number and you are trying to total the purchases for each customer and want a grand total of all purchases. If you choose the subtotal option on the report parameter screen Ad Hoc Report Writer will print and sum all of the purchases for customer 100, display a subtotal, space, and then begin printing and summing the purchases by customer 200 and so forth. Create a single file report for ORDER.DBF with the subtotal option. Total the QTY and SELL fields for practice. The subtotal option's use will then become clear. You choose your primary and secondary files from a scolling list. You choose the fields you wish to include in the report from scrolling lists. Nothing could be easier! Just remember the following: 1. A MAXIUM OF 27 FIELDS FROM EACH FILE MAY BE USED IN THE REPORT. 2. THREE CALCULATED FIELDS MAY BE DEFINED PER FILE. 3. MEMO FIELD PROCESSING IS LIMITED TO ONE MEMO FIELD IN A SINGLE FILE REPORT. 4. FIELDS APPEAR ON THE PRINTED REPORT IN THE ORDER IN WHICH THEY WERE SELECTED. 5. IF YOU DO NOT ENTER A COLUMN HEADING FOR A FIELD THE FIELD NAME WILL BE USED AS A COLUMN HEADING ON THE REPORT. 6. IF YOU ARE USING TOTALS, SUBTOTALS, AND/OR CALCULATED FIELDS EXPECT YOUR REPORT TO BE WIDER THAN THE WIDTH OF THE SELECTED FIELDS ALONE. EXTRA SPACE IS ALLOCATED TO A FIELD BEING TOTALLED AND TO A CALC FIELD BEYOND THAT WHICH IS DISPLAYED BY THE FIELD SELECTION SCREEN. 7. WHEN CREATING RELATIONAL REPORTS OR WHEN SELECTING THE SUBTOTAL OPTION BE CERTAIN TO SELECT KEY FIELD OF PRIMARY FILE AS FIRST PRIMARY FIELD SELECTED! (** Very Important **) 8. PRIMARY & SECONDARY FILE KEYS MUST BE COMPATIBLE WHEN CREATING RELATIONAL REPORTS. (** Very Important **) 9. ALL OUTPUT CAN BE STOPPED WITH THE ESC KEY IF YOU DESIRE. EXECUTING A REPORT DEFINITION Simply select the report definition from the scrolling list by striking enter. You will have an opportunity to edit the report parameters you entered when you created it. You can also edit or create a query for the report and save it under the same or differ- ent name. Output for all reports can go to the printer, screen, or to a disk file. *-------------------------------------------------------------------* MAIL LABELS *-------------------------------------------------------------------* CREATING A MAIL LABEL DEFINITION FOR THE FIRST TIME Ad Hoc Report Writer permits the creation of standard, large, or cheshire format mailing labels. Simply take the Mailing Label Print option from the Main Menu. You will be asked to choose a primary file and primary file index. Next you will be given the opportunity to query the primary file if you desire. In this manner you can select to filter out certain zipcodes or cities according to your preferences and needs. You will then enter the label module. Choose the create option from within the label module. Assign the label file a unique and meaningful name. Select the modify contents option. Press F2 to choose field names for each line of the label you wish to create. BE SURE TO PLACE THE CURSOR AT THE BEGINNING OF THE LINE TO WHICH YOU ARE APPENDING FIELD NAMES! Follow the prompts and press F10 when you are done. Be sure to choose the proper format and dimensions from within the dimensions selection. By experimenting with the other options you'll find that you can tag select records and print only them if you choose. You can now print your mail labels and recall the new label definition you've just created whenever you wish. Just remember the following: 1. Be certain to choose the proper format and dimension from within the dimension option. You can make adjustments to the default sizes as you wish. Maximum label size is 24 X 60. 2. Create index files keyed on the fields by which you want to order your label printout. If you want labels to be printed in zipcode order then be sure to create an index file keyed on zipcode etc. 3. Make use of the test pattern and correct your alignment before beginning a large label run. (** Very Important **) 4. Make use of the query builder to select or filter your primary file when printing labels if you don't wish to create a label for every record in your file. 5. You can pause printer output with ALT-C if your label run jams in the printer. It's not the most sophisticated way to do so, but it certainly works. ESCAPE will ABORT a label printout. 6. A sample label definition (MAIL.LBL) is provided on your diskette. You can experiment with changes and printing by selecting it. First you select the Process Mailing Labels option from the Main Menu. Then select MAIL.DBF and MAIL.IDX as your primary file and index. 7. The copies parameter will determine how many labels for each record are printed. 8. The blank lines parameter will control the printing of blank lines in your label definition. Blank lines can be useful for spacers when printing large labels. 9. If you build a new label or edit an existing one and utilize the automatic field name selector, be sure to place the cursor at the BEGINNING of the line you are appending field names to! Experiment with this and you'll see why! CREATE A NEW INDEX FILE ( ** VERY IMPORTANT ** ) FOXRPT Writer is compatible with Foxpro 2.0 .IDX COMPACT INDEXES ONLY! Simply select this option from the Main Menu. Select a primary file. Then select the field(s) you wish to index on. If you wish to enter a conditional expression for your new index you may do so at this time with the use of the powerful online query builder. If you build a query such as LAST # "ADAMS" .AND. AMOUNT # 500 your new index will only contain records that meet these criteria. The last step in creating a new index is giving the new index file a name. That's all! The FOXRPT Writer does the rest! ( ** VERY IMPORTANT ** ) 1. FOXRPT converts numeric and date fields to character values when you build an index with them. FOXRPT ensures the proper ordering of values in this manner. Character indexes are completely compatible and need not be rebuilt. This conversion of numeric & date fields to string values is standard practice and enables you to build compound keys with mixed data types. These indexes are not backwards compatible with Foxpro, but it is a simple procedure to rebuild an index file using Foxpro if you must for reasons of compatiblity with other programs which access your data files. CHANGE THE DIRECTORY This option enables you to select any directory on your disk in which you you might have database files. FOXRPT will ask you which directory you'd like to enter. Enter the name. If you make a spelling error FOXRPT will report that it is not possible to enter the directory you keyed in. ** END OF FILE *** foxrpt.arj
baze.podataka.392 max.headroom,
E X E - Q - T E R D O C U M E N T A T I O N Welcome to Exe-Q-Ter, Exe-Krypter, & Exe-Q-Ter Install. The purpose of Exe-Q-Ter and the accompanying files is to allow all users and developers of FoxBase+, FoxPro 1.02, and FoxPro 2.0 the alternative of creating DOS executable files for their respective FoxBase/FoxPro versions, with the added capability of password and/or password/encryption protection for their applications, databases, and memo fields. It is not the intention of Exe-Q-Ter to imply, either directly or indirectly, that non-registered users of FoxBase/FoxPro Runtime or FoxPro 2.0 Distribution Kit, should dismiss the laws of copyright and trademark regulations concerning the distribution of FoxBase/FoxPro applications. On the contrary, you should know that it is UNLAWFUL to distribute FoxBase/FoxPro applications unless you are in fact a registered owner of either the Runtime or Distribution Kit. You may contact Fox Software, Inc. or a legitimate distributor of Fox products to obtain either of the above. Any known infringement of the above will be reported to Fox Software at once. exeqter.arj
baze.podataka.393 max.headroom,
TSR (ali nije TSR ;) clock u Fox-u. Obratiti padžnju i na onaj drugi .BIN fajl, pored TPCCLOCK.BIN... SYNTAX: LOAD TPCCLOCK MEMVAR = "PARAM" CALL TPCCLOCK WITH MEMVAR NOTE: These are the valid parameters for use with TPCCLOCK.BIN MEMVAR = "O" && TURN THE CLOCK ON MEMVAR = "F" && TURN THE CLOCK OFF MEMVAR = "/F0" && 24 HOUR DISPLAY MEMVAR = "/F1" && 12 HOUR DISPLAY MEMVAR = "/č X,Y" && DISPLAY CLOCK AT ROW,COL WARNING: This version of TPCClock.BIN requires all params be entered in UPPER case. When I get more time I will fix this. WARNING: You MUST be sure to turn the clock OFF before exiting your database program!! Failing to do this WILL result in hanging your system. (I suggest using "ON ERROR" to turn the clock off in case of an error, before "QUIT"ing.) tpcclo.arj
baze.podataka.394 oki.,
>> executable files for their respective FoxBase/FoxPro versions, with the >> added capability of password and/or password/encryption protection >> for their applications, databases, and memo fields. It is not the >> intention of Exe-Q-Ter Simpatičan program, al' beskoristan. Program napravi mali(?) EXE fajl koji startuje FOX i odgovarajuću aplikaciju. Glavni fazon je da omogućuje da se aplikacija kriptuje pa je zaštićena od eventualnih izmena. Međutim, zaštita je nikakva. Evo kako se razbija. Startujete WIN i zatim odete u DOS. Tu startujte program i kada počne izvršavanje programa vratite se u win i sa fajl menadžerom iskopirajte aplikaciju na neko drugo mesto. Kopirana aplikacija je enkriptovana. Dakle, zaštita ne služi, skoro, ničemu. Ovo se može poturiti nekome ko ne zna ili nema WIN (ili sličan multitasking) ;). Ovo me je baš razočaralo. :( Pozdrav, 3OPAH.
baze.podataka.395 bulaja,
│Startujete WIN i zatim odete u DOS. Tu startujte program i kada počne │izvršavanje programa vratite se u win i sa fajl menadžerom iskopirajte │aplikaciju na neko drugo mesto. └─── Može i jednostavnije (ako sam dobro shvatio princip rada programa) - kada se apilkacija startuje, samo resetovati računar i posle toga bi trebalo na disku da ostane nekripotovana kopija programa :).
baze.podataka.396 ndragan,
/ napraviti procedura za proveru postojanja CDX fajla iz hedera DBF / fajla. U Nalazi se na 28. bajtu (brojeći od nultog) u hederu .dbf fajla: 0 nema cdx 1 ima cdx. 29. bajt sadrži šifru kodne stranice za koju je baza prijavljena. Zasad sam provalio da je 100 (tj 0x064) za 852 i 0x0c8 za 1250 (tj windows ee). Gnjavio sam se sa tim dobrih pola sata :) / - proverio bi ispravnost strukture DBF fajla, memo i CDX fajla U poslednjoj verziji svog (generatora) programa za indeksiranje forsirano upisujem nulu na 28 bajt, zatim brišem .cdx te tek onda otvaram bazu (ovog puta se ne buni što nema .cdx, jer mu već piše da ga nikad nije ni imao :) i indeksiram. Ako me ne pusti da otvorim bazu za lele, i/o tj fopen(baza,12) vrati -1, zaključujem da je neko već otvorio i samo javim da nema ništa od indeksiranja ovog puta.
baze.podataka.397 ndragan,
/ p.s. Jel' neko uspeo da skreše veličinu .FRX datoteka - t.j. da izbaci Mislim da on interno proverava da li ima dovoljan broj polja (ne proverava baš celu strukturu), pa ako petljaš sa strukturom, probaj da bar pretvoriš neka memo polja u c(1), mada nisam siguran da će i tako raditi. Inače, mislim da možeš ladno da izbrišeš slogove gde Platform # "DOS", a i da izmisliš neke slogove sa levom platformom - on samo čita one koje hoće, a ostale ni ne gleda. Wizardi upravo prave neke svoje slogove - pogledaj šta piše u platformi.
baze.podataka.398 ndragan,
/ AFiles_Š1Ć = "EMPLOYEE; F:ĐAPPĐEMPLOYEE ; EMP_INIT,EMP_NAME" ======= Ovo mi se baš nešto ne sviđa - navođenje konjkretnih direktorija baš nije zdrava praksa. Preseliš se na drugi disk, drugu mrežu... i sve to treba menjati.
baze.podataka.399 oki.,
>> Može i jednostavnije (ako sam dobro shvatio princip rada programa) - >> kada se apilkacija startuje, samo resetovati računar i posle toga bi Da, al' cini mi se da je ovako elegantnije, da ne bi neke datoteke ostale otvorene i sl.). Pozdrav, 3OPAH.
baze.podataka.400 max.headroom,
> Ovo mi se baš nešto ne sviđa - navođenje konjkretnih > direktorija baš nije zdrava praksa. Preseliš se na drugi > disk, drugu mrežu... i sve to treba menjati. Slažem se - ali to beše "po Booth-u i Lief-u", a oni važe za tipove koji drže silne seminare po USA (u pitanju je FoxPro, naravo) :) Ma razume se, poenta njihove literature je: poseti ti lepo naš kurs Fox-a, pa onda izvodi zaključke. Fušerski, ali pretpostavljam da ima efekta.
baze.podataka.401 bulaja,
U priloženoj datoteci su informacije o Xbase/2 - CA-Clipper kompatibilnom (bar tako kažu) kompajleru za OS/2. Tekst je na nemačkom tako da ja uglavnom ništa ne razumem :), pa bi neko ko zna nemački a interesuje ga ova problematika mogao lepo da pročita tekst i prepriča nam šta ima unutra :). xbase2.zip
baze.podataka.402 misa.m,
Jedno pitanje za Fox4Win. Da li je i kako moguće otvori DDE kanal ka drugoj fox ili bilo kojoj windows aplikaciji koja je startovana na drugoj mašini (u W4WG)? DDE lepo radi na lokalnoj mašini ali mi nikako ne uspeva da inicijalizujem vezu ka aplikaciji na drugoj mašini. Rekao bih da MSHerc upravo koristi DDE.
baze.podataka.403 ikordic,
RE: dBase V for Windows Par komentara u vezi teksta dejanr-a o dBase V paketu. Naime, neki delovi teksta su ličili na otkrivanje tople vode. Ako izuzememo grafičku okolinu i Win-related kerefeke, deo opisanih "noviteta" je postojao i u dBase IV, koji je kod nas prošao potpuno nezapaženo. žak i sam autor teksta kaže "... to je razlika između 27.12.'85. kada je izašao dBase III+ i 2.8.'94. kada je izašao dBase V", kao da međuverzija nije ni postojala! Posle mene i potop ... ;) Dalje, nisam baš siguran da je iznenađenje što DB5 radi brže od Clipper-a. Testiranje je vršeno na 486 mašini sa puno memorije, čije performanse DB5 koristi do maksimuma, a siroti mali hrčak, pardon Clipper, ne. Pod ovim uslovima, mislim da je za sablažnjavanje ako je efekat suprotan. Zatim, da li je sasvim sigurno da ne postoji Run-Time distribucioni paket? Ovo je postojalo za dBase IV, postoji i za konkurekciju (Fox), ne vidim što ovo ne bi izbačili na gladno tržište. Koliko se sećam, odmah posle promocije poslednje verzije (IV) u cenovnicima su se paralelno pojavili i dBase IV i dBase IV Prof. Edition sa Run-Time modulom. Takođe smatram propustom što u tekstu nije obavljen neki osvrt na neposrednu konkurenciju (Fox, Access, možda i Pdx), uzevši u obzir zastupljenost, kao i činjenicu da je bilo prepisivanja sa obe strane.
baze.podataka.404 mdrazic,
>> Ovo mi se baš nešto ne sviđa - navođenje konjkretnih >> direktorija baš nije zdrava praksa. Preseliš se na drugi >> disk, drugu mrežu... i sve to treba menjati. > > Slažem se - ali to beše "po Booth-u i Lief-u", a oni važe za tipove > koji drže silne seminare po USA (u pitanju je FoxPro, naravo) :) Vrlo zadovoljavajuće rešenje po pitanju promene diska je da NE navodiš naziv diska veš samo path (npr. ĐappĐbazeĐ ). Tada sve u aplikaciji mora biti na jednom disku na kojem se trenutno nalaziš, što i nije neko ograničenje, ali te spasava problema oko raznih particija i mrežnih naziva diskova. Takođe 'koreni' direktorijum za tvoju aplikaciju ( ĐappĐ ) možeš definisati preko dos environmenta ili nekog konfiguracionog fajla, pa da izbegneš i probleme oko raznih mapiranja u mreži. Milan
baze.podataka.405 max.headroom,
Evo jedne zanimljive poruke sa SETNet-a - tiče se relacionih baza podataka posmatranih sa teorijskog stanovišta. Ako vam se poruka učini interesantnom, skinite i vezani fajl (SETNET.ARJ), u kome ćete naći deo rasprave o navedenoj problematici. --------------------------------- ■ NET.Base #767 Datum: 28-08-94 22:52 Od: Goran Turudich Za: Predrag Supurovic Odgovor: Relacione baze podataka #780 -> ...<Text Cut>... Pocecu sa osnovama. Trebalo bi prvo da uskladimo terminologiju, da bi se bolje razumeli. DEF1: Relacija R duzine n je (matematicka definicija) skup uredjenih n-torki R(a1, a2, a3,...,an) gde su a1, a2, ... , an clanovi skupova A1, A2, ... , An respektivno. Relacija R je podskup dekartovog proizvoda ovih skupova (A1*A2*...*An). Clanovi a1, a2, ... , an se nazivaju "atributi", a skupovi A1, A2, ... , An su "domeni". Relacija ima osobinu da u njoj ne postoje dve iste n-torke! Dakle, da bi se n-torke razlikovale, u relaciji mora postojati atribut ili kombinacija atributa koja ce igrati ulogu jedinstvenog identifikatora. Ovaj identifikator se zove primarni kljuc. NPR: relacija STUDENT je sledeceg oblika: STUDENT (BRINDEKSA#, IME, DATUMRODJENJA, ADRESA, SIFRASMERA, ...) Atribut BROJINDEKSA# ima znak "#" na svom kraju da bi se oznacilo da je on primarni kljuc relacije (nepisano pravilo). DEF2: Primarni kljuc (primary key) je atribut (prost ili slozen) koji u relaciji R ima osobine: 1. Jedinstvenosti - vrednost ovog atributa se pojavljuje samo u jednoj n-torki relacije R. 2. Neredundantnosti - nijedan deo kljuca ne moze da se izostavi, a da se ne izgubi osobina jedinstvenosti. NPR: slozeni atribut BRINDEKSA, IME nije kljuc relacije, jer se IME moze izostaviti, a atribut BRINDEKSA ce ipak imati osobinu jedinstvenosti. Dakle, primarni kljuc relacije je minimalna kombinacija atributa koja ima osobinu jedinstvenosti. U relaciji R moze postojati vise atributa koji imaju navedene osobine i svi oni su "kandidati za kljuc". Posto u relaciji moze postojati samo jedan primarni kljuc, onda se od njih bira jedan atribut koji ce biti primarni kljuc, a ostali kandidati za kljuc se nazivaju "alternativni kljucevi". U prethodno pomenutoj relaciji STUDENT, primarni kljuc je atribut BROJINDEKSA# jer on jedinstveno odredjuje n-toku relacije (ne postoje dva studenta sa istim brojem indeksa). DEF2: Spoljni kljuc (foreign key) je atribut (prost ili slozen) koji u relaciji R nije primarni kljuc, ali je primarni kljuc u nekoj drugoj relaciji u modelu. Spoljni kljucevi sluze za povezivanje relacija! NPR, u relaciji STUDENT, atribut SIFRASMERA nije primarni kljuc, ali jeste u relaciji SMER: SMER (SIFRASMERA#, NAZIVSMERA, ...). Ovaj atribut u relaciji STUDENT, znaci, igra ulogu spoljnog kljuca, preko koga se povezuju relacije STUDENT i SMER (zbog, npr, kreiranja izvestaja o studentima i smerovima na kojima studiraju). Cesto se gore pomenuti pojmovi i drugacije nazivaju. Cesto se, npr, umesto RELACIJA kaze TABELA, jer se svaka relacija moze predstaviti tabelom. Ali, treba paziti - svaka relacija je tabela, ali svaka tabela ne mora biti relacija! Takodje, cesto se umesto ATRIBUT kaze POLJE, a umesto N-TORKA RELACIJE - RED TABELE ili ZAPIS (zbog analogije relacije i datoteke u konvencionalnoj obradi podataka). Relaciona baza podataka je skup vremenski promenljivih relacija (tabela), i ne moze se poistovecivati sa jednom datotekom u konvencionalnoj obradi podataka. Dakle, ako neko napise aplikaciju za citanje i azuriranje telefonskog imenika on NIJE napisao bazu podataka, vec aplikaciju sa svojom privatnom datotekom u koju se podaci smestaju. Osim toga, baze podataka se NE PISU vec kreiraju, unistavaju, pretrazuju, azuriraju, a pisu se aplikacije za pretrazivanje, kreiranje, azuriranje baze podataka. ---------------------End of Message setnet.arj
baze.podataka.406 max.headroom,
Evo skupa interesantnih BIN fajlova, sve raznorazne funkcijice za rad sa svim i svačim (modemom, na primer). Sledi lista prisutnih: BIOSDATE ........... Page 35 CAPSOFF ............ Page 66 CAPSON ............. Page 69 CAPSSTAT ........... Page 60 CDROMDRV ........... Page 98 CDROMVER ........... Page 99 COM1200 ............ Page 74 COM2400 ............ Page 75 COM300 ............. Page 73 COM4800 ............ Page 76 COM9600 ............ Page 77 COMBID ............. Page 83 COMDR .............. Page 79 COMFE .............. Page 82 COMOE .............. Page 80 COMPE .............. Page 81 COMSTAT ............ Page 78 COMTHR ............. Page 84 COMTOE ............. Page 86 COMTSR ............. Page 85 CONVMEM ............ Page 36 CREATDIR ........... Page 23 CURSCOL ............ Page 100 CURSOR ............. Page 102 CURSROW ............ Page 101 DAYWEEK ............ Page 103 DOSVERS ............ Page 24 DRIVERDY ........... Page 25 EXTMEM ............. Page 37 GAMEADAP ........... Page 38 GETATTR ............ Page 27 GETDRIVE ........... Page 26 GETVERFY ........... Page 28 INSSTAT ............ Page 61 LEFTSHFT ........... Page 62 LPTINIT ............ Page 87 LPTSTAT ............ Page 88 MATHCOPR ........... Page 39 MCA ................ Page 40 MODMCTS ............ Page 93 MODMDCTS ........... Page 89 MODMDDSR ........... Page 90 MODMDRLS ........... Page 92 MODMDSR ............ Page 94 MODMRI ............. Page 95 MODMRLS ............ Page 96 MODMTER ............ Page 91 MOUSECTR ........... Page 104 MOUSEDRV ........... Page 105 MOUSEHID ........... Page 106 MOUSELFT ........... Page 107 MOUSELNG ........... Page 108 MOUSERHT ........... Page 109 MOUSESHW ........... Page 110 MOUSETYP ........... Page 111 MOUSEVER ........... Page 112 NODRIVES ........... Page 41 NUMCHAR ............ Page 113 NUMOFF ............. Page 67 NUMON .............. Page 70 NUMSTAT ............ Page 63 PARALLEL ........... Page 55 PC ................. Page 43 PCAT ............... Page 45 PCBUS .............. Page 42 PCCONV ............. Page 48 PCJR ............... Page 46 PCXT ............... Page 44 PCXT286 ............ Page 47 PRNTSCRN ........... Page 114 PS2M30 ............. Page 49 PS2M50 ............. Page 50 PS2M55 ............. Page 51 PS2M60 ............. Page 52 PS2M70 ............. Page 53 PS2M80 ............. Page 54 REALTIME ........... Page 56 REMOVDIR ........... Page 29 RGHTSHFT ........... Page 64 SCRLOFF ............ Page 68 SCRLON ............. Page 71 SCRLSTAT ........... Page 65 SCRNSIZE ........... Page 57 SERIAL ............. Page 58 SETATTR ............ Page 32 SETDIR ............. Page 30 SETDRIVE ........... Page 31 SETVERFY ........... Page 33 XMSDRV ............. Page 115 foxlib.arj
baze.podataka.407 dejanr,
>> Ako izuzememo grafičku okolinu i Win-related kerefeke, deo opisanih >> "noviteta" je postojao i u dBase IV, koji je kod nas prošao potpuno >> nezapaženo. žak i sam autor teksta kaže "... to je razlika između >> 27.12.'85. kada je izašao dBase III+ i 2.8.'94. kada je izašao dBase >> V", kao da međuverzija nije ni postojala! Posle mene i potop ... ;) To je razlika između domaćeg prikaza i nekog prikaza koji bi bio preveden iz stranog časopisa. Program se poredi sa nečim što je ovde dobro poznato, primetićeš da je dBASE IV pominjan tamo gde je to bilo relevantno (npr. specifikacije, dužine polja, imena polja itd). Glavnina poređenja je sa baterijom dBASE III+/Clipper koja je ovde apsolutno preovlađujuća. >> Dalje, nisam baš siguran da je iznenađenje što DB5 radi brže od Clipper-a. >> Testiranje je vršeno na 486 mašini sa puno memorije, čije performanse DB5 >> koristi do maksimuma, a siroti mali hrčak, pardon Clipper, ne. Pod ovim >> uslovima, mislim da je za sablažnjavanje ako je efekat suprotan. Pa, to je otprilike i rečeno u tekstu - ubrzanje potiče od internog keširanja. Međutim, uvek je iznenađenje (bar za mene) kada neki DOS program radi sporije od "odgovarajućeg" Windows programa. Daj Bože da se taj trend promeni. >> Zatim, da li je sasvim sigurno da ne postoji Run-Time distribucioni >> paket? Ovo je postojalo za dBase IV, postoji i za konkurekciju (Fox), >> ne vidim što ovo ne bi izbačili na gladno tržište. U trenutku pisanja teksta nije postojao. U dokumentaciji se nigde ne referencija. U PC Magazine-u od ne-znam-kog oktobra, u kome se reklamira dBASE 5.0, ne reklamira se run time paket. PC Magazine od 1. novembra još nisam video (mada bi trebalo da je izašao). >> Takođe smatram propustom što u tekstu nije obavljen neki osvrt na >> neposrednu konkurenciju (Fox, Access, možda i Pdx), uzevši u obzir >> zastupljenost, kao i činjenicu da je bilo prepisivanja sa obe strane. Uporedni test je ozbiljna stvar. "Računari" će verovatno u sledećem broju objaviti prikaz paketa Access 2.0, u onim sledećim FoxPro-a 2.6 (mada tu, izgleda, nema nekih spektakularnih noviteta), za Paradox ćemo videti, a posle toga je moguć neki uporedni test.
baze.podataka.408 eotek,
> U prilozenoj datoteci su informacije o Xbase/2 - CA-Clipper > kompatibilnom (bar tako kazu) kompajleru za OS/2. Tekst je sadrzaj: dva fajla, od toga jedan upitnik za potencijalne beta-testere i drugi "White Paper" koji objasnjava projekt. Radi se, dakle, o projektu koji je u toku, sa ciljem da se izradi kompajler koji bi na nivou koda bio 100 % kompatibilan sa Clipper 5.01, a trebao bi da sadrzi sve mogucnosti 32 bitnog okruzenja, objekte itd. Projekt je zapoceo sa radom avgusta 1994, prema tome, po meni - sacekati i videti. Beta testeri bi dobili posebne popuste prilikom nabavke kompajlera (kada bude gotov), a beta program bi se realizovao preko CompuServe, forum OSUGER.
baze.podataka.409 ndragan,
/ SYNTAX: LOAD TPCCLOCK Ubiše čoveka u pojam. Kad je ovo pisao, kanda još nije bilo onog set hours to 12 (24) set clock to x,y set clock on (off) u samom foksu. Al' sad kad ima, ne znam čemu ovo.
baze.podataka.410 isimic,
Ima li neko literaturu za FoxPro 2.6 Library Construction Kit? Ili, kako se od C programa prave biblioteke za FoxPro 2.6? Pozdrav!
baze.podataka.411 oki.,
>> u samom foksu. Al' sad kad ima, ne znam čemu ovo. Valjda je za stari Fox (Base)?
baze.podataka.412 dpredovic,
Već dosta dugo se bakćem sa clipperom, i kada sam nedavno pogledao fox, neke stvari mi ne leže baš najbolje... U mojoj koncepciji pod clipperom osnovni način prikazivanja podataka je browse, koji je maximalno fleksibilan, služi i za pregled, unos, brisanje, pretraživanje, menjanje ordera, etc. etc. Ono što sam video u foxu je sve samo ne fleksibilno, ali pretpostavljam da postoje fore i fazoni da se ta krutost malo zaobiđe. Kao 1. - jel postoji neki način da ugasim kursor u browsu (hoću da mi služi samo za pregled). SET CURSOR OFF se pravi mnogo pametan, pa se pali i gasi kako se njemu dopada... Kao 2. - jel postoji još neki način da osvežim browse iz on key... kada promenim nesto u redosledu baze, a da to nije: ON KEY LABEL <somekey> DO someproc internal=.T. DO WHILE internal internal=.F. BROWSE ... ENDDO PROC someproc internal=.T. ... something_nasty_to_do_with_base_ordering ... KEYBOARD "CTRL+END" RETURN Padalo mi je napamet neko zezanje sa refresh, ali nisam uspeo da izvedem nista mnogo pametno...
baze.podataka.413 misa.m,
>> Ima li neko literaturu za FoxPro 2.6 Library Construction Kit? Imam za 2.5 i koliko znam iste su.
baze.podataka.414 max.headroom,
> Ubiše čoveka u pojam. Kad je ovo pisao, kanda još nije > bilo onog > > set hours to 12 (24) Becveze. Sada sam tek ukapirao šta sam spustio. Nije bitno, ovih dana imam dosta sitnih programčića na raspolaganju, pa me stigne haos pri bacanju nepotrebnog i UL-u kakvo-takvog softvera. Izvinjenje onima koji su skidali, a svaka čas' onima kojima je ovo koristilo :) Nego, jedan blesavi problem u Fox-u for Win: Hteo bih da svako GET polje uokvirim sa još jednim okvirom, dakle, oko onog koji je kreiran sa SET READBORDER. Dobija se interesantan efekat dubine, ako parove naspramnih stranica obojite sa RGB(256,256,256,256,256,256) i RGB(128,128,128,128,128,128) Elem, šta je suština - htedoh da napravim f-ju koja će ovo raditi, s tim da kao parametre zadam x-koord, y-koord. i dužinu GET polja, pa bi program izgledao ovako: x = SPACE(20) č 10,5 GET x =OKVIR(10,5,20) Ali... Pošto je sve relativno u odnosu na font koji se koristi (moj slučaj: Arial, 8 pts), meni treba nekakva vrsta ofseta kojim ću množiti tamo-neke-koordinate i tako dobijati "od-do" vrednosti za linije tog mog okvira. Zna li neko ofsete (vertikalne i horizontalne)? (ja dobih 0.8 kao horiz. offset, ali to nije dovoljno precizno - fale još dve decimale :)
baze.podataka.415 djelovic,
> Ali... Pošto je sve relativno u odnosu na font koji se koristi (moj > slučaj: Arial, 8 pts), meni treba nekakva vrsta ofseta kojim ću > množiti tamo-neke-koordinate i tako dobijati "od-do" vrednosti za > linije tog mog okvira. Zna li neko ofsete (vertikalne i horizontalne)? Dialog Box Measurements Every dialog box template contains measurements that specify the position, width, and height of the dialog box and the controls it contains. These measurements are device independent, so an application can use a single template to create the same dialog box for all types of display devices. This ensures that a dialog box will have the same proportions and appearance on all screens despite differing resolutions and aspect ratios between screens. Dialog box measurements are given in dialog base units. One horizontal unit is equal to one-fourth of the average character width for the system font. One vertical unit is equal to one-eighth of the average character height for the system font. An application can retrieve the number of pixels per base unit for the current display by using the GetDialogBaseUnits function. An application can convert measurements from dialog base units to pixels by using the MapDialogRect function. The template must specify the initial coordinates of the upper left corner of the dialog box. Usually the coordinates are relative to the upper left corner of the owner window's client area. When the template specifies the DS_ABSALIGN style or the dialog box has no owner, the position is relative to the upper left corner of the screen. Windows sets this initial position when it creates the dialog box, but permits an application to adjust the position before displaying the dialog box. For example, an application can retrieve the dimensions of the owner window, calculate a new position that centers the dialog box in the owner window, then set the position by using the SetWindowPos function. The template should specify a dialog box width and height that does not exceed the width and height of the screen and ensures that all controls and are within the client area of the dialog box. Although Windows permits a dialog box to be any size, creating one that is too small or too large can prevent the user from providing input, defeating the purpose of the dialog box. Many applications use more than one dialog box when there are a large number of controls. In such cases, the initial dialog box usually contains one or more push buttons that the user can click to display the next dialog box. [From the Microsoft(R) Windows(tm) API]
baze.podataka.416 moebius,
Pretpostavljam da ovo svi vec znaju, sem mene.. Kako izgleda .DBF na disku? Hteo bih da napisem C rutine za otvaranje .DBF pa mi treba opis formata. Ajde budite dobri, pomozite.. Dragan
baze.podataka.417 ndragan,
/ naziv diska veš samo path (npr. ĐappĐbazeĐ ). Tada sve u aplikaciji Ili još lepše, spakuješ imena direktorija u par javnih promenljivih, koje definišeš u nekom init programu, pa prilikom selidbe samo to promeniš.
baze.podataka.418 gaston,
>>>Bre! :) Zasto jednostavno ne napravite dve baze, jednu sa indeksima i jednu >>>bez, pa uradite compare? Tako cete najbrze otkriti u kom zecu lezi grm. Ozbiljno: Zahvaljujem djelovic-u na sugestiji o nacinu kako pronaci mesto u FOX DBF-u gde se belezi informacija o tome da li baza ima CDX ili ne. Konkretno: Komparirao sam dve baze, jednu bez CDX i drugu sa njim i otkrio da je oznaka na 29-om bajtu od pocetka DBF fajla (odnosno zaglavlja). Kao dokaz prilazem programce za proveru: procedure CheckCDX * Proverava treba li DBF da ima CDX fajl ISKLJUCIVO na osnovu * oznaka u zaglavlju DBF fajla * public zagl, name_dbf ************* 1. SLUCAJ: DBF BEZ CDX * kreiranje DBF fajla sa jednim poljem, bez CDX name_dbf = "bez_cdx.dbf" create table (name_dbf) (polje1 N(10,2) ) use * citanje zaglavlja pomocu funkcije Zaglavlje() zagl = Zaglavlje("bez_cdx.dbf") if Empty(zagl) wait "CITANJE ZAGLAVLJA NIJE USPELO !" window return endif * ispisivanje informacija u fajl if File("A1.TXT") Erase A1.TXT endif =Ispisi() * pregled fajla modi file a1.txt ************* 2. SLUCAJ: DBF SA CDX * kreiranje DBF fajla sa jednim poljem, SA CDX name_dbf = "sa_cdx.dbf" create table (name_dbf) (polje1 N(10,2) ) index on polje1 tag polje1 use * citanje zaglavlja pomocu funkcije Zaglavlje() zagl = Zaglavlje("sa_cdx.dbf") if Empty(zagl) wait "CITANJE ZAGLAVLJA NIJE USPELO !" window return endif * ispisivanje informacija u fajl =Ispisi() * pregled fajla modi file a1.txt erase bez_cdx.dbf erase sa_cdx.dbf erase sa_cdx.cdx erase a1.txt return ******************** function Zaglavlje * * Funkcija otvara DBF fajl na niskom nivou, cita zaglavlje * i smesta ga u znakovnu promenljivu z * * parametri: ime_dbf - znakovna promenljiva, ime DBF fajla * vraca: z - znakovna promenljiva sa rezultatom * parameters ime_dbf private z * otvaranje DBF fajla na niskom nivou ff = FOpen( ime_dbf, 12) if ff < 0 wait 'Greska pri otvaranju fajla.' window nowait return "" endif * postavljanje pokazivaca na pocetak i citanje zaglavlja (prvih 32 bajta) =FSeek(ff, 0, 0) z =FRead(ff, 32) =FClose(ff) return z ******************** function Ispisi * ispis ide u tekstualni fajl A1.TXT SET ALTERNATE TO A1.TXT ADDITIVE SET ALTERNATE ON ? "Podaci o DBF fajlu: ", name_dbf * zdraknite malo kako izgleda zaglavlje sa kukama i kvakama ... ? zagl * a zatim ce biti ispisan broj ASCII koda za svaki bajt (znak) u zaglavlju for i = 1 to Len(zagl) s = SubStr( zagl, i, 1) s = PadL( AllTrim( Str( Asc(s),3,0) ), 3, "0") ? i, " ", s next ? ? * specijalno, na 29-om mestu je oznaka da li DBF ima CDX s = substr( zagl, 29, 1) if Asc(s) = 1 ? CHR(7) ? "29.-ti bajt je: ", Asc(s), " DBF bi trebalo da ima CDX fajl !" else ? "29.-ti bajt je: ", Asc(s), " DBF --- NEMA --- CDX fajl !" endif ? CLOSE ALTERNATE SET ALTERNATE OFF SET ALTERNATE TO return Eto, toliko od mene ... P.S. Naravno, to ne oslobadja ndragan-a da ispuni preuzetu obavezu i posalje celokupnu strukturu FOX DBF i ostalih fajlova ... B) P.S.2. Zlobno: A sada malo ciste zlobe: To pokazuje da _lipper-asi koji tajno prate ovu temu ne bi li nesto naucili, toliko dobro hvataju FOX-ove fazone da ne samo sto uspesno ucestvuju u raspravama, nego sam vise nego siguran da ce im to jednog lepog dana, kada ih Svevisnji bude prosvetlio i priveo k pravom programskom paketu za izradu programa za baze podataka i otimanje para od korisnika, vise nego korisno posluziti. Stavise, mislim da znam krajnju fazu u preobracenju _lipper-asa u FOX-ovca: kada pocnu da diskutuju o SQL-u, dan velikog prosvetlj- enja i konacnog preobracenja nije daleko ... B->>>>> Neka se djelovic ne ljuti, zloba ionako dolazi od coveka najgore fele: od bivseg _lipper-asa koji je uspesno presao na FOX ... B--->>>>>>>>>>>> P.S.3. Zamalo da zaboravim: _lipper-asi ne moraju da se brinu, prilikom prelaska iz jedne u drugu veru nisu mi nista odsekli... Cak sam se posle toga uspesno ozenio i dobio cerkicu ...B)
baze.podataka.419 max.headroom,
> služi samo za pregled). SET CURSOR OFF se pravi mnogo > pametan, pa se Kursor je isključen (sa SET CURSOR OFF) u samo tri slučaja: GET nekog polja, INKEY() i za vreme trajanja WAIT komande. > ON KEY LABEL <somekey> DO someproc *** TEST.PRG ON KEY LABEL F2 DO x USE baza ORDER tag1 DEFINE WINDOW a FROM 1,1 TO 10,50 TITLE "Browser" BROWSE FIELDS ime, prezime WINDOW a ... ... *** X.PRG CLOSE DATA USE baza ORDER tag2 BROWSE LAST KEYBOARD "šENTERć" RETURN Samo, koncepcija ti loša :) Lakše ti je da mu prvo ponudiš koji ćeš ORDER da obrađuješ, pa tek kada on kaže "ime" ili "prezime", ti mu udariš BROWSE.
baze.podataka.420 mdrazic,
> A sada malo ciste zlobe: To pokazuje da _lipper-asi koji tajno prate ovu > temu ne bi li nesto naucili, toliko dobro hvataju FOX-ove fazone da ne > samo sto uspesno ucestvuju u raspravama, nego sam vise nego siguran da ce > im to jednog lepog dana, kada ih Svevisnji bude prosvetlio i priveo k > pravom programskom paketu za izradu programa za baze podataka i otimanje > para od korisnika, vise nego korisno posluziti. Stavise, mislim da znam > krajnju fazu u preobracenju _lipper-asa u FOX-ovca: kada pocnu da > diskutuju o SQL-u, dan velikog prosvetlj- enja i konacnog preobracenja > nije daleko ... B->>>>> Možda Clipperaši samo hoće da pomognu braći sapatnicima Foxovcima :) Clipperaši mogu da biraju: hoće li da rade sa .NTX, .CDX (Fox), .NDX,.MDX (dBase), .NSX (SiX). Zato Clipperaši znaju neke od problema koji muče Foxovce. Kada Clipperaši počnu da diskutuju o SQL-u tada neće pogledavati u pravcu Fox-a, već će koristiti Visual Objects :))) Ne shvatite me pogrešno, mislim da je Fox sjajan softver, ali ipak koristim Clipper zato što: a) u vreme kada sam počeo da radim nisu mogli da se porede, b) i dalje su jezik, prateće biblioteke, otvorenost, objektna orijentacija i mogućnost proširenja na strani Clippera. Kada počnemo nešto ozbiljno da radimo u VO, poredićemo i Windows aplikacije, za sada Fox ovde vodi 1:0. Nadamo se bar izjednačenju :)) Milan
baze.podataka.421 dpredovic,
>> služi samo za pregled). SET CURSOR OFF se pravi mnogo >> pametan, pa se > > Kursor je isključen (sa SET CURSOR OFF) u samo tri slučaja: > GET nekog polja, INKEY() i za vreme trajanja WAIT komande. I nema šansone da ga isključim u browsu? > Samo, koncepcija ti loša :) Lakše ti je da mu prvo ponudiš > koji ćeš ORDER da obrađuješ, pa tek kada on kaže "ime" ili > "prezime", ti mu udariš BROWSE. Koncepcija mi se dopada, em ukida jedan nivo menija, em nema potrebe da čovek gasi tabelu, pa opet trči kroz menije samo da bi dobio drugi redosled. Inače, pronašao sam fazon: SHOW WINDOW REFRESH :)
baze.podataka.422 dpredovic,
> Hteo bih da napisem C rutine za otvaranje .DBF > pa mi treba opis formata. Jedan source, hiljadu reči... Ovo radi sekvencijalni pregled baze, iz c-a. dbflist.zip
baze.podataka.423 moebius,
> Jedan source, hiljadu reci... Ovo radi sekvencijalni pregled baze, > iz c-a. Pravo u metu! Hvala Dragan
baze.podataka.424 goxx,
■ ■ Komparirao sam dve baze, jednu bez CDX i drugu sa njim i otkrio da je oznaka ■ na 29-om bajtu od pocetka DBF fajla (odnosno zaglavlja). ■ Kao dokaz prilazem programce za proveru: ■ procedure CheckCDX ■ * Proverava treba li DBF da ima CDX fajl ISKLJUCIVO na osnovu ■ * oznaka u zaglavlju DBF fajla Nekome sam odgovorio (pre petnaestak dana) da u dbf fajlovima nema informacija o indeksima. Po ovome bi moglo da se kaže da nisam u pravu, ali ... Prevashodno nisam mislio na to da li postoji indeksni fajl ili ne već, ako postoji kako se on zove jer nam je jedino ta informacija relevantna. Zato je najbolje imati neki rečnik baze podataka pa na osnovu njega kontrolisati integritet baze (baza = svi fajlovi). ■ P.S.2. Zlobno: ■ ... ■ _lipper-asa u FOX-ovca: kada pocnu da diskutuju o SQL-u, dan velikog ■ prosvetljenja i konacnog preobracenja nije daleko ... B->>>>> ■ ... ■ Neka se djelovic ne ljuti, zloba ionako dolazi od coveka najgore fele: ■ od bivseg _lipper-asa koji je uspesno presao na FOX ... B--->>>>>>>>>>>> Kad već vučeš za jezik :)) Jel može nešto u tom FOX-u da se napiše, a da izgleda lepo ? Šta će vam oni silni znaci jednakosti u pozivima funkcija za rad sa fajlovima na niskom nivou? :))))). Goran
baze.podataka.425 pedjolino,
Jedno ORACLE pitanje. Postoji li nacin da se u Forms-ima odradi rollback a da ne odradi i clear_form. Negde pise da ne moze ali me zanima koristi li neko neki trik za to. Naime posle upotrebe rollbacka u bilo kojoj proceduri koja odradjuje komplikovanu transakciju ili napolje iz forme ili ponovni execute_query, pa skok na slog gde je bio i ostale zezalice.. Ne pomaze ni koriscenje savepointa, bar ja ne videh kako. Pozdrav Nenad.
baze.podataka.427 bulaja,
Ima li neko Windows ODBC drajver za FoxPro datoteke? Znači treba mi osim za standardne .DBF baze podataka još i za .CDX indekse i .FPT memo polja.
baze.podataka.428 max.headroom,
> Inače, pronašao sam fazon: SHOW WINDOW REFRESH :) Jest, ba! :) (Prozori, prozori, a ja kopao po BROWSE-u...)
baze.podataka.429 max.headroom,
DATA DICTIONARY Ako vas pri svakoj novoj aplikaciji (FoxPro v2.5 for Win) zatrpava sveža gomila papira sa opisima baza, polja, tagova, relacija i svega ostalog, dakle, relevantnog - ovaj programčić je prava stvar. Uvek pristupačan i krajnje jednostavan. "Dolje papir! čivjela elektron'ka!" :) datad.arj
baze.podataka.430 misa.m,
>> Ima li neko Windows ODBC drajver za FoxPro datoteke? Ima.
baze.podataka.431 szeman,
>> Jedan source, hiljadu reči... Ovo radi sekvencijalni pregled baze, iz >> c-a. Hvala ti puno i od mene, ubih se sa onim zezalicama iz bltc18z.zip (koja je, uzgred, sa bug-om.)
baze.podataka.432 ndragan,
/ Valjda je za stari Fox (Base)? Tj. za nešto što bi moglo da trči i na super turbo ih teu sa nan tan tatasturom? Kome to još treba?
baze.podataka.433 ndragan,
/ č 10,5 GET x / =OKVIR(10,5,20) č 10,5 GET x size 1, 28 =OKVIR(10, 5, 1, 28) S tim da okvir crtaš tako da bude otprilike za 0.1 do 0.2 širi na sve strane oko polja. E sad, zašto 28. Treba ti oko 30% šire polje, inače ako uneseš dva tri velika slova, neće ti stati, bez obzira na font. Takođe, prilikom ubacivanja parametara za tu funkciju bi trebalo da bude uzeta u obzir i srednja širina fonta za rečeni objekat u odnosu na širinu fonta za ceo prozor, pošto se veličine za okvir računaju upravo preko ovog poslednjeg (visina i srednja širina difolt fonta za prozor), a tvoj objekat može da ima i neki drugi font. Sve skupa, prilikom prebacivanja aplikacije iz dosa pod pendžere, gdegod spaziš len( ) i Define window from ... to / size, računaj da ćeš imati da računaš. Vrednosti preuzete iz dosa će funkcionisati, al' ima da rodiš mečku dok počne da liči na nešto. / (ja dobih 0.8 kao horiz. offset, ali to nije dovoljno precizno - fale Rešenje je da uzmeš odnos širine fonta za objekat podeljeno sa širinom fonta za prozor (srednje!) i dobijenim koeficijentom množiš parametre u proceduri koji se odnose na širinu, a odnosom visina da množiš visinu, pa onda plus nešto da dobiješ razmak. BTW, kod mene stoji set readborder off, mnogo je lepše kad sam nacrtaš ispupčeni ili udubljeni okvir, mada to ume da potraje (masku sa dvadesetak polja i tridesetak takvih okvira iscrtava do deset sekundi na 486/40 sa 8M) (mada, našli smo načina da i tome doakamo :).
baze.podataka.434 ndragan,
/ Ima li neko literaturu za FoxPro 2.6 Library Construction Kit? Ili, / kako se od C programa prave biblioteke za FoxPro 2.6? Knjiga uopšte nije naivna, samo formatu parametara koji se prosleđuju tamo i nazad posvećeno je prvih dvadesetak strana. Dovoljno je džebeno da smo to ostavili za neka vremena kad bude vremena za eksperimentisanje. Da, knjiga je ista od 2.5.
baze.podataka.435 ndragan,
/ Padalo mi je napamet neko zezanje sa refresh, ali nisam uspeo da / izvedem nista mnogo pametno... Štos je u tome da ne treba da daš refresh na prozor u kome se nalazi brauz, nego na sam brauz prozor. Njegovo ime je jednako aliasu baze, osim ako mu daš naslov, kada je jednako prvoj reči naslova, tj. najbolje je da naslov strpaš u promenljivu, koja ti posle sadrži i ime pendžera koji treba osvežiti (*) . BTNJ, ako je instaliran 852 i u config.fp stoji codepage=auto, taj naslov, kao i sva moguća imena (baza, polja, procedura, promenljivih, pendžera itd) mogu da sadrže šđžčć, koje ispravno prepoznaje i u velikim i malim slovima. ------ (*) za osvežavanje ne preporučujem ni pepsIkolu ni kokAkolu, čak i moja najmlađa ćerka je izjavila da je to 'isto govno'. Najbolje samo jedan Show Window (ime_pengera) Refresh jer garantovano osvežava, a ne goji.
baze.podataka.436 max.headroom,
> off, mnogo je lepše kad sam nacrtaš ispupčeni ili > udubljeni okvir, mada to ume da potraje (masku sa > dvadesetak polja i tridesetak takvih okvira iscrtava do > deset sekundi na 486/40 sa 8M) (mada, našli smo načina da > i tome doakamo :). 'Ebem li ga da li mu ovo dođe pod "baze.podataka", al' šta ćeš - Win radi svoje :) Elem, ja setujem READBORDER na ON, a potom nacrtam ivice da izgleda kao da je udubljeno. Efekat se time malčice pojačava (stvar ukusa). Nego, za ono "brzo" iscrtavanje prozora: da li je trik da ga prvo DEFINE, potom crtkaš, pa tek na kraju ACTIVATE? Dobiješ utisak da ga odmah "baci" na ekran :)
baze.podataka.437 aandrejin,
Imam pitanje u vezi sa ACCESS-om 2. Forma ima 3 polja. Hoću da izvedem da ako je polje1=null onda da druga 2 polja budu enabled=false, odnosno da "posive". Možda je od neke važnosti što je polje1 text, a druga 2 polja datumi. Ovo je u VBasicu najprostija stvar, ali meni u ACCESSu nikako da uspe. Unapred hvala na odgovoru. HPS: probo sam i sa IsNull funkcijom ali :(
baze.podataka.438 peca.st,
Hi svima! Koristim FoxPro for Windows 2.6. Rade}i sa njim, uo~io sam potrebu za kori}enjem nekih ve} postoje}ih SW procedura i funkcija, kako ne bih nanovo izmi{ljao toplu vodu. Recimo, trenutno sam u "pohodu" za 'Incremental Search' rutinom. Znate li mo`da gde mogu na}i neke rutine ove vrste za svoju vrziju FoxPro-a? Ima li neko od vas ne{to {to bi mi moglo pomo}i? Hvala unapred! :) Puno pozdrava!
baze.podataka.439 max.headroom,
VEZA: C => FOXPRO for WIN (1/4) (Prolog: tekst je za C-debile poput mene, ali može da se iskopa i ponešto korisnoga - kao i iz svakog tematski uokvirenog štiva, uostalom. Pod pojmom "C-debil" podrazumevam osobu koja se programiranja latila tek od mas-manije usmerene na Xbase jezik. Da sam hteo da učim C, sada bih pisao UNIX za digitalne časovnike, a ne aplikacije koje ne ispuštaju bazu podataka ni posle shut-down-a. Drugim rečima - "da sam školu učio, ne bih ovde čučio. Prstom pokaži gde se kuglica nalazi" ;) * * * Iako (svi znamo da) je FoxPro kompletan sistem za razvoj aplikacija, postoji potreba za njegovom primenom na mestima gde Fox-ova snaga ne može da dođe do izražaja zbog pomanjkanja funkcija koje podržavaju željenu vrstu "razonode" (primera radi: komunikacija sa A/D konverto- rom). Druge aplikacije su u .DLL formatu, i njih možemo koristiti samo ako je omogućena njihova veza (link) sa FoxPro-om. Srećom, još od FoxPro-a v2.00 postoji API (Application Programming Language) koji omogućuje korisniku da postojeći sistem nadogradi proizvoljnim brojem novih funkcija. Te funkcije se odnose na, kao što sam pomenuo, pisanje i čitanje sa A/D konvertora, I/O porta (dakle, raznorazne modemske komunikacije nama dobro znane), itd. Koristeći API, možemo sistem nadograđivati koliko nam volja što mrežnim, grafičkim i ostalim funkcijama, i, što je najvažnije, preko njega dobijamo pristup neograničenom broju Windows aplikacija i .DLL-a. Da bi pristupili eksternoj biblioteci rutina (.FLL fajlovi), koristimo komandu SET LIBRARY TO. Najčešće su pomenuti .FLL fajlovi pisani u C-u ili asembleru. Majkrosoftov "Library Construction Kit" (LCK) sadrži sav kod neophodan da bi se kreirao jedan .FLL fajl, kao i one osnovne funkcije koje čine samo jezgro Fox-a (pristup .DBF fajlovima, prozorima...). Pošto smo nabavili i instalirali LCK, potrebno je imati i standardni C-kompajler (kao što su Watcom C, odn. Microsoft C/C++). Tada posedujete sav alat neophodan za kreiranje, kompajliranje i linkovanje C programa u .FLL datoteku. Tekst koji sledi pokazuje kako koristiti API za kreiranje i dodavanje jedne jednostavne funkcije FoxPro-u. ELEMENTI C PROGRAMA Xbase jezik je tzv. "weakly typed" jezik. Drugim rečima, u Xbase-u jedna varijabla pri kreiranju može imati jedan tip (npr. datumski), da bi se kasnije u programu konvertovala u drugi (npr. karakter). C je, međutim, "strongly typed" jezik i kod njega je pre-deklaracija promenljivih određivanje njihovog tipa koji je, kasnije, nepromenljiv. Hederi Sve C funkcije se moraju pre-definisati time što se odredi tip njihovog ulaznog i izlaznog parametra. I umesto da vas primorava da stalno iznova pišete pre-definicije ili radite njihov cut/paste u nove programe, C poseduje kompajlersku direktivu #include, koja se može koristiti da bi se "dodali" posebni fajlovi, tzv. hederi, a koji sadrže pomenute pre-definicije. Hederi najčešće imaju ekstenziju .H - LCK ih takođe poseduje; on nudi poseban heder-fajl, PRO_EXT.H, koji sadrži sve potrebne strukture i definicije f-ja neophodne FoxPro-u. Globalne promenljive Kao i kod Fox-a, sve promenljive kreirane u funkciji (dakle, pri njenom pozivanju) bivaju izgubljene posle izlaska iz iste. C predviđa postojanje globalnih struktura i promenljivih, slično PUBLIC promenljivama. Globalne promenljive su deklarisane čim su napisane van funkcije, i važe za sve vreme njenog izvršavanja. Rezultati funkcija Sve C f-je su definisane vrednošću koja se od njih očekuje kao rezultat (izlazni parametar). Najčešće su one tipa int, float, ili char. Još jedan tip f-je, void, ne vraća nikakav rezultat. Sve API f-je koje se pozivaju direktno iz Fox-a moraju biti void tipa. To ne znači da one ne mogu imati i rezultat (logično, jelte) - to samo znači da se ne koristi standardni mehanizam vraćanja rečenog rezultata. LCK nudi posebne f-je za rezultirajuće numerike, stringove i boolean izraze; one daju FoxPro-u posebnu kontrolu nad memorijom i formatiranjem.
baze.podataka.440 max.headroom,
VEZA: C => FOXPRO for WIN (2/4) FOXINFO STRUKTURA FoxInfo je veza između FoxPro-a i rutina pisanih u C-u. FoxInfo struktura sadrži sledeće: ime f-je, onakvo kakvim će biti pozivana iz Fox-a; ime C funkcije; broj parametara i njihov tip. Potreban je jedan podatak u FoxInfo bazi za svaku f-ju koja će biti pozivana iz FoxPro-a. Primer jednostavne C funkcije Najlakši način da se kreira željena API biblioteka rutina, jeste da se baci pogled na konkretan primer. Ono što sledi je kompletan listing jedne C funkcije nazvane ARGUTYPE.C, koja je slična Fox-ovoj f-ji TYPE(), i koja kao rezultat vraća tip podatka zadatog kao ulazni parametar. Razlika je u tome što ARGUTYPE.C rezultat vraća kao kompletan string, a ne kao pojedinačni karakter. /* A R G U T Y P E . C */ #include <stdlib.h> #include <pro_ext.h> char *typesŠ Ć = š "Character", "Date", "Integer", "Float", "General","Logical","Memo","Numeric", "Picture","Reference","Unknown" ć; void far argutype(ParamBlk FAR *parm) š int ix; int tp = parm->pŠ0Ć.val.ev_type; for (ix = 0; ix < 10 && tp != typesŠixĆŠ0Ć; ix++); _RetChar(typesŠixĆ); FoxInfo myFoxInfoŠ Ć = š š"ARGUTYPE", argutype, 1, "?"ć, ć; FoxTable _FoxTable = š (FoxTable FAR *)0, sizeof(myFoxInfo) / sizeof(FoxInfo), myFoxInfo ć; Dakle, napisana funkcija je dugačka samo četiri reda, a poznajući C programere (ne računam sebe, svakako), može biti i kraća. Šta kaže f-ja? Elem, njena prva linija deklariše promenljivu ix, koja je samo brojač. Druga linija definiše promenljivu tp. Da bi se shvatilo kako se promenljiva inicijalizuje, potrebno znati kako API prihvata zadate parametre. Svi parametri koji se prosleđuju API-ju moraju biti posebne strukture nazvane ParamBlk (strukture su u C-u grupa elemenata koja se tretira kao jedna celina. One su nešto kao matrice (arrays) u Fox-u, u kojima svaki elemenat može biti posebnog tipa). Pomoću FoxPro-a parametar se API-ju može proslediti koristeći bilo "call-by-value", bilo "call-by- reference" pristup. Da bi se došlo da parametra, svaki tip zahteva posebnu strukturu. "Call-by-value" biva obrađen preko "Value" (vrednost) strukture, dok "Call-by-reference" (referenca) obrađuje "Locator" struktura. Kada se dve strukture fizički preklope, oni kreiraju uniju (union). Tako, ParamBlk struktura je unija Value i Locator struktura, pa programer mora odlučiti koju "stranu" unije primenjuje. Prvi bajt strukture sadrži tip poziva i govori koja će se "strana" koristiti. "Seciranje" segmenata koda je dobra prilika za dekodiranje C nomenkla- ture: tp = parm->pŠ0Ć.val.ev_type; parm-> Pointer na ParamBlk strukturu pŠ0Ć. Prvi parametar strukture val. Koristi "Value" stranu Parameter strukture ev_type Ovaj element sadrži tip podatka Konkretno, ova rutina koristi "call-by-value". ParamBlk struktura omogućuje prosleđivanje više parametara (tzv. subscript struktura, tj. strukt. sastavljena od elemenata). Elementi se u C-u navode iza uglastih zagrada (ŠĆ), dok matrice uvek počinju elementom 0.
baze.podataka.441 max.headroom,
VEZA: C => FOXPRO for WIN (3/4) Rutina, potom, uzima prvo slovo tipa parametra i poredi ga sa prvim slovom proširene definicije (vidi: types). Ako je poređenje uspelo, kao rezultat se vraća proširena definicija tipa (ond. cela reč). Ako, pak, poređenje nije uspelo, rutina vraća string "Unknown" (nepoznati tip). Funkcija _RetChar() vraća sadržaj matrice - ona očekuje pointer na string koji se završava "null" karakterom, kao svoj jedini argument. Na kraju listinga ARGUTYPE.C nalazi se FoxInfo struktura. Ona definiše svaku novu f-ju koja se dodaje FoxPro-u. Prvi element je ime koje će Fox koristiti da pristupi novoj funkciji. Njeno ime mora biti navedeno pod navodnicima i napisano velikim slovima. Drugi element je ime funkcije u C-u, i ono ne mora biti identično Fox-ovom. Međutim, pošto je C case-sensitive jezik, ime f-je u koje će koristiti C mora biti navedeno pazeći na mala i velika slova. Treći element je broj argumenata koji se prosleđuje (1), a četvrti je pod navodnicima i definiše njihove tipove. Treći i četvrti element omogućavaju FoxPro-u da proveri broj i tip argumenata pre nego što je API i pozvan. Program je smešten u fajl sa ekstenzijom .C i spreman je za kompajliranje. Kao što je ranije napomenuto, ParamBlk struktura je u stvari unija Value i Locator struktura. Prvi elementi iz obe strukture se preklapaju, što se koristi za indikaciju da li je parametar prosleđen po vrednosti ili po referenci. Value struktura ParamBlk strukture se definiše na sledeći način: typedef struct š char ev_type; char ev_padding; short ev_width; unsigned short ev_length; long ev_long; double ev_real; MHANDLE ev_handle; ć Value; Prvi element, ev_type, mora biti jedan od sledećih: C,N,I,D,G,L, ili M. Ako je R, parametar se prosleđuje po referenci i potrebno je koristiti Locator "stranu". Pretpostavljajući da je ev_type jedna od gornjih vrednosti, definicija ostalih elemenata Value strukture zavisi od tipa parametra koji se prosleđuje. Sledeća tabela prikazuje za šta se koristi koje polje za koji tipa parametra: Polja typedef strukture ------------------------------------------------------------------------ Tip elementa Character Numeric Integer Date Logical Memo/Gen ------------------------------------------------------------------------ ev_type 'C' 'N' 'I' 'D' 'L' 'M' ev_width širina širina FCHAN ev_length dužina broj logical stringa decimala ev_long long duž. memo integer polja ev_real double date ofset precision memo polja ev_handle MHANDLE stringa ------------------------------------------------------------------------ Locator struktura se koristi za prosleđivanje argumenata po referenci, kao i za prosleđivanje matrica, memo-polja i "general" polja. Evo njene definicije: typedef struct š char l_type; short l_where; short l_NTI; short l_offset; short l_subs; short l_sub1; short l_sub2; ć Locator; Prvi element, l_type, mora biti "R". Evo i tabele: Locator polja i njihova upotreba ----------------------------------------------------------------------- Locator polje Upotreba polja ----------------------------------------------------------------------- l_type 'R' l_where -1 za promenljivu, ili broj radne oblasti l_NTI Ime indeksa l_offset Broj polja (ako je baza), prvi. el. je 0 l_subs 0 za promenljivu, ili broj elementa matrice l_sub1 Prvi element (ako je matrica) l_sub2 Drugi element (ako je matrica dvodimenzionalna) -----------------------------------------------------------------------
baze.podataka.442 max.headroom,
VEZA: C => FOXPRO for WIN (4/4) KOMPAJLIRANJE Da bi se ARGUTYPE.C iskompajlirao, koristeći Watcom-ov C 9.0 kompajler, zadajemo sledeće parametre: wcc /o1 /of /s /d2 /m1 /fpc argutype Objašnjenje svičeva: /o1 loop optimization /of generate traceable stack frames /s removes stack overflow checks /d2 embed symbolic debugging information /m1 use the large model /fpc use only the floating point library, not the coprocessor Kada je kompajliranje uspelo, kao rezultat dobijamo ARGUTYPE.OBJ fajl. LINKOVANJE Za linkovanje je potreban jedan "front-end" fajl, koji će u kombinaciji sa ARGUTYPE.OBJ rezultovati .EXE datotekom. Da bi linkeru objasnili šta sve treba da uđe u taj .FLL fajl, koristimo .LNK datoteku. Ona (ARGUTYPE.LNK) izgleda ovako: debug all sys windows dll lib clibl lib windows lib proapiwl name ARGUTYPE.exe option symfile = ARGUTYPE.map option heapsize = 5k option map option oneautodata file libentry.obj file ARGUTYPE.obj Sve specifične FoxPro f-je vade se iz PROAPIWL.LIB fajla (stiže zajedno sa LCK-om), dok se opšte C i Windows f-je koje rutina zahteva dobijaju iz WINDOWS.LIB i CLIBL.LIB fajlova (stižu zajedno sa kompajlerom). Ako je linkovanje uspelo, kao rezultat se dobija ARGUTYPE.EXE. Potom je potrebno učiniti sledeće korake da bi Windows 3.1 prepoznao fajl i da bi ga Fox mogao učitati: rc -31 ARGUTYPE.exe copy /b ARGUTYPE.exe+ARGUTYPE.map del ARGUTYPE.fll rename ARGUTYPE.exe ARGUTYPE.fll Prva linija poziva resource kompajler koji markira ARGUTYPE.EXE kao Windows 3.1 executable. Druga linija kombinuje fajl i symb. tabelu u jedan fajl, dok treća briše postojeću kopiju fajla. Poslednja linija samo preimenuje ARGUTYPE.EXE u .FLL, što omogućava Fox-u da ga prepozna kao biblioteku. Sve ovo utrpajte u neki .BAT fajl (dajte da se automatizujemo), odn. koristite Watcom-ov MAKE. DODAVANJE NOVE FUNKCIJE FOXPRO-U Pošto je .FLL kreiran, iz Fox-a ga jednostavno uzmite kao eksternu biblioteku sa SET LIBRARY TO argutype. LIST STATUS ili DISPLAY STATUS daju sledeće rezultate: API library Instance Handle c:ĐfoxproĐwinapiĐargutype.fll 0031B994 Function Address ARGUTYPE 08D7:0130 Da bi se novokreirana f-ja testirala, dovoljno je zadati: ? argutype(DATE()) što bi trebalo da rezultuje ispisom stringa "Date". Probajte i ostale tipove. Ako posedujete više biblioteka, koristite ih sve odjednom upotrebom: SET LIBRARY TO lib1, lib2, itd... (za korišćenje neke dodatne biblioteke upotrebite ADDITIVE opciju). Ako vam neka od biblioteka više ne treba, zadajte: RELEASE LIBRARY lib1.
baze.podataka.443 djelovic,
> VEZA: C => FOXPRO for WIN (4/4) Hvala na veoma zanimljivom primeru!
baze.podataka.444 jasicp,
Postoji li grupa za Paradox Engine ? Ako ne postoji, neka interesenti posalju mail.
baze.podataka.445 spantic,
Sećate se Maxovog obećanja da će sve svoje zanimljive poruke o Fox-u da sredi u fajl? ;) Dok on to ne uradi evo svih poruka tematske prirode zaključno sa korišćenjem C-a. -> Max: Moja škola FOX-a max.zip
baze.podataka.446 ndragan,
/ I nema šansone da ga isključim u browsu? Browse nowait save nowait znači da ne čeka da se on šeta kroz brauz, nego program nacrta brauz i trči dalje. Problem je što tekući slog nije druge boje. Save znači da ostavi sliku na ekranu iako je brauz izašao.
baze.podataka.447 ndragan,
/ P.S. Naravno, to ne oslobadja ndragan-a da ispuni preuzetu obavezu i / posalje celokupnu strukturu FOX DBF i ostalih fajlova ... B) Toga ima kol'ko nećeš, a i to čudo što smo sad kopali uopšte nije dokumentovano (16-31. bajt zaglavlja, piše Reserved). Mogao bih možda da fotoklompiram (tamo) par strana pa da pošaljem nekome faks odavde (knjige su mi u Mađarskoj, a tamo imam druga posla, i stvarno nemam kad da prekucavam sitan štep iz Razvijačkih Gajdi /Developers' Guide/). Ima i struktura za Cdx, Scx, Pjx, Frx, Lbx...
baze.podataka.448 ndragan,
/ Prevashodno nisam mislio na to da li postoji indeksni fajl ili ne već, / ako postoji kako se on zove jer nam je jedino ta informacija Piše samo ima/nema, a ako ima, zove se isto kao i baza. Toliko može da stane u ono slobodnog mesta u zaglavlju, inače - gde bi nas odvelo kada bi ime svakog indeksa trpali u zaglavlje. Prvo, bilo bi glomazno - pod FoxproX možeš da imaš do 255 indeksa na jednu bazu. Drugo, beleženje informacija o privremenim indeksima je ne suvišno, nego bi stvaralo dodatne glavobolje. Zato je i dovoljan onaj jedan bajt.
baze.podataka.449 max.headroom,
Još malo o FoxPro-u. Ponosne vlasnike paketa ovo što sledi ne bi trebalo previše da tangira, jer je tekst napisan sa ciljem da one, koji još nemaju Fox, uputi u mogućnosti primene Windows verzije. Sve što sledi uzeto je iz ĐFOXPROWĐGOODIESĐFOXTOOLS direktorijuma. Kako korisiti Windows API, i sve što on nudi? Kako koristiti moćne funkcije biblioteka koje upravljaju Windows-om? Na ova pitanja Microsoft ne nudi direktan odgovor (bar ga u FoxPro help-u nema), ali se pozivaju na određene reference (knjige, source-ove), i lično priznaju da pravih "mahera" na ovom polju ima malo, te da pomenuti nisu bliski ideji da svoja znanja šire dalje. Zato i postoji premalo primera, ali se nadam da su dovoljni da pokažu gotovo neiscrpne mogućnosti koje ovakav pristup nudi. *-------------------- dialer.prg ------------------------ * Jednostavan programčić koji šalje podatke na COM port, a koristi * FOXTOOLS.FLL biblioteku za generički DLL pristup. FOXTOOLS bibl. nudi * dve izuzetno korisne f-je: RegFn() i CallFn(). Kao što se iz primera * da videti, RegFn() (registrovanje f-je) vraća integer vrednost kao * pointer na Windows API funkciju, a koja se poziva preko f-je CallFn() * sa odgovarajućim brojem parametara (prvi param. je obavezno pointer). * * Dakle, prvo u razmatranje uzmemo biblioteku FOXTOOLS.FLL... SET LIBRARY TO SYS(2004)+"foxtools.fll" ADDITIVE * Potom u promenljive OPENCOMM (ptr. na f-ju koja "otvara" serijski * port). WRITECOMM (ptr. na f-ju koja piše na serijski port), i * CLOSECOMM (ptr. na f-ju koja "zatvara" COM-port) Fox smešta potrebne * vrednosti... Funkcija REGFN() ima sledeće parametre (sve Char tipa): * * REGFN(ImeFunkcije, TipoviArgumenata, TipRezultata, ImeDLL) * * Ako je f-ja registrovana, rezultat je referenca na f-ju (pointer), a * ako nije ispisuje se message-box i REGFN() vraća -1. * * Tipovi argumenata su: * I - Integer * L - Long * C - Character string * F - Floating point number * D - Double precision number opencomm = REGFN("OpenComm", "CII", "I") writecomm = REGFN("WriteComm", "ICI", "I") closecomm = REGFN("CloseComm", "I", "I") * Otvaranje COM-porta zahteva i nešto preciziranja (COM1 promenljiva), * dok se u promenljivu S smešta string koji će na serijski izlaz biti * odaslat... com1 = CALLFN(opencomm, "COM1:", 100, 100) s = "ATDP 648422" + CHR(13) * Pisanje na COM1: (u pitanju je promenljiva S, tj. "ATDP 648422")... =CALLFN(writecomm, com1, s, LEN(s)) * Posle pritiska na bilo koji taster modem ide off-line... WAIT WINDOW "Pritisni bilo koji taster za hang-up" s = "ATH0" + CHR(13) =CALLFN(writecomm, com1, s, LEN(s)) * COM-port se zatvara... =CALLFN(closecomm, com1) * Kao i biblioteka koja nam više neće trebati... RELEASE LIBRARY SYS(2004)+"foxtools.fll" * EOF dialer.prg *--------------------------------------------------
baze.podataka.450 ndragan,
/ prvo DEFINE, potom crtkaš, pa tek na kraju ACTIVATE? Dobiješ utisak da / ga odmah "baci" na ekran :) Save window trtmrt to memo mrttrt... a posle sam restore i getovi - ostatak crteža se pojavljuje kao puf iz oblačka.
baze.podataka.451 ndragan,
/ vodu. Recimo, trenutno sam u "pohodu" za 'Incremental / Search' rutinom. Ako je to ono na šta ja mislim, napisao sam to još za 1.02 i sad sam već negde na verziji 4.92, al' nije šarevare (moram i ja od nečeg da živim). Mogao bih eventualno da bačim ovamo par principa kako bi to moglo da se napravi, pa se dalje snalazite sami. BTNJ, jel' zna neko neki trik da tekući slog ostane ofarban kad se da Browse NoWait? Jednostavno mu se ofarba bojom za ostale slogove čim to više nije aktivan prozor (a nowait upravo to uradi - deaktivira prozor).
baze.podataka.452 ndragan,
/ VEZA: C => FOXPRO for WIN (1/4) Štos za DOS verziju je da se prave .PLB umesto .FLL bibliotetaka, inače je mehanizam isti i strukture parametarskih blokova bi trebalo da su iste. Jedino se, valjda, format dobijene bibliotetke razlikuje, a C sors treba da može da je isti. Nisam se nešto udubljivao u to - i ja sam isto C-read-only debil. Svejedno, preporučujem da se koristi FPATH.PLB odnosno FoxTools.fll - ima zgodnih stvari koje dosta skraćuju posao (mada bi ista stvar mogla da se izvede i iz samog foksa, ovako radi brže a i ima manje da se piše). Funkcije koje redovno koristim: JustStem(fname) - daje samo ime fajla (bez nastavka) JustExt(fname) - obratno JustFname(fname) - celo ime fajla bez staze JustPath(fname) - samo staza bez imena fajla AddBs(dirname) - ime direktorija sa forsiranim bekslešom na kraju ForceExt(fname,ext) - onaj fajl samo sa novom ekstenzijom DefaultExt(fname, ext) - onaj fajl samo sa novom ekstenzijom ako je već nema Words(string,/graničnik/) broj reči u stringu. difolt graničnik je chr(32), al može i bilo koji drugi string WordNum(string, rbr, /graničnik/) - iz stringa vadi reč broj rbr (graničnik kao malopre). Ne broje se prazne reči, tj kad između dva graničnika nema ničega to ne računa kao reč. Strfilter(string,filter) - iz stringa izbacuje sve znakove koji se ne sadrže u stringu filter. Tako recimo sa StrFilter("lk jlkjou 4oi3214","0123456789") izbacujem sve što nisu cifre i dobijam "43214".
baze.podataka.453 max.headroom,
> Sećate se Maxovog obećanja da će sve svoje zanimljive > poruke o Fox-u da sredi u fajl? ;) Jao :), u pravu si. Nezgoda je u tome što, kada završim jedan deo, nemam srca a da ga odmah ne spustim na Sezam (sve mislim - nekome će zatrebati, a zašto bi čovek čekao sledeću godinu da pročita zanimljivost). A još je veća nezgoda što će Microsoft izbaciti neki sledeći Fox :) pa će napisano, dotle, izgubiti na vrednosti. Ma i ovako imamo (uslovno rečeno) sve na jednom mestu, pa ako se ipak ispostavi da previše tekstualnih poruka nekome smeta - pakovaću tekst u fajlove.
baze.podataka.454 max.headroom,
> Save window trtmrt to memo mrttrt... a posle sam restore i > getovi - ostatak crteža se pojavljuje kao puf iz oblačka. Vidiš, zanimljivo :) Probaću obe varijante (486/66) pa ću ostaviti brojčani utisak.
baze.podataka.455 max.headroom,
> Svejedno, preporučujem da se koristi FPATH.PLB odnosno > FoxTools.fll - Manimo se toga, pogledaj moju poruku pod 11.449 i - plačimo :) Znam, niko od C-developera za Windows-e neće da kaže ništa konstruktivno... a jedino oni imaju brda literature neophodne za neke interesantne zahvate.
baze.podataka.456 max.headroom,
VEZA: C -> FOXPRO FOR WIN Deo 1. (Inkrementirano pretraživanje) (Upotreba Windows .DLL biblioteka) Kao što sam ranije napomenuo, API može poslužiti da bi se poboljšale performanse FoxPro rutina. Ali, pre svega, treba objasniti nešto i o samoj mehanici Fox-a: Prvo, to je hibrid između kompajliranih (compiled) i interpretiranih (interpreted) jezika. Kod, koji se prvobitno u njega unese (.PRG) mora prvo biti kompajliran u .FXP oblik. .FXP oblik programa je vrlo kompa- ktni set instrukcija nazvan "p-code"; FoxPro učitava i interpretira svaku (odn. onu do koje je izvođenje došlo) liniju takvog koda. Između dva izvođenja linija koda, Fox proverava i razna druga zbivanja ("events", što bi se narodski reklo), kao što su kliktanje miša i pritisak na neki od tastera. Glavna kontrolna petlja koja kontroliše izvođenje programa i eksterna zbivanja (events) naziva se "event loop", dok deo programa koji učitava i izvršava source nosi naziv "inner loop interpreter". Koristeći API, moguće je uneti vlastite procese u pomenutu Fox-ovu "event loop". Takvi procesi najčešće vrše skeniranje nekog od tastera, praćenje klika tastera miša, kontrolu serijskog porta, kao i razne druge lepote. Moguće je navesti Fox da pokreće vaš proces pri svakoj iteraciji "inner loop interpreter"-a, ili ga navesti da proces startuje samo za vreme "idle time" perioda - tj. za vreme kada Fox očekuje neki unos sa tastature. Tekst koji sledi je detaljnija razrada navedenog... DODAVANJE PROCESA U "EVENT LOOP" Fox-ov Browser je vrlo moćno oružje - on može poslužiti i kao tabela za unos podataka, i kao alat za prikazivanje istih. Ako je baza velika, humano je korisniku obezbediti metod (ako zanemarimo zamorni PageDn) kojim će stizati do željenog zapisa. Najjednostavnija metoda je programirati 26 ON KEY LABEL tastera koji će čekati da korisnik pritisne jednog od njih i skočiti na zapis koji počinje željenim slovom. Metoda je OK, ali je delimično neprecizna. Bolje rešenje je takozvano inkrementirano pretraživanje, što podrazu- meva sledeći sistem: što se unese više slova, pointer na traženi zapis je sve bliže cilju (eno ga živi primer u NCD-u). Šta bi bilo zanimljivo za razmatranje? Pa, možda da se jednostavno omogući nekoliko GET polja za slova, poređana jedno do drugog - pa svako GET polje poseduje odgovarajuću VALID funkciju koja vrši SEEK. Kursore je moguće naštelovati (ON KEY LABEL) tako da, ako je korisnik blizu traženog polja, oni dobijaju svoju prvobitnu funkciju u Browse- ru, da bi mogla da se uradi brža korekcija položaja u bazi. Pošto je moguće koristiti i miša, dovoljno je pritisnuti Enter ili desni klik i pretraga se obustavlja, a Browse se gasi. Sledeća mogućnost je upotrebiti INKEY() f-ju da bi se "hvatale" vre- dnosti pritisnutih tastera, što radi brže od pomenute GET metode. Jedini je problem što se preko INKEY() ne može registrovati desni klik, ali je moguće napisati API rutinu koja proverava status miša i vraća logičku vrednost. Medžutim ;) tuj stajem sa razmatranjima i šaljem biblioteku L3INCR.FLL koja koristi API da bi dodala novi proces u "event loop" za vreme Browse-a. Dakle, vidi se normalni Browse, ali se skeniraju tasteri od A do Z i od 0 do 9, vrši se SEEK i radi se radnja. Da bi se skeniralo desno dugme miša, koristi se f-ja RMDOWN(). Evo, u neku ruku skraćene verzije L3INCR.FLL l3srch.fll
baze.podataka.457 max.headroom,
VEZA: C -> FOXPRO FOR WIN Deo 2. /* L3INCR.C Rutinice: skeyinit - start skeniranja tastera i SEEK-a skeykill - zaustavljanje skeniranja */ #include <dos.h> #include <pro_ext.h> /* Globalne promenljive */ int skeyid; Value val; MHANDLE mh; char *cp; Point pt; WHANDLE wh; /* Predefinicija funkcija */ void dbback(); void dbseek(char); FAR SKHandler (WHandle, EventRec FAR *); /* Inicijalizacija rutine */ void FAR skeyinit(ParamBlk FAR *parm) š wh = _WOnTop(); /* Pointer na prozor na vrhu */ mh = _AllocHand(100); /* Rezerviši nešto memorije */ _HLock(mh); /* Zaključaj rezervisanu memoriju */ val.ev_type = 'C'; /* Definisanje stringa koji se traži */ val.ev_length = 0; /* ...i to kao string dužine 0 */ val.ev_handle = mh; /* Pointer na memoriju */ cp = _HandToPtr(mh); /* Određivanje stvarnog pointera */ /* Sada kačimo naš novi "event-nadler" */ skeyid = _ActivateHandler(SKHandler); ć /* Rutina koja završava sa pretraživanjem */ void FAR skeykill(ParamBlk FAR *parm) š _HUnlock(mh); /* Otključaj... */ _FreeHand(mh); /* ...i oslobodi memoriju */ /* Uklanjanje "event-handler"-a */ _DeActivateHandler(skeyid); ć /* Evo i pravog "event-handler"-a... */ /* ...a koji, trenutno, prati samo pritisak na određene tastere */ FAR SKHandler(WHandle SWin, EventRec FAR *ev) š /* Ako je rezultat YES, FoxPro će znati da je došlo do pritiska... */ /* ...ili, ako je NO, treba obraditi tekući event */ int retval = NO; if (ev->what == keyDownEvent ) š /* Proveri da li je to jedan od "legalnih" karaktera; velika slova */ if ((ev->message >= ' ' && ev->message < 'a') đđ (ev->message > 'z' && ev->message <= 0x7E)) š dbseek(ev->message); retval = YES; ć else š /* Proveri jesu li mala slova */ if (ev->message >= 'a' && ev->message <= 'z')) š dbseek(ev->message & 0xDF); /* Konvertuj u velika slova */ retval = YES; ć else š /* Takođe, izvrši proveru BS-a */ if (ev->message == 'Đb') š dbback(); retval = YES; ć ć ć ć return retval; ć /* Ova rutina sastavlja SEEK string konkatenacijom i vrši ispis */ /* istog u prozoru na vrhu. */ void dbseek(char chr) š val.ev_length += 1; cpŠval.ev_length-1Ć = chr; /* Dodaj karakter stringu */ _DBSeek(&val); pt.h = val.ev_length; pt.v = 0; _WPosCursor(wh,pt); /* Pozicija kursora u prozoru */ _WPutChr(wh,chr); /* Ispis karaktera u prozoru */ ć /* Sledeća rutina briše, ako je potrebno, 1 karakter skraćujući */ /* SEEK string i ponovno aktivirajući pretragu. */ void dbback() š if (val.ev_length > 0) š pt.h = val.ev_length; pt.v = 0; _WPutCursor(wh,pt); _WPutChr(wh,' '); /* Briše poslednji uneti karakter*/ val.ev_length -= 1; _DBSeek(&val); /* Ponovni SEEK stringa */ ć else /* Nema karaktera za brisanje... */ _PutChr(7); /* ...pa zvrcni jedared */ ć FoxInfo myFoxInfoŠ Ć = š š"SKEYINIT", skeyinit, 0, ""ć, š"SKEYKILL", skeykill, 0, ""ć, ć; FoxTable _FoxTable = š (FoxTable FAR *)0,sizeof(myFoxInfo)/sizeof(FoxInfo),myFoxInfo ć;
baze.podataka.458 max.headroom,
VEZA: C -> FOXPRO FOR WIN Deo 3. Da bi se ovaj program koristio, potrebno je definisati i aktivirati prozor u kome će se ispisivati sve što se unosi sa tastature. Tada se poziva SKEYINIT() koji uključuje detektor, a potom se aktivira normalni BROWSE. Posle korištenja nije na odmet :) rutinu isključiti pomoću SKEYKILL(). Primer: č 23,1 SAY PADC(" Pritisni <ENTER> za izbor",80) COLOR GB+/B SET LIBRARY TO l3incr && Kačenje API rutine USE laser ORDER utitle && Pažnja: tag je UPPER(title) DEFINE WINDOW test FROM 4,15 TO 6,60 ; SYSTEM TITLE "Pretraživanje po naslovu" ACTIVATE WINDOW test =skeyinit() && Inicijalizacija detekcije DEFINE WINDOW brow FROM 6,15 TO 20,60 SYSTEM ON KEY LABEL ENTER KEYBOARD CHR(23) ON KEY LABEL RIGHTMOUSE KEYBOARD CHR(23) BROWSE FIELDS title:42 WINDOW brow ON KEY STORE LASTKEY TO lk =skeykill() && Isključivanje detekcije RELEASE WINDOW test CLEAR IF lk = 27 RETURN "Pritisnut ESCAPE" ELSE RETURN title ENDIF *---------------------------------------------- PETLJE KOJE PODRAZUMEVAJU "čEŠĆA" IZRAžUNAVANJA Kao što je prethodno napomenuto, FoxPro koristi "inner loop interpre- ter" za čitanje i izvršavanje koda. Zbog toga, nezavisno od instrukci- je, svaka izvršna komanda poseduje određeno "zaglavlje" - to podrazumeva i konstrukcije petlji tipa SCAN/ENDSCAN i FOR/ENDFOR. Takvo "zaglavlje" postaje izuzetno važno kod petlji koje zahtevaju česta matematička izračunavanja. Sa druge strane, "zaglavlja" konstrukcija petlji u C-u su najčešće zanemarljive kompleksnosti, pa su rutine koje pretpostavlja FoxPro česti kandidati kod C-a. U većini slučajeva API rutina se izvršava znatno brže (često - znatno ZNATNO brže) od njenog ekvivalenta u Fox-u. Da bi se ovo demonstriralo, sledeći program je napisan u FoxPro-u i izračunata mu je brzina, a potom je napisana u C-u i, koristeći API, ponovo izvršena pod Fox-om. Program, nazvan KAMATA.PRG, izračunava totalnu akumuliranu kamatu za 1000 DIN uplaćenih na račun banke koja dnevno isplaćuje kamatu u vrednosti od 10% od uplaćene sume, oročene na 100 godina. Evo FoxPro koda: rezultat = 1000 && Početni bilans dnrata = (10/100) / 365 && Dnevna kamata FOR godina = 1 TO 100 FOR dan = 1 TO 365 rezultat = rezultat + dnrata * rezultat && Dodaj kamatu ENDFOR ENDFOR Program je pokrenut i brzina mu je izmerena na 486/33 mašini sa podo- sta RAM-a. Izvršen je za 2.13 sekundi. Zatim je unutrašnja petlja napisana u C-u i pozvana 100 puta. To izvršenje je trajalo 0.309 sekundi, pa je povećanje faktora brzine iznosilo 6.89. Zatim je i spoljnja petlja napisana u C-u, pa se čitava API rutina pozivala samo jednom. To je trajalo čitave 0.283 sekunde, što je donelo povećanje brzine od 7.53. To bi značilo uštedu od skoro 52 minute računanja koje bi, normalno, trajalo sat vremena! Međutim, postoji i sistem u kome API usporava rad, jer sam poziv API rutine pretpostavlja čitanje određenog "zaglavlja", jer je FoxPro 32-bitni, extended mode program, dok se API rutine izvršavaju u 16-bitnom ili standardnom modu. Tako, svaki poziv API-ja natera procesor da pređe iz protected moda u standardni režim, i nazad. Da bih ovo ilustrovao, uzeo sam samo onu unutrašnju komandu petlje ("Dodaj kamatu") koja preračunava dnevnu kamatu, napisao je u C-u, i pozvao 36500 puta. To je trajalo 9.199 sekundi, što je sporije od FoxPro-ovog koda za faktor od 4.3 Evo i tabele:
baze.podataka.459 max.headroom,
VEZA: C -> FOXPRO FOR WIN Deo 4. Pozivi API-ju ----------------------------------------------------- Tip Puta Izmereno Faktor poziva pozvan vreme ----------------------------------------------------- FoxPro ***** 2.130 1.00 Dnevna kamata 36500 9.199 0.23 Kamata za jednu godinu 100 0.309 6.89 Kamata za 100 godina 1 0.283 7.53 ----------------------------------------------------- Dakle, rešenje za osveženje: koristite API f-ju što je ređe moguće, a u nju strpajte koda što je više u vašoj moći. Nemo' da vas mrzi da pravite uporedne benchmark testove. PRISTUPANJE MATEMATIžKOM KOPROCESORU Da ste probali dati primer (KAMATA.PRG) na vašoj mašini, pogotovo ako je to 386-ica, dobili bi ste čak i bolje rezultate. Kompjuter koji je uradio prikazana izračunavanja, 486-ica, poseduje DX procesor sa ugrađenim numeričkim koprocesorom. FoxPro pristupa numeričkom koproce- soru (kao što to čini i Windows), što mu daje kosmičku brzinu. Ako koristite /fpc svič u WCC komandnoj liniji, sve API rutine neće koristiti matematički koprocesor već pre 80387 softverski emulator. Dakle, korištenjem /fp87 ili /fp387 sviča, preusmeravate rutine za izračunavanje direktno na koprocesor. Paz'te sad: pomenuta rutina je re-kompajlirana sa /fpi387 svičem i potom testirana. Rezultat je neverovatan: vreme izvršavanja je 0.36 sekundi, što daje faktor ubrzanja od 59.17. Iako postoje određene varijabilnosti zbog Windows multitaskinga, faktor ubrzanja se uvek kretao zdravo preko 50. Predlog: ako vaša mašina poseduje numerički koprocesor, a želite da postignete slične rezultate, morate obratiti pažnju na dve začkoljice. Prvo, iako možete mešano koristiti rutine kompajlirane sa /fpc svičem (samo emulator) ili /fpi87 odn. /fpi387 (samo koprocesor), ne možete koristiti /fpi svič. /fpi svič omogućava kodu da odluči, u momentu izvršavanja, koju biblioteku da koristi, i nije kompatibilan sa API-jem. Ako je potrebno da napišete rutinu koja će raditi čas ovako, čas onako, najbolje je da je iskompalirate u dve verzije: jednom sa /fpc, a drugi put sa /fpi87, odn. /fpi387 svičem. Koristite _bios_equiplist() da odredite (ne)postojanje matematičkog koprocesora i, shodno tome, pustite prvu ili drugu verziju u pogon. Druga začkoljica se tiče rezultata dobijenih od koprocesora. Ako ga koristite, nemojte upotrebljavati _RetFloat() f-ju da bi vratili rezultate. Ona ne interpretira izlaz iz koprocesora korektno, pa umesto nje koristite _RetVal(). _RetVal() radi potrebna preračunavanja i time vam vraća ispravan rezultat. ADAPTACIJA POSTOJEĆIH DOS PROGRAMA Adaptacija već postojećeg DOS ili Windows programa, da radi u Fox-u, može biti ili izuzetno jednostavna, ili grozomorno komplikovana za izvesti. Kroz primer ću prikazati jedan jednostavan program koji radi OK preko RUN komande iz DOS-a i WIndows-a, dok sada želimo da mu pristupamo direktno iz FoxPro-a. Zašto, uopšte, praviti izmene? Prvo, nije moguće koristiti standardne funkcije za alociranje memorije (npr. malloc()) da bi se sačuvao memorijski blok. Drugo, FoxPro kontroliše svoj vlastiti I/O. Smatra se gotovo nepristojnim pisanje direktno na konzolu, ili pozivanje "tamo nekih" low-level I/O funkcija tipa fopen() ili fwrite() za manipulaci- ju fajlovima. Treće, što su FoxPro-ove mogućnosti debagovanja više ograničene, to će program manje raditi pod našim budnim okom.
baze.podataka.460 max.headroom,
VEZA: C -> FOXPRO FOR WIN Deo 5. Ali, nijedan od pomenutih faktora ne bi trebao da predstavlja pretera- nu brigu. Određene f-je nisu dozvoljene kao API rutine. U svakom slučaju, kada god FoxPro "ukrade" f-ju, postoji odgovarajuća zamena. U najvećem broju slučajeva, konvertovanje postojećih C-programa i njiho- vo startovanje pod Fox-om je, jednostavno, stvar pozivanja druge funkcije. U najgorem slučaju, ova konverzija se svodi na dodavanje jedne ili dve linije dodatnog koda... Pa da ispitamo primer jedne funkcije koja je napisana pod DOS-om, tj. da objasnim postupak njenog uvođenja u FoxPro. To će biti WFCOUNT.C, za jedno sa WENGINE.C: /* WFCOUNT.C Funkcija: wcount - vraća broj reči u fajlu */ #include <stdlib.h> #include <dos.h> #include <pro_ext.h> /* FUNKCIJA WCOUNT Poziva se iz FoxPro-a kao: WCOUNT(filevar) filevar može biti konstanta ili karakter var. Vraća: integer - broj reči u fajlu -1 - što znači "File Not Found" -2 - što znači "Insufficient Memory" */ void far wcount(ParamBlk FAR *parm) š /* Definisanje promenljivih */ FCHAN fh; /* Ptr. na fajl (int), tj. "file handle") */ MHANDLE bmh; char far *buff,fnameŠ40Ć; int retval,filen; struct find_t finfo; /* Naziv fajla */ filen = parm->pŠ0Ć.val.ev_lenght; _MemMove(fname,_HandToPtr(parm->pŠ0Ć.val.ev_handle),filen); fnameŠfilenĆ = 0; /* Dodaj null-terminator */ /* Uzmi veličinu fajla */ _dos_findfirst(fname, _A_NORMAL,&finfo); /* Vidi da li fajl postoji */ fh = _FOpen(fname, FO_READONLY); if (fh < 1) š /* Nedozvoljeni naziv fajla */ retval = -1; /* Kaži: "ne mogu ga naći" */ ć else š /* Naziv fajla je OK */ /* Kreiranje bafera */ bmh = _AllocHand(finfo.size); buff = (char far *)_HandToPtr(bmh); if (bmh < 1) retval = -2; /* Nemaš, ba, memorije */ else š /* Popuni bafer fajlom */ _FRead(fh,buff,finfo.size); /* Pozovi "WENGINE" */ retval = nowords(buff,finfo.size-1); /* Vrati sve na svoje mesto */ _FreeHand(bmh); _FClose(fh); ć ć /* Kaži čoveku šta je tražio */ _RetInt(retval,10); ć #include "wengine.c" FoxInfo myFoxInfoŠ Ć = š š"WCOUNT", wcount, 1, "C"ć ć; FoxTable _FoxTable = š (FoxTable FAR *)0,sizeof(myFoxInfo)/sizeof(FoxInfo),myFoxInfo ć; /* WENGINE.C Ima dva stanja: inword i !inword. Ono što će uraditi sa narednim karakterom zavisi od ovog stanja. Ako je inword, i sledeći karakter je delimiter, wc se inkrementi- ra, i inword se invertira. Ako je !inword, i sledeći karakter nije delimiter, inword se invertira. */ extern int nowords(char far *bf,long sz) š int inword,ix,wc; wc = 0; inword = !delim(bfŠ0Ć) /* Inicijalizuj stanje */ for (ix=0; ix < szl ix++) š if (inword) š if (delim(bfŠixĆ)) š wc = wc + 1; /* Inkrementiraj brojač reči */ inword = 0; /* Invertiraj inword */ ć ć else š /* !inword if (!delim(bfŠixĆ)) inword = 1; /* Invertiraj inword */ ć ć /* endfor */ if (inword != 0 && sz != 0) wc = wc + 1; return wc; ć /* Šta mu dođe delimiter... */ extern int delim(char ch) š return ((ch == ' ') đđ (ch == '.') đđ (ch == ',') đđ (ch == ';') đđ (ch == '-') đđ (ch == '?') đđ (ch == ':') đđ (ch == 13 ) đđ (ch == 10 ) đđ (ch == '!')); ć *---------------------------------------------------
baze.podataka.461 max.headroom,
VEZA: C -> FOXPRO FOR WIN Deo 6. Ovaj primer, tj. brojač reči prvobitno napisan za DOS, podeljen je u dva dela. Prvi deo, koji učitava fajl u memoriju, poziva brojač reči (WENGINE) koji vraća rezultat na konzolu. Pomenuti WENGINE radi i pod DOS-om i pod FoxPro-om. To je nešto kao šablon za pisanje programa koji će raditi pod API-jem, iako se ova tehnika ne primenjuje ako su u problematiku umešane baze ili "event-loop" procesi. Da malo proanali- ziramo program. "DEFINISANJE PROMENLJIVIH" Kao i većina C-programa napisanih za DOS, brojač reči počinje proce- durom main: int main(int argc,char *argvŠ Ć) š FILE *fp; /* Pointer na fajl (struktura) */ Promenljiva argc sadrži broj argumenata, a argv je lista pointera na argumente. Tipično, argvŠ0Ć je pointer na ime programa, a argvŠ1Ć je pointer na prvi argument - u ovom slučaju, na fajl koji nas interesuje. Unutar API-ja, mi pozivamo naše funkcije direktno, koristeći FoxInfo strukturu. Međutim, u FoxPro verziji ovog programa moramo koristiti ParamBlk strukturu da prosledimo naziv fajla u kome će reči biti prebrojane. Kod koji sledi prikazuje kako koristiti ParamBlk strukturu da bi se argument konvertovao u standardni, tzv. "null-terminated" string: void far wcount(ParamBlk FAR *parm) š char fnameŠ40Ć; int filen; filen = parm->pŠ0Ć.val.ev_length; _MemMove(fname,_HandToPtr(parm->pŠ0Ć.val.ev_handle),filen); fnameŠfilenĆ = 0; /* Dodaj null-terminator */ Uočite da ParamBlk struktura NE sadrži string, već samo mem. pointer (u stvari indeks na tabelu sa pointerima). Kao rezultat, potrebne su nam i _HandToPtr() i _MemMove() funkcije da bi konvertovali argument u null-terminated string. Funkcija _HandToPtr() (Handle To Pointer) konvertuje "handle" ('ebem li ga, dođe mi da kažem pointer, a reći ću referenca) u pointer. Funkcija _MemMove() se koristi da bi se iskopirao broj bajtova određen u ev_length elementu u vname promenljivu. FoxPro ne garantuje da će stringovi biti null-terminated (tj. da se završavaju null-bajtom), pa tako moramo da uradimo eksplicitnu null-terminaciju fname stringa. Preporučljivo je (iz zdravstvenih razloga) koristiti _MemMove(), StrCpy() i slične funkcije umesto njihovih DOS ekvivalenata. Te API rutine omogućavaju bolju kontrolu nad memorijom i sređuju još neke "sitne" gadosti. Ako neke vaše rutine koriste pomenute f-je, jednosta- vno ubacite sledeće #define-e na početak vašeg DOS programa, edabi smanjili broj daljih izmena: #define _MemMove memmove #define _MemCmp memcmp #define _MemFill memfill #define _StrCpy strcpy #define _StrCmp strcmp #define _StrLen strlen "LOW-LEVEL I/O PRISTUP FAJLOVIMA" Da bi otvorili fajl u programu napisanom za DOS, definišete pointer na fajl i zatim koristite fopen() da bi mu pristupili. Na primer: FILE *fp /* Pointer na fajl (struktura) */ fp = fopen(argvŠ1Ć, "r"); U API rutini koriste se kanali (FCHAN), koji su ekvivalenti "file handle"-ima, a potom se koristi f-ja _FOpen(). To izgleda ovako: FCHAN fh; /* File Handle (int) */ fh = _FOpen(fname,FO_READONLY) Za svaku low-level I/O rutinu, kao što je fread() ili fwrite(), postoje API ekvivalenti koje bi trebalo koristiti. Može se koristiti i serija #define-a da bi se izvela translacija funkcija za low-level I/O rutine. Funkcije _FOpen() i _FWrite() su identične onima koje se nalaze u samom Fox-u, te, u suštini, file handle brojevi koji se kori- ste pod FoxPro-om su kompatibilni sa onima koje koristi API.
baze.podataka.462 max.headroom,
VEZA: C -> FOXPRO FOR WIN Deo 7. "MEMORIJA" Kao što je ranije napomenuto, ne možete koristiti malloc() da bi reze- rvisali memorijski blok. Umesto toga, koristite sledeći sistem za kreiranje pointera na blok: MHANDLE bmh; char far *buff; bmh = _AllocHand(finfo.size); buff = (char far *)_HandToPtr(bmh); Ako navedeno može garantovati zahtevanu količinu bajtova, _AllocHand() funkcija vraća mem. handle, što je u stvari int. pointer na tabelu. _HandToPtr() funkcija konvertuje mem. handle u pointer. Bitno je zapaziti da FoxPro može da reorganizuje memoriju između dva API poziva, pa je zato potrebno uvek nanovo izdvajati pointer pri svakom takvom pozivu, ili koristiti _HLock() funkciju koja zaključava blok memorije. Kada se završi njegova obrada, upotrebite _FreeHand() f-ju (zajedno sa _HUnlock(), ako je potrebno) da ne bi došlo do "iznenadnog" nestanka preko potrebne memorije. "POZIVANJE WENGINE" Ako su stvari prošle dobro, tj. ako nije nešto palo, puklo, iskočilo gde ne treba, etc, etc, etc, može se pozvati deo programa koji broji reči, i koji je isti i za DOS i za FoxPro. Priznajem, to će raditi samo pod optimalnim uslovima (optimalno: čitaj - zvezde se namestile baš onako kako programer zahteva). Navedeni brojač reči podrazumeva da se fajl, nad kojim se vrši pretraživanje, uvek može držati u memoriji. Ako to ne upali, morate ispitati ulazni stream korištenjem low-level I/O fajl pristupa. U tom slučaju, #define tehnika i dalje može pratiti kod. Poenta je u tome što radimo isključivo testiranje pod DOS-om, gde su nam pri ruci daleko bolji alati za debagovanje nego oni ponuđeni u Fox-u. Možda bi pomogla upotreba f-je _BreakPoint() koja se kači na INT3, i potom manuelno menjanje segmenta i ofseta simbol-tabele iz debagera... Ovde, očigledno, nema tate. "REZULTUJUĆE VREDNOSTI" Veliki broj DOS programa koristi funkcije kao što su printf() da pošalje rezultat(e) na konzolu. Pod FoxPro-om, potrebno je sumirati rezultate u brojeve, stringove, ili kodove, pa ih potom vratiti u Fox koristeću jednu od _RetXXXX() funkcija. Fox ekskluzivno obrađuje ekran i pojma nema šta je gde ispisano. Ako je potrebno vratiti više vredno- sti, jedina tehnika koju bi vredelo primeniti je da se pošalje matrica koristeći call-by-reference pristup, pa da se unesu rezultati upo- trebom _Store() f-je. Ako je rezultat potrebno poslati na ekran, najbolje je koristiti f-je poput _PutChr() i _PutStr(), da bi se štampalo u trenutno aktivni prozor ili na ekran. Takođe, API sadrži sve funkcije neophodne da bi se kreirali, birali, održavali i zatvarali prozori. Imate kompletnu kontrolu nad njihovom veličinom i izgledom. DAKLE... Koristeći FoxPro API, imate odrešene ruke (a šta s njima, pitate se) :) Sa relativno jednostavnim dodacima možete kreirati aplikacije za vaše instrumentalije: raznorazna logovanja putem dodira dlana, kontrolu procesa, robotiku, muziku, čitanje i generisanje bar-koda, spell-checking, pretraživanje teksta, itd. Ako je vašoj API rutini potrebna funkcija već implementirana u FoxPro, možete je dobiti jednostavnim korištenjem f-je _Execute(), odn. _Evaluate() da valida- ciju nekog izraza, pa čak i UDF-e. Sledeće programče kreira prozor, koristi API da ga aktivira i potom koristi INKEY() da sačeka na neki od tastera:
baze.podataka.463 max.headroom,
VEZA: C -> FOXPRO FOR WIN Deo 8. Value Val; _Execute("DEFINE WINDOW t1 FROM 0,0 TO 10,10 DOUBLE SHADOW "); _Execute("ACTIVATE WINDOW t1"); _Evaluate(&Val, "INKEY(1)"); Postoje i specijalni kodovi koje možete koristiti za učitavanje i pozivanje inicijalizacionih i cleanup procedura. Takođe, može se kreirati API rutina koja se poziva i koja se nikada ne vraća u FoxPro, pa se Fox može koristiti kao jedna gigantska biblioteka (koristeći _Execute() i _Evaluate()). Možete i na Mesec, samo da imate krilca :) PRISTUPANJE WINDOWS API-JU Koristeći FoxPro-ov API možete pristupiti i Windows API-ju, koji sadrži preko 700 funkcija za manipulaciju fontovima, grafikom, itd. Windows omogućava specifičnu upotrebu rutina iz biblioteka nazvanu Dynamic Link Libraries (.DLL fajlovi), i njih je potrebno učitati samo jednom. Potom možete odlučiti da li pojedini delovi odgovarajuće biblioteke zahtevaju odvajanje dela memorije, odn. da li takva me- morija može da se deli. FoxPro for Win koristi .FLL fajlove, koji su, jednostavno, specifičan oblik .DLL fajlova. Koristeći .DLL mehanizam, .FLL fajlovi se mogu učitati i prikačiti na druge biblioteke. Mogućnošću da pristupite Windows API-ju, automatski dobijate odrešene ruke za promenu MessageBox-a i ChangePrinter dijaloga. Uz to idu i grafika, fontovi, multimedia, usluge printera, itd. Postoje dva načina da pristupite Windows API-ju. Prvi je da koristite .FLL nazvan FOXTOOLS.FLL koji stiže uz FoxPro for Win. Drugi je da napišete vlastiti ekvivalent FOXTOOLS.FLL-a u C-u. FOXTOOLS.FLL se nalazi u ĐGOODIES pod-direktorijumu, koji se kreira kada se pokrene ALLUNPAK.BAT (ili kako se već zove ona gomila upako- vanih bitnih mapa i ostalih sitnih zezalica). Sa učitanom bibliotekom, koristeći funkcije RegFn() i CallFn() pristupate Windows API f-jama. Jedina zabrana koja važi je da pozivane funkcije moraju imati parame- tre integer, long, float, double, char ili string tipa, a mogu se predavati bilo call-by-value, bilo call-by-reference motodom. Evo primera pristupanju MessageBox-a: SET LIBRARY TO foxtools tralala = RegFn("MessageBox", "ICCI", "I") Lista parametara se interpretira na sledeći način: funkcija MessageBox koja ima četiri argumenta: integer, string, string i integer. Rezultat je integer tipa. Funkcija se poziva korištenjem CallFn() f-je: odgovor = CallFn(tralala,0,"Brisanje svih fajlova?","Pažnja",36) Onaj 36 bit-kodirani parametar govori MessageBox-u da ponudi samo odgovore Yes i No, i da prikaže ikonicu sa znakom pitanja. FOXTOOLS može poslužiti i za menjanje izgleda kursora, iznalaženje tekućeg direktorijuma, manipulaciju nad WIN.INI fajlom, promenu default printera i štošta drugo. NESTANDARDNI POZIVI Ako ste željni pisanja potrebnog koda, možete koristiti bilo koju funkciju iz bilo koje .DLL biblioteke, ali to, naravno, važi samo za one funkcije koje ne odgovaraju zahtevima FOXTOOLS.FLL. Dakle, prvo je potrebno napisati neophodni pomoćni kod u C-u, da bi se pristupilo .DLL fajlu. Potom se poziva C Windows funkcija LoadLibrary() koja proverava da li je željena .DLL već učitana i, ako nije, učitava je sa diska. Potom se poziva Windows funkcija GetProcAddress() da bi se pronašla i adresa željene funkcije. Odatle je sve lako. Na primer, možete pozvati ChangeFont dijalog na sledeći način: LOGFONT lf; CHOOSEFONT cf; void NewFont(ParamBlk FAR *parm) š HANDLE hLibrary; FARPROC fnCM; char szCommNameŠ40Ć; /* Postavi sva polja strukture na nulu */ memset(&cf, 0, sizeof(CHOOSEFONT)); cf.lStructSize = sizeof(CHOOSEFONT); cf.hwndOwner = 0; cf.lpLogFont = &lf; cf.Flags = CF_SCREENFONTS đ CF_EFFECTS; cf.rgbColors = RGB(0,255,255); /* Svetlo-plava */ cf.nFontType = SCREEN_FONTTYPE; _StrCpy(szCommName,"COMMDLG.DLL"); hLibrary = LoadLibrary(szCommName); if (hLibrary >= 32) š fnCM = GetProcAddress(hLibrary,"CHOOSEFONT"); (fnCM)(&cf); ć return; ć Tako možete koristiti i vlastite .DLL fajlove, koristeći sličan meha- nizam. U narednom jednostavnom primeru šaljemo podatke iz FoxPro pro- grama u Windows "scrolling graph" program. Prvo, kreirate .FLL sa me- morijskim baferom koji ćete puniti iz FoxPro-a koristeći API pozive. "Scrolling graph" program poziva isti .FLL fajl koristeći LoadLibra- ry() funkciju, i potom čita sadržaj bafera u svoju vlastitu memoriju (ond. rezervisani blok). Evo source-a: /* DATAPROC.C Funkcija: dataproc() */ #include <windows.h> #include "pro_ext.h" int idatŠ500ĆŠ4Ć; /* Bafer za transfer */ void far dloader(ParamBlk FAR parm*) /* Učitava bafer u FoxPro */ š int i = parm->pŠ0Ć.val.ev_long; int j = parm->pŠ1Ć.val.ev_long; idatŠiĆŠjĆ = parm->pŠ2Ć.val.ev_long; ć int FAR _ _export PASCAL uldr(int i, int j) /* Prazni bafer */ š return idatŠiĆŠjĆ; ć FoxInfo myFoxInfoŠĆ = š š"DLOADER", dloader, 3, "I,I,I"ć, ć; FoxTable _FoxTable = š (FoxTable FAR *)0,sizeof(myFoxInfo)/sizeof(FoxInfo),myFoxInfo ć; *-------------------------------------------------------------- Kod potreban da se učita u ovu biblioteku iz Windows funkcije je sli- čan prethodnom: dll = LoadLibrary("DATAPROC.FLL"); if (dll >= 32) š DataProc = GetProcAddress(dll,"uldr"); /* F-ja za transfer */ if (DataProc == NULL) MessageBox(NULL,"Dobili ste NULL","DataProc Address",MB_OK); else š for (i=0; i<500; i++) for (j=0; j<4; j++) idatŠiĆŠjĆ = (DataProc)(i,j); ć FreeLibrary(dll); ć *--------------------------------------------------------------- Nadam se da niste propustili da shvatite da FoxPro for Win omogućava kreiranje Win-funkcijski dobro podržanih aplikacija (ako ništa drugo, tj. ako u posedu nemate LCK, zadajte SET LIBRARY TO FOXTOOLS i kopajte po literaturi. Najzad, sedamstotinak funkcija Windows .DLL-a nije za bacanje) :)
baze.podataka.464 dr.grba,
Pitanje za foksovce, stvar koja me je totalno zbunila i zapanjila: Šta bi mogao biti razlog da instalirani SHARE na mašini izaziva pad FoxBase+ programa? Kakva glupost u programu mora postojati, pa da se program pobuni? BTW, nema nikakve mreže. Share je instaliran zbog testiranja OLE 2.0 podrške u WIN programima.
baze.podataka.465 mdrazic,
> Šta bi mogao biti razlog da instalirani SHARE na mašini izaziva pad > FoxBase+ programa? Kakva glupost u programu mora postojati, pa da se > program pobuni? Otvaraš li istu tabelu u dve radne oblasti? Ako je to, onda pada ako otvaraš ekskluzivno. To prolazi bez share, a sa njim neće jer to ovaj program zabranjuje (kao što ni na mreži iz istih razliga neće raditi). Izlaz iz ove situacije je da otvaraš tabele u shared modu i tražiš dozvole pisanja (lock) kada išta menjaš. Takođe je ovo zgodno ako ne želite da neko koristi vaš program na mreži ali ćete imati muke sa korisnicima kojima kojekakvi instalacioni programi 'poture' share u sistemske fajlove. Milan
baze.podataka.466 misa.m,
FoxPro 2.6 for UNIX. Izgleda da je MS napravio zaista lep paket za rad pod UNIX-om. Ima se utisak da radite pod DOSom, sve radi identično, boje, miš, tastatura,... Normalno sve ovo važi za rad na konzoli. Za terminale je već malo komplikovanije. Instalacijom dobijate i nekoliko emulacija: wy60fox,wy60-25fox,wy60fox-pc, wy325fox,wy325-25fox,wy325-25wfox (132*25). Fox pored TERM varijable čita i FOXTERM tako da dozvoljava da simultano koristite dve emulacije, jednu u foxu i drugu nakon poziva nekog drugog unix programa (RUN program). Fox for DOS aplikacije rade direktno ako u sebi nemaju DOS specifičnih komandi, izgleda da je kod binarno kompatibilan. Postoji i posebna komanda "proget" (instalira se u /usr/bin), koja se može pozvati nezavisno ili sa RUN, za transfer DOS aplikacije. Zadajete samo direktrijum a komanda na osnovu pronađenih ekstenzija obavi odgovarajući transfer (ASCII ili binary). Uz poruku je prikačena readme datoteka. fpu26.arj
baze.podataka.467 ndragan,
/ s = "ATDP 648422" + CHR(13) Za čitaoce sa crnobelim televizorima, linija glasi / s = "ATDP ,,,011648422" + CHR(13)
baze.podataka.468 ndragan,
Evo, da odužim reda, ono što sam obećao (jesam li, zaista, nešto se ne sećam... mora da sam bio slabo koncentrisan, tako reći razblažen): - Struktura zaglavlja .dbf fajla - Struktura .fpt fajla - Struktura .idx fajla (nekompaktnog) Prekucato iz Razvijačkih Gajdi od Fp2.6. Tekst je rađet u 852, mrzelo me da butiram rodni mi juski/b015 koktel (besplatna reklama za NkBoga, ¸ß˛ ň˘°ńߢ), pošto je tog trenutka TArva za drugom makinom nešto radio, a mi smo jedan drugom serveri (jel' to neki rod, sinko?), te - ili iskonjvertujte, ili se oslonite na to da je skoro sve na engleskom (ima 6 naših slova u texsztu). Eh, da - u prvoj tabeli brojke sam prevodio na heks (real programmers...) ali me posle mrzelo da pretvaram 235 i slično iz glave, a baška još da tražim heks kalkulator, tako da su brojke u ostalim tabelama dekadne. dbfstru.zip
baze.podataka.469 zzk.,
> Šta bi mogao biti razlog da instalirani SHARE na mašini izaziva pad > FoxBase+ programa? Kakva glupost u programu mora postojati, pa da se > program pobuni? BTW, nema nikakve mreže. Share je instaliran zbog > testiranja OLE 2.0 podrške u WIN programima. Nisi opisao kog tipa je ispad pa nisam siguran da ce ovaj odgovor pogoditi u metu, ali mozda posluzi onima kojima se desi ono sto je mene jednom namucilo: U config.sys stavljamo ono cuveno FILES da bi nase aplikacije radile sa odredjenim brojem fajlova vecim od podrazumjevajuceg. Za dalje razmatranje je bitno da se za svaku datoteku trosi 48 bajta RAM-a. Programi koji pri instalaciji automatski ubace SHARE u autoexec, ubace ga bez parametara, tako da on obezbjedjuje 20 zakljucanih slogova i 2048 bajta RAM-a za datoteke. (e tu klopara :) ) Dakle, ako tvoja aplikacija radi sa vecim brojem fajlova moras u autoexecu SHARE pokrenuti sa parametrom /F:broj bajtova. Inace, SHARE bez parametara (znaci sa nedovoljno odvojene memorije) ne smeta kada se masina loguje na mrezu.
baze.podataka.470 max.headroom,
Mhm, radim jednu aplikaciju u Fox-u za Win, pa mi neki zlonamerni čika kaže da želi da vidi naša slova u menijima (a ja lepo isplanirao nazive barova tako da naša slova niti ne vidi, ali, eto - on hoće da se jedna stavka zove tako i nikako drugačije). Stoga, ima li neko ideju gde naći system font sa našim slovcima po XY rasporedu? (poželjno - na Sezamu)
baze.podataka.471 mzdravkovic,
Da li se neko sretao sa sledecim problemom. U radu sa bazama pod windows-om (DBASE for win i DB-fast), slike koje su ubacene kao neko polje u bazi, nemogu kasnije da se prikazu u svojim normalnim bojama. Naime, pri kasnijem pozivu slike, ona ima neku svoju paletu boja ili jednostavno smanji broj boja. U svakom slucaju kvalitet slike je nikakav. Zasto baze pod windows-om gube informacije o bojama u slici ?
baze.podataka.472 dr.grba,
>> Dakle, ako tvoja aplikacija radi sa vecim brojem fajlova moras u >> autoexecu SHARE pokrenuti sa parametrom /F:broj bajtova. Aplikacija nije moja, ali hvala na odgovorima.
baze.podataka.473 stosic,
> Da li se neko sretao sa sledecim problemom. > U radu sa bazama pod windows-om (DBASE for win i DB-fast), slike koje su > ubacene kao neko polje u bazi, nemogu kasnije da se prikazu u svojim > normalnim bojama. Naime, pri kasnijem pozivu slike, ona ima neku svoju > paletu boja ili jednostavno smanji broj boja. U svakom slucaju kvalitet > slike je nikakav. Zasto baze pod windows-om gube informacije o bojama u U koliko boja su slike snimljene? Skoro sam pravio jednu aplikaciju u Visual Basic Proffesional v3.0. BMP slike (snimljene u 16 boja) su citane iz baze Access v1.1 i bile su, blago receno, ocajne. Kada sam ih ponovo snimio u 256 boja sve je bilo OK.
baze.podataka.474 djelovic,
> BMP slike (snimljene u 16 boja) su citane iz baze Access v1.1 i bile su, > blago receno, ocajne. Kada sam ih ponovo snimio u 256 boja sve je bilo > OK. Razlicite palete.
baze.podataka.476 mzdravkovic,
>>> normalnim bojama. Naime, pri kasnijem pozivu slike, ona ima neku >>> svoju paletu boja ili jednostavno smanji broj boja. U svakom >>> slucaju kvalitet slike je nikakav. Zasto baze pod windows-om >> gube informacije o bojama u >> >> U koliko boja su slike snimljene? >> Skoro sam pravio jednu aplikaciju u Visual Basic Proffesional >> v3.0. BMP slike (snimljene u 16 boja) su citane iz baze Access >> v1.1 i bile su, blago receno, ocajne. Kada sam ih ponovo snimio u >> 256 boja sve je bilo OK. Slike sa kojima sam radio su u 256 boja, i normalno je da svaka od njih ima svoju paletu. Od windows-a ocekujem da procita paletu slike koje ce da prikaze, a ne da prikazuje sliku u nekoj svojoj paleti boja. Isti problem sam bojama mi se javljao i kada je windows bio u nekom od hi-color rezima.
baze.podataka.477 tolja,
Ima li neko informacije o problemu koriscenja SPOOL-era pod FoxPro 2.0KKkada radi pod Novell 4.01. Komanda SET PRINTER TO ĐĐSPOOLERĐ... ne vrsi posao jer ne postuje oznaku forme, broj kopija itd. Dakle, kako u FoxPro 2.0 resiti problem stampe na mreznom stampacu pod Novel 4.ll 4.01 ??
baze.podataka.478 max.headroom,
> Ima li neko informacije o problemu koriscenja SPOOL-era > pod FoxPro 2.0KKkada radi pod Novell 4.01. Komanda SET > PRINTER TO ĐĐSPOOLERĐ... ne vrsi Primetio sam isti problem, i pošto sam bio prinuđen da stvar rešim brzo, napisao sam sitnu funkciju koja je sve to radila jednostavnim štampanjem u fajl (REPORT FORM TO file) i potom slanje istog na LPT2. Bez veze :)
baze.podataka.479 smarkov,
> Slike sa kojima sam radio su u 256 boja, i normalno je da svaka od njih ima > svoju paletu. Od windows-a ocekujem da procita paletu slike koje ce da > prikaze, a ne da prikazuje sliku u nekoj svojoj paleti boja. Isti problem > sam bojama mi se javljao i kada je windows bio u nekom od hi-color rezima. Sam po sebi WIN to naravno omogućuje. Pitanje je samo da li softver koji prikazuje sliku koristi tu mogućnost (CreatePalette, RealizePalette sa lokalnom paletom). Lako je napraviti WIN programče ili DLL koje će da korektno prikaže BMP. HINT : Postoji primer u WIN3.1 SDK-u, (zove se DIBVIEW) gde su demonstrirane mnoge tehnike u vezi sa BMP-ovima. pozdrav, smarkov
baze.podataka.480 ssava,
Moli se siroki Sezamov auditorijum da po mogucstvu izadje u susret jednom mom drugaru koji radi u DBASE III (jel radi neko jos u ovome) :)))). Da ne 'duljim' evo dole original pitanja, pa saljite savete, mogu i primeri. Opcija RANGE iz naredbe GET u DBASE III, po primeru iz knjige javlja sintaksnu gresku kada se koristi sledeci nacin: @ 12,10 SAY ' poruka ' PICTURE (zeljeni oblik) @ 12,10 GET promenljiva PICTURE (zeljeni oblik) RANGE (low,high) Pozdrav, Sava.
baze.podataka.481 ndragan,
/ Šta bi mogao biti razlog da instalirani SHARE na mašini izaziva pad / FoxBase+ U kom smislu pad? Ono što se može očekivati je da je to čudo pisano kao da je na solo makini, a neke naredbe neće da rade pod mrežom dok se malo ne premundure. Naprimer Select prva Replace druga->polje with trt.mrt neće raditi pod mrežom, jer je, prvo, sintaksa za mrežu 'replace next 1', što izaziva automatsko zaključavanje sloga i otključavanje nakon upisa. Međutim, nikako neće raditi u prethodnom primeru, jer odbija da piše u slogove osim u selektovanoj bazi. Rešenje (ako se radi o ovom što sam napisao) bi bilo 'Exclusive=on' u config.fx (odnosno u config.fp za FoxPro), ili Set Exclusive On negde pre otvaranja bilo kakve baze. Foks inače smatra da je u mreži čim je učitan Share.exe. Simptom: jel' poruka bila 'record is not locked'?
baze.podataka.482 ndragan,
/ Izgleda da je MS napravio zaista lep paket za rad pod UNIX-om. Ima se Jel' šljaka i na divljega zeniksa, linuksa itd? Na šta je sve instalirljiv? žuo sam da se vari samo sa Svetim Krstom (Santa Cruz), pošto je i to čudo vlasništvo malog mekanog, a da se sa ostalima nalazi u stanju blažeg krstaškog rata. Pričaj bre još, ovo čekam već tri godine.
baze.podataka.483 ndragan,
/ ideju gde naći system font sa našim slovcima po XY rasporedu? Skini sa sezama sysfon.zip, on od bilo kojeg .ttf pravi .fot. Naravno, moraš sam da ga instaliraš gde treba. Ja turio Arial CE (ili EE?) i fino radi.
baze.podataka.484 ndragan,
/ je nikakav. Zasto baze pod windows-om gube informacije o bojama u / slici ? Fox4w: vidi help za "set palette" - on ili off zadržava sistemsku paletu odnosno preuzima paletu sa slike (ne znam koje je za on a koje za off).
baze.podataka.485 ndragan,
/ štampanjem u fajl (REPORT FORM TO file) i potom slanje istog na LPT2. Btw, slanje fajla na štampač sam rešavao tako što sam ga slao red po red (kasnije u komadima od 4K) proveravajući printstatus() pre svakog komada. Kasnije, da bih ubrzao posao, otvarao sam štampač sa y=fopen("lpt1",12) tj bez bafera i sa pravom upisa. E, to neće da radi pod novelom 4.01, morao sam da šaljem sa ???.
baze.podataka.486 dr.grba,
>> Rešenje (ako se radi o ovom što sam napisao) bi bilo 'Exclusive=on' u >> config.fx (odnosno u config.fp za FoxPro), ili Set Exclusive On negde >> pre otvaranja bilo kakve baze. Foks inače smatra da je u mreži čim je Videću da li može da pomogne. >> učitan Share.exe. Simptom: jel' poruka bila 'record is not locked'? Mašina je trenutno isključena, pa ne mogu da proverim.
baze.podataka.487 max.headroom,
> Skini sa sezama sysfon.zip, on od bilo kojeg .ttf pravi > .fot. Naravno, moraš sam da ga instaliraš gde treba. Ja > turio Arial CE (ili EE?) i fino radi. Selbstverstaendlich :) Dojurio sam SYSFON.ZIP i nekako doakao fontovi- ma, ali me je "zveknula" ona .obj-ova izvedba internog (programskog) prebacivanja sa jednog sistemskog fonta na drugi :) (u njegovom Sezam Offline Reader-u za Win, SDW-u). Pošto nisam C for Windows programer, tražio sam reference na Windows funkcije koje bi tako nešto omogućile, jer - ne želim da SVAKA aplikacija koristi izabrani YU-system font, već samo moja :) Hmh... mislim da ćemo morati da organizujemo bližu saradnju sa koleza- ma iz PC.PROG/windows. DJelovicu, naš si čovek :)
baze.podataka.488 max.headroom,
> Fox4w: vidi help za "set palette" - on ili off zadržava > sistemsku paletu odnosno preuzima paletu sa slike (ne znam > koje je za on a koje za off). To se i ja spremih da mu kažem, ali mislim da čovek ni ne koristi Fox4Win :) BTW, SET PALETTE ON - uključuje Fox-vu default paletu, dok OFF svič koristi paletu .BMP-a (sve ovo važi i za OLE objekte).
baze.podataka.489 max.headroom,
> č 12,10 SAY ' poruka ' PICTURE (zeljeni oblik) :) Zašto bi karakter poruku formatirao kroz PICTURE opciju? Možda ne navodi dobre template kodove u samoj PICTURE opciji, tj. navodi one koji se ne slažu sa odgovarajućim RANGE vrednostima (različiti tipovi podataka)...
baze.podataka.490 max.headroom,
> E, to neće da radi pod novelom 4.01, morao sam da šaljem > sa ???. Da ga ne bi tako "gnjavio" :), spusti samo gomilu temporary fajlova sa jedinstvenim nazivima u dir (REPORT FORM TO file), pa ih kokni na LPT2 (ili jedan po jedan), sa tim da se brišu posle uspešne štampe. REPORT komanda poštuje definisane printer-kodove i onda kada ih šalje u fajl, i meni do sada nije pravila nikakav karambol (mrežni štampač je HPLJ4). Do skoro sam koristio biblioteku sa f-jama koje proveravaju priner-queue, ali, na žalost, biblioteku pisanu za Win3.1... Posle prelaska na Win4WG, ista je postala delimično neupotrebljiva, plus što mi je ispisivala neku warning poruku pri SET LIBRARY TO tipa "Ova Windows verzija mi je nekako sumnjiva" :( Pošto nemam stalan pristup jedinoj viđenoj verziji Lib. Constr. Kit-a, nisam u stanju da je valjano prekompajliram. P.S. Windows ima onol'ko (500 Fox-u dostupnih) f-ja, a mi se akamo sa ponuđenim polu-rešenjima :) Uskoro nameravam da uzmem kopiju PETZOLD-a sa jednog CD-a, pa da prenesem zanimljivi summary :) Hint: SET LIBRARY TO FOXTOOLS, REGFN(), CALLFN()...
baze.podataka.491 djelovic,
> Hmh... mislim da ćemo morati da organizujemo bližu saradnju sa koleza- > ma iz PC.PROG/windows. Svakako, kolega. Svratite na kahafu :).
baze.podataka.493 gaston,
Hi, ne bih da mnogo smetam, ali imam jedno pitanjce za koje me je, pravo da ti kazem, sramota da ga javno postavim, jer mozda je odgovor ocigledan i pred nosom, ali ja nikako da ga primetim. Kako da otkrijem je li IDX ili TAG u CDX indeksiran po UNIQUE ? Sve sam pokusao, sve funkcije za rad sa indeksima, ali ne ide. To mi treba za jedan mali recnik podataka i program za proveravanje struktura DBF i CDX prilikom otvaranja baze. Pozdrav, Nesa Gaston ş­▄┼]¨÷¨ű ű ű ĆŮřΠ
baze.podataka.494 mdrazic,
> Kako da otkrijem je li IDX ili TAG u CDX indeksiran po UNIQUE ? > > Sve sam pokusao, > sve funkcije za rad sa indeksima, ali ne ide. To mi treba za jedan mali > recnik podataka i program za proveravanje struktura DBF i CDX prilikom > otvaranja baze. Metod 1 (bez menjanja sadržine tabele): Napravi dva indeksa po istom ključu, jedan običan, drugi unique. Zatim uporedi hedere indeksnih fajlova. Mora da to tamo negde stoji kao informacija u vidu nekog bajta. Problemi nastaju sa CDX i TAG-ovima jer treba naći heder. Metod 2 (sa promenom sadržaja tabele, čisto softverski): - Nađi neki ključ koji do tada nije korišćen u tabeli. - Dodaj zapis sa tim ključem - Izbriši zapis (delete) - Dodaj OPET zapis sa tim ključem ali ga ne briši - seek ključ će naći zapis (drugi) u slučaju običnog indeksa, ali ga NEĆE naći ako je indeks unique. Objašnjenje: Kod unique indeksa samo prvi ključ (po fizičkom redosledu iz tabele) ide u index, ostali ne. Index se ne obazire na delete flag pri ažuriranju indeksa, ali se obazire pri pretraživanju. Tako seek nađe PRVI zapis sa tim ključem (koji je brisan), proveri flag, vidi da je brisan, i javi da nema zapisa. Bug or feature? U svakom slučaju, zbog ovoga ne treba koristiti unique! Milan
baze.podataka.495 max.headroom,
Database Related Journal dbms9108.zip
baze.podataka.496 misa.m,
Mali uporedni test prfomanci FoxPro-a 2.6 na tri platforme. Za test je korišćena datoteka artikala sa ukupno 39322 slogova indeksirana po sifri C(9) i nazivu C(30). Ceo test je single-user i obavljen je na Zenith-ovoj mašini: - 80486/66Mh/EISA/8MB/SVGA/SCSI-540MB - MSDOS 6.2, WFG 3.11 CEE, SCO UNIX ** Export/Import i Indeksiranje DOS WIN UNIX ------ ------ ------- Append from SDF Size: 2.649KB Time: 11,640 12,930 11.850 Copy to DELIMITED Size: 2.285KB Time: 15,230 13,240 12.850 Copy to SDF Size: 2.649KB Time: 11,480 12,000 9.900 Append pa Index Size: 2.649KB Time: 43,490 33,050 36.340 Append sa CDX Size: 2.649KB Time: 69,240 55,240 134.330 ------------------------------------------------------------- ** Upiti i sumiranje (Uslov za izdvajanje cena > 100 što kao rezultat izdvaja 3373 od 39322 slogova). Testirana je prvo tabela sa dodatim tagom u CDX po ceni a zatim bez njega. Indeksiran po ceni Bez indeksa po ceni -------------------------- -------------------------- DOS WIN UNIX U-SHR DOS WIN UNIX U-SHR ----- ----- ----- ----- ----- ----- ----- ----- Select 0,030 0,110 0.100 0.240 3,590 3,600 2.540 2.540 Select order 2,900 3,180 3.550 3.820 4,650 4,640 4.110 4.520 Browse for 0,110 0,770 0.120 0.140 0,050 0,100 0.030 0.040 Order Brow for 0,520 0,540 0.330 0.330 1,250 0,990 0.980 1.090 Idx for i Brow 2,080 2,820 3.240 3.160 3,410 4,090 3.420 3.480 Select sum all 5,560 4,420 3.360 4.110 5,060 4,570 3.320 3.970 SUM all 3,410 3,790 6.910 9.250 3,490 3,600 6.870 9.280 --------------------------------------------------------------------- - U-SHR je UNIX sa SHARED otvorenim tabelama - Očigledno da je UNIX verzija uglavnom brža kada treba obraditi veću količinu podataka, tj kada rushmore ne nađe indeks. - I očigledna razlika u implementaciji SELECT SUM(arcena) i komande SUM TO m.cena za DOS/WIN i UNIX.
baze.podataka.497 misa.m,
Dodatak prethodnom testu. SCO Open Server 3.0, Memorija nakon startovanja: kernel=3452K, i/o buff=600K, user=4356K ** UNIX sa 6 virtuelnih terminala sa konzole simultano sa datim vremenom startovanja u varijanti sa i bez indeksa po ceni. (zgrada se trenutno kablira pa je mreža u rasturu) Sa indeksom 11:12:32 11:12:43 11:12:44 11:12:49 11:12:59 11:13:26 ------------------------------------------------------------------ Select 0.950 1.180 0.230 1.480 1.180 2.060 Select order 17.830 29.870 34.770 40.040 31.990 43.530 Browse for 2.510 5.270 6.130 3.150 4.280 4.140 order Browse 8.200 2.210 2.010 0.390 4.610 0.520 Select sum 34.820 28.970 28.540 40.830 20.430 38.620 SUM all 57.870 59.980 60.440 44.590 52.590 17.360 ------------------------------------------------------------------ Bez indeksa 11:20:39 11:20:45 11:20:48 11:20:50 11:21:00 11:21:04 ------------------------------------------------------------------ Select 23.600 44.220 52.060 50.860 42.140 39.000 Select order 49.230 37.180 25.740 25.800 27.870 25.810 Browse for 2.090 1.790 2.090 1.880 1.180 1.730 Browse order 8.110 2.940 0.870 11.350 8.790 6.260 Select sum 25.440 37.360 47.180 21.720 22.910 21.820 SUM all 50.120 54.660 46.840 45.100 50.490 61.870 ------------------------------------------------------------------ ** Mnogo realnije za raspolozivu memoriju, 2 usera 11:28:04 11:28:07 ------------------------------ Select 0.540 1.040 Select order 8.840 10.140 Browse 0.310 0.310 Browse order 1.080 0.410 Select sum 7.030 11.560 SUM all 12.640 11.960 ------------------------------
baze.podataka.498 dr.grba,
>> Append pa Index Size: 2.649KB Time: 43,490 33,050 36.340 >> Append sa CDX Size: 2.649KB Time: 69,240 55,240 134.330 WIN najbrži??? (((: Alo, mrzioci Wina! Videste li? (:
baze.podataka.499 bulaja,
========== newsbytes/general #3115, from newsbytes, 3105 chars, Tue Dec 6 17:00:10 1994 ---------- CA Beefing Up Ingres Marketing 12/06/94 NEW YORK, NEW YORK, U.S.A., 1994 DEC 6 (NB) -- A report card on Computer Associates International Inc.'s (NYSE:CA) handling of the Ingres database software it acquired last spring gives the firm an A. That's not surprising, being as the report card came from CA itself. In justifying this pat on its own back, though, CA gave the impression it is working to correct Ingres' traditional weaknesses. At a press conference during the DB/Expo trade show and conference, and transmitted via telephone to other industry media and analysts, CA pointed to increased spending on marketing and incentives for resellers and hardware and software partners. Also at the press conference, several Ingres users chosen by CA praised improved technical support and the added visibility of the product since CA took over The Ask Group Inc., which formerly sold Ingres. Sanjay Kumar, president and chief operating officer of CA, started the conference by saying there are three major trends in the database market at the moment. Customers are moving toward enterprise computing, away from relying on a single database vendor, and from centralized to distributed database systems, he said. Kumar argued that CA is well placed to capitalize on these trends because it is a major vendor of mainframe database software but also, with the acquisition of Ingres, has prepared itself to offer customers "a seamless migration path to client/server." Computer Associates said it will absorb porting and certification fees for vendors of hardware and operating systems that want to bring CA-OpenIngres, the cross-platform version of the database software, to their systems. Computer Associates will also work closely with those firms to port the software. Sun Microsystems Inc. will be the first to take part in this program, the company announced. The company will also reward value-added resellers (VARs) for pushing Ingres by returning to them as much as 10 percent of the license fees it receives for licenses they help to sell, plus quarterly bonuses based on volume. The resellers can also get as much as 75 percent of Ingres marketing costs paid by CA, and those certified as Ingres VARs can now become VARs for CA's Unicenter systems management software without paying initiation and training fees. All this is part of an effort to improve on Ask Group marketing that Computer Associates officials described as "anemic." Predrag Dizdarevic, senior vice-president for research and development at CA, also announced that the new Unix version of CA-OpenRoad, the company's object-oriented application development software, is ahead of schedule and will enter beta testing this month instead of in the first quarter of 1995 as planned. It will ship at the end of March, CA said. OpenRoad for Microsoft Corp.'s Windows 3.1 and Windows NT is to be available by Christmas, Dizdarevic said. (Grant Buckler/19941206/Press Contact: Bob Gordon, Computer Associates, 516-342-2391; Public Contact: Computer Associates, tel 516-342-5224, fax 516-342-5329)
baze.podataka.500 fancy,
ŮŢ> Database Related Journal Da li si _baš_ siguran da si poslao to što si napisao..?
baze.podataka.501 mdrazic,
I ove godine je održan u USA "1994 Developers Competition & Advisor Developers Conference" takmičenje u brzini pravljenja aplikacija iz oblasti baza podataka. Prijavljeno je bilo na stotine dvočlanih timova koji su koristili razne alate: client/server, UNIX, Windows, Clipper, Fox, Magic, Progress, Oracle,... Prva dva mesta su osvojili timovi koji su koristili Clipper sa "UltimADE application development environment" paketom koji proizvodi neka Belgijska firma sa sedištem (i) u USA. Trećeplasirani su koristili Progress, a četvrti, peti i šesti su radili u Magic-u (prošle godine je Magic bio prvi). Procentualno je više timova koristilo Windows alate nego DOS alate, ali sedam od prvih deset mesta zauzele su DOS aplikacije Milan
baze.podataka.502 mdrazic,
U oktobarskom broju "Data Based Advisor" časopisa koji se bavi bazama na PC opremi podelili su nagrade i pohvale. Ukratko ću navesti pobednike i pohvaljene (u zagradi) u kategorijama (na engleskom, da ne prevodim i bez punog naziva proizvoda ako je poznat): BEST: NEW: new product: Access (BandIt, FoxPro) new database manager: Access (FoxPro) new development product: PowerBuilder (FoxPro) DOS: database manager: FoxPro (Clipper) application development tool: Clipper (FoxPro) database publishing tool: R&R, Ventura text/program editor: Multi-Edit (Brief, QEdit) WINDOWS: database manager: FoxPro (Access, Paradox) application development tool: FoxPro (Visual Basic) database publishing tool: Ventura (Crystal Reports) text/program editor: MS Word add-on: FoxFire CLIENT/SERVER: front end development tool: PowerBuilder (Visual Basic, Gupta SQLWindows) back end/database server: Oracle, Sybase SQL Server, Microsoft SQL Server network operating system: Novell NetWare server operating server: Windows NT (Novell NetWare) application development tool: PowerBuilder (Visual Basic, Clipper) THIRD PARTY TOOLS AND UTILITIES: access add-on: (Code.Print Pro for Access, Intersolv Database Library, Total Access Analyser) C/C++ database library: CodeBase Clipper-add-on: Telepathy code/function library: FUNCky (Grumpfish Library) database recovery tool: dSalvage Professional, Norton Utilities dBASE add-on: R&R Report Writer documentation tool: TechWriter FoxPro add-on: Foxfire! graphics tool for a database manager: dGE (Flipper) linker: Blinker lotus notes add-on: (PowerBuilder for Lotus Notes, VB/Link for Lotus Notes) network library: NovLib (NetLib) paradox add-on: ObjectSpy powerbuilder add-on: PowerTOOL report writer: R&R Report Writer (BandIt, Crystal Reports) telecommunications tool for a database manager: Telepathy user interface/screen design tool: Stage visual basic add-on: VBAssist (SIxBase/VB) BEST OF BREED: (ono što nije klasifikovano pod gornjim klasama) database driver: Comix (SIx Driver) cross platform development tool: FoxPro query tool: Access (Grumpfish Reporter) C/C++ compiler: Borland C++ (MS Visual C++) CASE/design tool: ERWin (EasyCASE) UNIX database manager: Oracle (Sybase SQL Server, Informix-OnLine) object-oriented programming language: Clipper with Class(y) (Borland C++, SmallTalk/V) database accounting software: SBT Professional Series (AccountMate) on-line help: Expert help technical support: Telepathy developer program: Microsoft Developer Network Eto toliko. Nadam se da ovo neće započeti rasprave tipa: moj ... je bolji od tvog ... tri puta. Milan
baze.podataka.503 mdrazic,
Još nešto korisno i interesantno za one koji razmišljaju o moćnijim sistemima od jedne PC mašine. Choosing a databased server (decision tree): Y Y Single-user ─────────── Upsizing soon ────────── (2) │ │N │N (1) │ N Y >16 users ─────────── Multiple concurent ───── (2) │ updates │Y │N │ (1) │ N Y >200 users ─────────── High availability ───── (3) │ required │Y │N │ (2) │ Y Need to preserve ─────── (5) mainframe │ │N │ N High performance ─────── (3) required │ │Y │ N Willing to be on ─────── (3) cutting edge │ │Y │ (4) Legend: (1) Intel-based, single-user with LAN filesharing option Pros: Inexpensive, easy-to-use Cons: Non scalable (2) Intel-based, uni-processor, workgroup server Pros: Scalable Cons: Moderate robustness (3) RISC-based, uni-processor, UNIX departmental server Pros: Robust, scalable Cons: Learning curve for UNIX (4) Multi-processor, parrallel execution, departmental/enterprise server Pros: Optimum performance Cons: Newest technology (5) Mainframe enterprise server Pros: Preserves mainframe investment Cons: Difficult to scale Zaključak: mainframe kompjuteri se koriste samo ako ih već imate, niko pametan ne nabavlja mainframe radi baza podataka OSIM u vrlo malom broju izuzetnih slučajeva sa OGROMNIM bazama (a i to je pitanje). Milan
baze.podataka.504 misa.m,
>> Kako da otkrijem je li IDX ili TAG u CDX indeksiran po UNIQUE ? Mislim da je jedini način LIST STAT u file pa dalje sa Low-lewel funkcijama.
baze.podataka.505 ndragan,
/ To se i ja spremih da mu kažem, ali mislim da čovek ni ne koristi / Fox4Win :) To nešto drugo što on koristi valjda ima neku sintaksu za istu stvar, pošto pretpostavljam da se u stvari radi o maskiranom pozivu nečega iz system.dll ili sličnog, a i da iskoristim priliku da (pozdravim čiku) kažem našima kako se to u foksu rešava.
baze.podataka.506 ndragan,
/ jedinstvenim nazivima u dir (REPORT FORM TO file), pa ih kokni na LPT2 Malo lepše od ovoga: mreža mi nema mrežni štampač, pošto je server negde u podrumu, nego se koriste mali oki320 lokalni štampači. Od spulera se nigde ne spominje ni q, a novel mi opet ne da da otvorim lokalni lpt1 na radnoj stanici kao fajl za lele i/o. Nije bitno, radi ovako, jedino se meni više sviđalo _onako_.
baze.podataka.507 ndragan,
/ sve funkcije za rad sa indeksima, ali ne ide. To mi treba za jedan / mali recnik Imaš uz moju poruku #468 strukturu .idx fajla, čini mi se da se tamo spominje neki bajt u zaglavlju (ne sećam se tačno). Sam fajl nemam kod sebe, a knjiga će mi ponovo biti pri ruci dogodine.
baze.podataka.508 ppekovic,
>> Mali uporedni test prfomanci FoxPro-a 2.6 na tri platforme. Za test >> je korišćena datoteka artikala sa ukupno 39322 slogova indeksirana >> po sifri C(9) i nazivu C(30). Pošto se kod nas prenose SCO news grupe, ovih dana pratim diskusiju o FoxPro-u za Unix. Ima mnogo pritužbi na račun implementacije na Unix-u. Pre svega, primedba se odnosi na brzinu rada sa terminalima, kao i neke probleme sa flow kontrolom. Dalje, nekoliko korisnika se žalilo da je stari FoxBase+ brži u odnosu na novi FoxPro. Paya
baze.podataka.509 max.headroom,
> Bug or feature? U svakom slučaju, zbog ovoga ne treba > koristiti unique! Gastone, i ja sam istog mišljenja. Za ono što ti je potrebno (znam iz mail-a) nemaš preke potrebe za UNIQUE poljima. Jednostavno traženi po- datak "proveri" sa SEEK, pa ako postoji - nemoj raditi APPEND ili šta ti je već potrebno. Na primer: IF .NOT. SEEK(ključ) APPEND BLANK .... ENDIF Pretraživanja sa SEEK su izuzetno brza (pogledaj par mojih poruka u temi vezane za pretraživanja), tako da i u bazi od nekih 100.000 zapi- sa podatak pronalaziš u trenutku.
baze.podataka.510 mzdravkovic,
>>> Fox4w: vidi help za "set palette" - on ili off zadrzava >>> sistemsku paletu odnosno preuzima paletu sa slike (ne znam >>> koje je za on a koje za off). >> >> To se i ja spremih da mu kazem, ali mislim da covek ni ne >> koristi Fox4Win :) BTW, SET PALETTE ON - ukljucuje Fox-vu >> default paletu, dok Tacno. Ne koristim Fox4Win, vec DBase for Windows. Glavni problem je sto pri prikazu slike, broj boja je smanjen i time je slika osakacena. Ovo se desava sa slikama koje imaju 256 i 128 boja, a svi primeri koji su dosli uz program su u 16 (ili manje boja) pa kod njihovog prikazivanja nema problema. Da li je moguce da ova prva verzija DBase-a za Windows jos ne moze da podrzi 256 boja ?
baze.podataka.511 ndragan,
/>> Append sa CDX Size: 2.649KB Time: 69,240 55,240 134.330 / WIN najbrži??? (((: Win je u ovom testu najbolje prošao jer: - ga je pisao gazda Bidža i dao mu da gazduje memorijom kako hoće, tako da se cela priča događa negde na tavanu, u gornjim megabajtima. Za bilo kakvo testiranje produžene verzije foksa (dakle FoxproX, FoxproW) je od bitnog značaja da li je sa rečenom bazom bilo šta rađeno pre testa - ne bih se čudio da gomilu stvari odrade interni keševi samog foksa itd, te da cela baza ostane u memoriji. - Dos verzija ima da mulja sa ekstenderom (ili sa EMS drajverom), juniks ima i druga posla oko operativnog sistema (nikad ne spava), jedino pod prozorom može pošteno da zajaši gornje megabajte i da se ljudski razbaškari. - ovde nema šta da radi sa ekranom, te mu osnovni maniri nisu došli do izražaja ;> --: ceterum censeo, dos mašinama bi trebalo dati memoriju
baze.podataka.512 ndragan,
/ FoxPro add-on: Foxfire! A jel' neko video to čudo? Šta je to?
baze.podataka.513 nbatocanin,
> / FoxPro add-on: Foxfire! > > A jel' neko video to čudo? Šta je to? "FF is a report generator designed for people who need FoxPro queries or reports fast - without the complexites of programming. FF enables you to work from multiple xBase databases using familiar 'natural language' names for data. FF seamlessly integrates into existing applications. FF's data dictionary lets you store join expressions, field definitions, privileges and printer information in a set of DBF files. Storing join conditions means users are freed from setting relations before running each report. Produce detail, summary and cross tab reports, browses, text merges, and data files (ASCII, DBF and several spreadsheet formats). Available in end-user and developer versions for DOS, Win and Mac."
baze.podataka.514 max.headroom,
> Da li si _baš_ siguran da si poslao to što si napisao..? :) Da se ispravim - nije "Journal", kako sam naveo, već skup rutina pisanih za XBase. Pošto sam stvar skinuo sa MR-Systems-a, bačih pogled na prvih par stvari u arhivi, te rekoh - možda će nekoga zanimati. Kad ono, ispade da od "žurnala" nema ništa. Dakle, samo programski prime- ri. Veliko izvinjenje svima koji su fajl skinuli i ustanovili da nedo- staje i nešto "pisanija". P.S. Videh na MR-Sys-u podosta softvera, što bi se reklo, "database rela- ted", ali me linija nije najbolje poslužila. Ako budem nešto od svega toga skinuo - ostaviću ovde, uz obećanje da, kao file-description, isečam deo originalnog .DOC fajla iz arhive. Izvini još jednom.
baze.podataka.515 mdrazic,
> / FoxPro add-on: Foxfire! > > A jel' neko video to čudo? Šta je to? Baš gledam reklamu pa mi opet nije jasno. Izgleda mi da je to neki data dictionary koji sadrži definicije polja, relacije među tabelama, konfiguracije printera, korisničke privilegije i da se te informacije mogu iskoristiti iz aplikacije pri generisanju izveštaja i slično. Kažu da može da generiše FoxPro SQL kod za upite/izveštaje koji koristi (tj. organizuje kod da koristi) Rushmore. Prodaje se za DOS, Windows i Mac. Cene: Developers Edition (source code & distribution rights) Single Platform $295 Any 2 Platforms $499 All 3 Platforms $699 Compiled version (no distribution rights) Single User $89 10 User LAN $195 25 User LAN $395 Unlimited LAN $795 Demo Disk FREE S&H $25 (valjda za proizvod, ne za demo) Adresa: Micromega Systems, Inc. 832 Baker Street San Francisco, CA 94115 tel: 415-346-1461 fax: 415-346-6804 CompuServe: 73354,174 Dalje vidite, pa javite rezultate. Milan
baze.podataka.516 mdrazic,
>> Da li si _baš_ siguran da si poslao to što si napisao..? > > :) Da se ispravim - nije "Journal", kako sam naveo, već skup rutina > pisanih za XBase. Pošto sam stvar skinuo sa MR-Systems-a, bačih pogled Izgleda da je to prateći sadržaj za sam žurnal sa primerima i potrebnim tabelama, kao malo bogatiji RSOFT. Primetio sam da su izdavačke kuće prestale da šalju ovakve sadržaje na BBS-ove i da ih za debele pare šalju uz magazin na pratećoj disketi koju još popune raznim demo softverom. Milan
baze.podataka.517 misa.m,
>> Pošto se kod nas prenose SCO news grupe, ovih dana pratim >> diskusiju o FoxPro-u za Unix. Ima mnogo pritužbi na račun Ima li je na fonu, nisam uspeo da je nađem?
baze.podataka.518 misa.m,
>> Win je u ovom testu najbolje prošao jer: Moguće da je direct file access "krivac".
baze.podataka.519 misa.m,
FoxPro 2.6 bug? 1. Prilokom definisanja SKIP FOR uslova za POPUP PAD ako koristite funkciju ...SKIP FOR !USED("alias") Windows verzija prikazuje sistemski prozor sa porukom "Alias not found". U dosu se to ne dešava. Da li se radi o bagu ili je moja verzija za win pomalo zastarela? 2. Ako liniju komentara završite sa ";" fox će i sledeću komandu proglasiti komentarom. Zgodno kada treba privremeno isključiti komandu pisanu u više redova ali sam ja 15 minuta pokušavao da shvatim šta mi se desilo u programu. Nas koji koristimo fox ima dosta na sezamu. Svi mi povremeno naletimo na neku neobičnost koja je možda bug a možda i ne. Predložio bih da malo više razmenjujemo ova iskustva, svima će biti korisna. A možda jednog lepog dana i ljudi koji na sezam dovlače tone raznih patch-eva za clipper prenesu i neku od patch baza za fox.
baze.podataka.520 mradic,
HELP! Radim s paketom ''FoxPro 2.6 for Windows''. U potrazi sam za gotovim rutinama (funkcijama i procedurama) koje bi mi olaksale neke zamorne i ucestale poslove, recimo, kod genetisanja maski i sl. Moze li me neko uputiti na mesto gde postoji izbor takvih ShareWare rutina (BBS, CD...)? Mozda ti ima i neko od vas? ;) Hvala! :)
baze.podataka.521 ppekovic,
>>>> Pošto se kod nas prenose SCO news grupe, ovih dana pratim >>>> diskusiju o FoxPro-u za Unix. Ima mnogo pritužbi na račun >> >> Ima li je na fonu, nisam uspeo da je nađem? Grupe biz.sco.general i biz.sco.opendesktop Paya
baze.podataka.522 ndragan,
/ 2. Ako liniju komentara završite sa ";" fox će i sledeću komandu / proglasiti komentarom. Zgodno kada treba privremeno isključiti :) It's a feature, al' ne pitaj koliko sam se puta i ja zezno prethodnih godina... Sad se setih još nečeg: kako iščupati pikčer string pod kojim radi trenutno aktivni GET? Dok su bila obična polja, bilo je đene-đene, ali otkako se u tim stringovima nalaze čitavi romani (istina, max 255 chr), često mi zatreba da taj string iščupam.
baze.podataka.523 zorani,
## Nas koji koristimo fox ima dosta na sezamu. Svi mi povremeno ## naletimo na neku neobičnost koja je možda bug a možda i ne. ## Predložio bih da malo više razmenjujemo ova iskustva, svima će biti ## korisna. A možda jednog lepog dana i ljudi koji na sezam dovlače ## tone raznih patch-eva za clipper prenesu i neku od patch baza za ## fox. Fajlovi za pačovanje DOS i WIN foxa na verziju 2.6a se nalaze na Microsoft Download Service BBS-u. Podugački su. Spisak bagova koji su ispravljeni vezan je uz ovu poruku a evo i sadržaja readme.1st fajla iz fox direktorijuma: ===================================================================== Introduction ------------ This file contains the current list of files required to patch version 2.6 of of FoxPro, FoxPro add-ons and the FoxPro Distribution Kits to the latest version, which is FoxPro 2.6a. Some previously reported problems have been fixed in FoxPro 2.6a. A complete list of fixes incorporated into FoxPro 2.6a is outlined in the CHG26a.TXT file in the library where you downloaded this file. If you are not experiencing one of the problems mentioned in the CHG26a.TXT file, then you do not need to upgrade to FoxPro 2.6a. To update your current copy of FoxPro, you will need to download the appropriate files from this library. Products which can be patched ----------------------------- Patches are available for Version 2.6 of FoxPro for Windows and version 2.6 of FoxPro for MS-DOS. Patches are not available for any earlier versions of FoxPro for Windows or FoxPro for MS-DOS. Patches are not available for FoxPro for Macintosh or FoxPro for UNIX. If you have a version of FoxPro for Windows or FoxPro for MS-DOS that precedes version 2.6, and you wish to upgrade to version 2.6a, please contact the Microsoft Sales & Customer Service office in your country. In the United States, Microsoft Sales & Customer Service can be reached at (800) 426-9400. What files should be downloaded? -------------------------------- If you have FOXPRO FOR WINDOWS version 2.6 (WITHOUT the Distribution Kit), download the following file (REQUIRED IF YOU HAVE THIS PRODUCT): FPW.EXE If you have FOXPRO FOR WINDOWS version 2.6 (WITH the Distribution Kit), download the following file (REQUIRED IF YOU HAVE THIS PRODUCT): FPW_DK.EXE If you have FOXPRO FOR MS-DOS version 2.6 (WITHOUT the Distribution Kit), download the following file (REQUIRED IF YOU HAVE THIS PRODUCT): FPD.EXE If you have FOXPRO FOR MS-DOS version 2.6 (WITH the Distribution Kit), download the following file (REQUIRED IF YOU HAVE THIS PRODUCT): FPD_DK.EXE If you have the CONNECTIVITY KIT for FoxPro for MS-DOS, or you have the CONNECTIVITY KIT for FoxPro for Windows, or you have the PROFESSIONAL EDITION of FoxPro for MS-DOS, or you have the PROFESSIONAL EDITION of FoxPro for Windows, download the following file (REQUIRED IF YOU HAVE THIS PRODUCT): CK.EXE If you wish to update the FOXSTART.APP, or MIGRATE.APP files download the following file (this is optional): APPS.EXE If you wish to update the DBF style help file, for use with FoxPro for MS-DOS, download the following file (this is optional): DBHLPD.EXE If you wish to update the DBF style help file, for use with FoxPro for Windows, download the following file (this is optional): DBHLPW.EXE If you wish to update the FOXAPP files, download the following file (this is optional): FOXAPP.EXE If you wish to update the Windows Help (HLP) help file for FoxPro for Windows, download the following file (this is optional): FPWHLP.EXE If you wish to update the DRIVER2.FLL, GEN_PD.PRG, GENPD.APP, GENPD.PJT, or GENPD.PJX files, download the following file (this is optional): GENPD.EXE If you wish to update the GENGRAPH.APP, GENMENU.PRG, GENSCRN.PRG, GENXTAB.PRG, or TRANSPRT.PRG files, download the following file (this is optional): GENS.EXE If you wish to update the CATALOG MANAGER and WIZARDS, download the following file (this is optional): WIZCAT.EXE How to proceed -------------- 1) Place the file(s) in the directory which contains FoxPro After the appropriate files have been downloaded, copy the files into the directory where version 2.6 of FoxPro resides. Example: If you have FoxPro for Windows 2.6 without the distribution kit, and it is installed in "c:Đfpw26", then you should download the file FPW.EXE and place that file into the c:Đfpw26 directory then execute it. 2) Execute one of the 'required' files Change to the directory which contains the copy of FoxPro that needs to be patched and also contains the patch file (one of the following: FPW.EXE, FPW_DK.EXE, FPD.EXE, FPD_DK.EXE). Execute the patch file by typing its name at the MS-DOS prompt. When you execute the file, several files will be created, including a file called PREADME.TXT. The file PREADME.TXT contains instructions which will tell you how to apply the patches. PLEASE READ THE PREADME.TXT FILE BEFORE PROCEEDING. IT CONTAINS IMPORTANT INFORMATION ABOUT THE PATCH PROCESS. ================================================================== chg26a.zip
baze.podataka.524 max.headroom,
> 2. Ako liniju komentara završite sa ";" fox će i sledeću > komandu proglasiti komentarom. Zgodno kada treba > privremeno isključiti komandu pisanu u više redova ali sam > ja 15 minuta pokušavao da shvatim šta mi se desilo u > programu. Ma, ja. To mu dođe concatenation character. Mnogo očiglednija varija- nta je, kao prvi znak u redu, udariti '*' ili '***', što liniju pro- glašava komentarom, te je i ne izvršava. žesto sam po sorsovima video sledeću situaciju: REPLACE a WITH 1 ; b WITH 2 ; c WITH 3 Bljak :) Ako dođe do greške, locira se samo REPLACE komanda - i nada- lje je sve isključivo do tebe (možda je polje 'a' u bazi obrisano, možda polje c nije numerik tipa, itd). Sa zdravo mnogo kucanja, ali i mirnijim snovima, ovo radi istu radnju: REPLACE a WITH 1 REPLACE b WITH 2 REPLACE c WITH 3
baze.podataka.525 rmatijevic,
> Postoji grupa Clarion pa ako si zainteresovan javi se: svojevremeno je ostavljena poruka, pa ako je grupa još aktivna zainteresovan sam za pristup, a ako nije predlažem da formiramo istu.