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.102 mjevta, -> #98, djelovic
>> 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, -> #98, djelovic
> 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, -> #98, djelovic
>> 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, -> #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. 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, -> #103, spantic
│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, -> #103, spantic
> 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, -> #93, sikima
> 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, -> #93, sikima
> 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, -> #96, lkudlik
> Da li neko ima na disketi u vezi ORACLE-a nesto ? ------- Trebace ti nesto vise od diskete ;)
baze.podataka.111 spantic, -> #106, bulaja
> 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, -> #107, djelovic
> 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, -> #108, djorzor
> 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, -> #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. 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, -> #114, dcolak
> Mada, kada vidim sta sve ljudi rade na XT-u sa ORACLE-om.. Mazohisti ???
baze.podataka.116 nbatocanin, -> #107, djelovic
> 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, -> #115, neman
│> 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, -> #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 ;) Što bi rekli: po svecu i tropar (:
baze.podataka.119 nbatocanin, -> #111, spantic
> 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, -> #119, nbatocanin
> 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, -> #123, peca.st
ŮŢ> 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, -> #123, peca.st
#=> 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, -> #123, peca.st
> 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, -> #125, vitez.koja
█ 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, -> #127, peca.st
>> 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, -> #132, sinfos
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, -> #132, sinfos
> 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, -> #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 ? :) 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, -> #135, jolicm
Ł 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, -> #131, bulaja
>> 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, -> #132, sinfos
> 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, -> #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 ;) 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, -> #132, sinfos
=> 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, -> #105, ppekovic
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, -> #146, dr.grba
Ů█▀█Ţ 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, -> #149, mmitrovic
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, -> #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. 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, -> #65, zakic
/ 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, -> #86, isimic
/ 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, -> #156, iritel
> 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, -> #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. 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, -> #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, 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, -> #160, iritel
> 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, -> #159, djelovic
/ Š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, -> #161, djelovic
>> 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, -> #157, djelovic
=> 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, -> #166, ikordic
> Ima li neko iskustva sa ovim? Komfor, brzina, pozdanost, neka paralela sa > Clipper-om, ... Nije ni do kolena Clipperu.
baze.podataka.168 nbatocanin, -> #160, iritel
> 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, -> #162, ndragan
#=> 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, -> #168, 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) ? 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, -> #170, iritel
│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, -> #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) ? 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, -> #181, max.headroom
> 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, -> #182, djelovic
> 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, -> #184, max.headroom
> - 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, -> #184, max.headroom
>> 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, -> #184, max.headroom
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, -> #175, 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, -> #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. 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, -> #184, max.headroom
> - 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, -> #193, mdrazic
> 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, -> #184, max.headroom
> 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, -> #169, vitez.koja
> 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, -> #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 (?). └────────────────── Hvala na pointeru, valjda ću pronaći tamo...
baze.podataka.199 dr.grba, -> #196, feniks
>> 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, -> #196, feniks
>> 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, -> #199, dr.grba
│ 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, -> #198, feniks
> Hvala na pointeru, valjda ću pronaći tamo... Ako ne nađeš, podseti me da spustim u konf.
baze.podataka.203 max.headroom, -> #194, djelovic
> 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, -> #203, max.headroom
> 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, -> #208, djelovic
> 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).