clipper.1031nbatocanin,
-> #1027, snemcev> Pa da kažem. Ovo (slovima.prg) nije Clipper.
Probaj moj program prikačen uz poruku 5.955 u ovoj temi.
clipper.1032kanda,
-> #1028, nbatocanin
>> Malo je predugo za objašnjenje, ali ukratko, kompletnu strukturu baze
>> podataka: opis i definicije polja, komentare, indekse, itd. Na osnovu
>> ovih podataka vršim otvaranje datoteka, pridruživanje odgovarajućih
>> indeksa, itd. Na primer, datoteku otvaram sa:
>>
>> Open ("Naziv")
OK, da pokusam da rezimiram ideje :
1) svi indeksi bi trebalo da se otvore pri otvaranju baze
2) indekse je lakse i sigurnije birati po imenu nego po rednom broju
3) omoguciti kreiranje, 'prepakivanje', reindeksiranje baze, bez
navodjenja detalja (dovoljno je ime baze!)
Da dodam i ja poneku :
4) 'lokalne baze'. Jednostavno, kazes da zelis da koristis neku
bazu, sa tim-i-tim indeksom i tim-i-tim filterom. Ako je baza
vec u upotrebi, tj. otvorena, sistem zapamti stanje (aktivni
indeks, aktivni filter, broj aktivnog sloga itd) i tek onda
postavi nove vrednosti. Kada zavrsis posao, ti kazes 'zatvori',
a sistem vrati bazu u prethodno stanje. Ovo omogucava pisanje
potprograma koji rade bez obzira iz koje situacije ih pozoves !
Stvar upravo testiram i zasad radi kao srpska oooops! tj. kao
japanska zeleznica.
5) pa kad je tu recnik, mozda bi imalo smisla pamtiti i PICTURE
za SAY i GET, mozda i neke jednostavnije VALID izraze... mada
je ovo vec malo nategnuto, sasvim dobro sluzi i #define.
clipper.1033kanda,
-> #1029, ndragan
>> Ovo me navodi da opet pitam: da li je (... ili) istina da je u
>> kliperu običaj da se po startu aplikacije pootvaraju sve baze i
>> indeksi? Jer ovako nešto praviti, za mene znači da su linije u kojima
>> se baze otvaraju malo daleko da bi se mogao pogledati redosled
>> indeksa. Ja nikad ne setujem redosled po imenu nego uvek po broju,
>> jer na početku rutine otvaram baze i na kraju ih zatvaram (rutina je
>> retko kad duža od 8K, recimo (imam samo nekoliko koje su duže od 150
>> linija, a i to su neke kombinovane višestruke štampe)), a to se onda
>> lako kontroliše iz bilo kog editora.
Ne znam kakav je obicaj :) al ja gledam da su mi baze otvorene samo
kada se stvarno koriste. Sto se indeksa tice, postoji nekoliko dobrih
razloga da se pri otvaranju baze otvore SVI pripadajuci indeksi,
najbolje automatski, kao ono sto je pisao Nenad.
Dalje, kako god okrenes, Order('Prezime') je lakse za razumeti nego
SET ORDER TO 2. Svaka knjiga iz programiranja preporucuje da se, gde
god je moguce, izbegavaju ovakvi 'mrtvi' brojevi. 'Prezime' je deo
neke logike programa, '2' je ipak samo broj. Na primer, linija :
Radnici->(Order('Prezime'))
je sasvim nedvosmislena;
SET ORDER TO 2
to nije : koja baza je u pitanju ? koji indeks je u pitanju ?
clipper.1034snemcev,
-> #1031, nbatocanin>> Probaj moj program prikačen uz poruku 5.955 u ovoj temi.
Promakao mi je nekako, probaću ga svakako.
clipper.1035snemcev,
Danas sam kreirao (iz Clipper programa) bazu čija je struktura
duga tačno 1123 bajta. Takvu bazu DBU otvori, ali kad zatražim
BROWSE, ok kolosalno javi neku grešku sa '&' tj. sa makroima.
Jel to zato što je struktura datoteke duža od 1K? Ima li drugog
rešenja osim prepravljanja izvornog koda? Za divno čudo, PcShell
bez ikakvih problema prikazuje sadržaj ove datoteke.
clipper.1036raul,
Zdravo !!!!
Moze li mi neko reci zasto se u CLIPPERU (S87) kad koristim naredbu SET KEY TO
ime procedure ( na primjer dodjelim da mi F! pozove neku proceduru ). Zasto sve
radi jedno 5-6 puta dobro , a onda se na stisak tatsera pojave brljotine, tj.
maska se pokvari.
clipper.1037d.petrovic,
-> #1036, raulĂ> Moze li mi neko reci zasto se u CLIPPERU (S87) kad koristim naredbu
Ă> SET KEY TO ime procedure ( na primjer dodjelim da mi F! pozove neku
Ă> proceduru ). Zasto sve radi jedno 5-6 puta dobro , a onda se na
Ă> stisak tatsera pojave brljotine, tj.
Malkice nejasno, ali... jesi li isključio taj taster kad je
pozvao funkciju ? Npr. set key 28 na neki tamo help, čim uđeš u taj
help prvo isključuješ taj taster, a pre nego što se vratiš ponovo ga
uključiš. Ako nije to, budi malkice detaljniji ili daj taj deo
source-a ovamo.
clipper.1038pstojanovic,
-> #1036, raul To se obicno desi kada imas rekurziju; naime, kada pozivas npr.
set key -1 to kalendar sa F2
pa u kalendaru pritisnes jos neki put F2, a u proceduri kalendar imas
formiranje privatnih promeljivih, lako dolazi do gomilanja steka. Narocito
ako pamtis ekrane (ekran=25*80*2 bajta= 4 KB po promenljivoj). U prethodnom
odgovoru ti je kolega dao ispravan odgovor, iskljucis pri ulasku taster za
poziv a na izlasku iz procedure ga ponovo ukljucis. To greska recimo nece
vaziti za CL 5.01 zbog dinamicke memorije, ali ... Murphy is a live ;).
Ko zna, treba biti dosledan.
clipper.1039pstojanovic,
Evo jednog programa koji meni koristi, probajte, pa komentarisite...
pi.arjclipper.1040zradojicic,
Da li neko ima napisanu funkciju (proceduru) za ocitavanje serijskog
broja HD-a.
KLF.
clipper.1041d.petrovic,
-> #1040, zradojicicĂ> Da li neko ima napisanu funkciju (proceduru) za ocitavanje
Ă> serijskog broja HD-a.
Ajde sad lepo kaži od koga si sad pa to čuo :). Ima neko ali je
nije još završio = usavršio = to je spoooooooro da bi se ubacilo u
neku aplikaciju.
clipper.1042ndragan,
-> #1033, kanda/ Dalje, kako god okrenes, Order('Prezime') je lakse za razumeti nego
/ SET ORDER TO 2. Svaka knjiga iz programiranja preporucuje da se, gde
Da, svakako. I mi to uvodimo; kvalifikovanje polja po aliasu (a ne po
zoni) smo odavno uveli. Sintaksa tipa 'select 4' (to sam viđao samo kod
samoukih početnika) je inače suluda, i kod programa dužeg od tri ekrana
diže pritisak a obara produktivnost bar dvostruko ;).
Ono 'Set order to 2' koristimo tako retko da nije naročito smetalo, a i
svaka rutina koja nešto mulja sa bazama (a nije deo maske) mora da
pozove standardnu rutinu za otvaranje i na kraju i onu za zatvaranje, a
pošto su rutine kratke, nije teško da se zaviri u prve linije. Ali, i to
uskoro ukidamo (ili još jednom proređujemo), pošto FoxPro2 ima nešto što
se zove strukturni indeks, indeks koji se sam automatski otvara sa
bazom, a u njemu su već upisana imena indeksa (TAG - još malo pa kao u
Venturi :).
Jesam kazo da idemo ka istom, različitim putevima.
/ razloga da se pri otvaranju baze otvore SVI pripadajuci indeksi,
/ najbolje automatski, kao ono sto je pisao Nenad.
Da, ako ima šanse da će se u bazu nešto pisati, inače ne - u mreži je
to još dva-tri fajla više za otvaranje, a ako radim Index For oni će se
svakako zatvoriti.
clipper.1043ndragan,
-> #1032, kanda/ 1) svi indeksi bi trebalo da se otvore pri otvaranju baze
Osim... vidi prethodnu poruku.
/ 2) indekse je lakse i sigurnije birati po imenu nego po rednom broju
Da.
/ 3) omoguciti kreiranje, 'prepakivanje', reindeksiranje baze, bez
Za ovako kritične operacije bi trebalo malo pripaziti - indeksiranje i
pakovanje zahtevaju zaključavanje, a u mreži...
/ Stvar upravo testiram i zasad radi kao srpska oooops! tj. kao
/ japanska zeleznica.
I Japanci imaju brze pruge?
/ za SAY i GET, mozda i neke jednostavnije VALID izraze... mada
U jednoj verziji glavne knjige imam _globalne_ pikčere za iznos, konto
i nalog za izveštaje; strpam ih u promenljive i ako dođe do dalje
inflacije samo dodajem devetke :). Valid izraze treba držati u bazi
maski :).
clipper.1044dpaun,
Clp dozvoljava i ovakve operacije:
PUBL Opc1, Opc2 ...
...
USE MojSET
Opc1 := Polje1
Opc2 := Polje2
...
č r,c PROMPT Opc1 MESS "....
č r+1,c PROMPT Opc2 MESS "....
MENU TO Izb
...
Ovo omogućava pisanje programa čije menije korisnik krsti prema
svojoj potrebi.
dPaun
clipper.1045jtitov,
Da li neko koristi za linkovanje neki drugi linker osim onog koji stize uz
Clipper 5.0 ('87)? Prednosti/mane?
clipper.1046aleksj,
-> #1036, raul> Moze li mi neko reci zasto se u CLIPPERU (S87) kad
> koristim naredbu SET KEY TO ime procedure ( na primjer
> dodjelim da mi F! pozove neku proceduru ). Zasto sve radi
> jedno 5-6 puta dobro , a onda se na stisak tatsera pojave
> brljotine, tj. maska se pokvari.
Obrati paznju na to da help iz help-a mozes (bezbedno)
pozvati samo jednom, tj. ako pritisnes F1 par puta za redom
moze se svasta dogoditi (isto vazi i za bilo koji drugi
podprogram koji je dodeljen SET KEY - u ako nekoliko puta
pritisnes taj taster za redom ).
Trebao bi da u pozvanoj proceduri podesis taster koji je pozvao
datu proceduru da to ne moze ponovo da uradi npr.
PROCEDURE HELP
SET KEY -1 TO
.
.
.
SET KEY -1 TO HELP
RETURN
i da na kraju ponovo vratis istu proceduru tasteru.
clipper.1047zalex,
-> #1045, jtitovKoristim BLINKER 2.0. Linkuje Clipper, Pakal, Asembler, Bejzik ...
Inkrementalno linkovanje radi savrseno, u 80% slucajeva linkovanje ne traje
duze od 3-4 sekunde. Linker je dinamicki, veliki programi se izvrsavaju bez
frke.
Jedini je problem sto ne moze da linkuje Clipper 87 datiran sa 21.12.87 0:00,
vec samo 21.12.87, 2:00. Na zalost, imam upravo pogresan Clipper, pa bih bio
JAAAAKO zahvalan onom koji moze da mi pomogne. Posto radim na mrezi, a dosadila
mi je poruka "insufficient memory", dinamicko linkovanje mi je neophodno. Ne
mogu da predjem na CLIPPER 5.01, jer nemam vremena (a i koristim neke
biblioteke koje ne rade sa njim).
ZALEX
clipper.1048nbatocanin,
-> #1033, kanda> Dalje, kako god okrenes, Order('Prezime') je lakse za razumeti nego
> SET ORDER TO 2.
... a i kad dodaš indeks na početak ne moraš da menjaš brojeve uz SET
ORDER.
clipper.1049nbatocanin,
-> #1032, kanda> mozda bi imalo smisla pamtiti i PICTURE za SAY i GET, mozda i neke
> jednostavnije VALID izraze... mada je ovo vec malo nategnuto, sasvim
> dobro sluzi i #define.
Zašto nategnuto? Rečnik podataka podrazumeva sve podatke o podacima.
Ja planiram da tu uguram ne samo podatke o načinu prikazivanja i
unosa i sl., već i podatke o pravima pristupa pojedinih procesa i
slične stvari. Na primer, funkcije koje bi vraćale podatke o svakom
polju (format za unos, prikazivanje i sl) mogu se trivijalno
napraviti. A onda se izbegava more problema - tako se veoma povećava
nezavisnost na relaciji program-baza podataka.
Sledeći korak je formalizacija procesa i kreiranje "rečnika
funkcija". Ovo bi morao biti osnov svakog dobrog generatora programa.
Ali, i samo rečnikom podataka se dobija puno. Na primer, kako sam ja
bez njega menjao strukturu baze podataka:
1) Pomoću DBU-a menjam strukturu. Ako je neka složenija promena
(promena tipa polja), onda se mora praviti mali programčić.
2) Evidencija u dokumentaciji programa - svako normalan ima opis svih
datoteka, polja itd.
3) Izmena u modulu za proveru integriteta: ponovno kreiranje indeksa
i sl.
4) Izmena u modulu za periodično brisanje podataka - treba dodati
podatke o izmeni.
5) Izmena svih USE..INDEX naredbi u programu. Sreća što sam i ranije
imao donekle automatizovano otvaranje, pa sam ovo ovde "izbegavao".
Slično ovome je i izmena SET ORDER naredbi.
6) Izmena delova programa koji se odnose na izmenu u bazi - ovo za
sada nisam previše razmatrao, ali polako.. :)
A sad samo uđem u pomoćni program koji mi služi za manipulaciju
rečnikom, napišem šta hoću, a on promeni fizičku strukturu, rečnik i
dokumentaciju. Moduli za brisanje i kreiranje indeksa ove podatke
uzimaju iz rečnika, pa u njima i nije potrebna intervencija. Najlepše
od svega je što je uvođenje rečnika 100% kompatibilno sa prethodnim
rešenjima, tako da nije potrebno menjati prethodne programe: USE i
dalje radi, OPEN se uvodi postepeno u nove module. Ovakva
centralizacija je jako dobra za sve vrste kontrola: ako jednom
automatizujete proces i napravite ga dovoljno opštim, kasnije ste
sigurni da ono što ste uradili RADI. A to je jako dobro, zar ne?
Prava stvar ka kojoj treba težiti je objektno orijentisana baza
podataka: svaka DBF datoteka je objekat koji "zna" i čuva neke
informacije, a sa kojim se komunicira preko poruka, kao sa šalterskim
radnikom. Kako vi preko šaltera ne možete previše uticati na rad tog
radnika i obrnuto, sledi da izmena tog objekta ne utiče na spoljni
program. E, to će biti prava stvar! Oće li taj Clipper 6.0! :)
P.S. Nevezano za ovo, zašto koristite izraz "baza" za DBF datoteku? Za
DBF datoteku se može reći da je tabela ili relacija, ali baza je samo
u trivijalnom slučaju, zar ne?
clipper.1050dejanr,
Da li vam se nekada desilo da vam clipper '87 + tlink unište CLIPPER.LIB?
Meni se to dešava danas evo treći put. Prvi put pre jedno 3 godine na AT-u,
i tada je CLIPPER.LIB bio samo malo pobrljan (ali dovoljno da kaže bad
object file). Drugi put pre jedno godinu dana na 386/25 kada ga je skratio
na 100 "random" bajta. Treći put danas, kada je u njega upisao neki .MAP
fajl, plus malo đubreta.
Pošto sam za sve to vreme intenzivno koristio clipper, ovo nije neka pojava
koja se dešava svaki dan nego verovatno pod nekim jako specifičnim
okolnostima.
Sada sam na clipper.lib stavio read only flag, šteta što ću morati da
čekam par godina da vidim deluje li ili ne ;)
clipper.1051raul,
Zdravo, opet ja. Hvala vam na odgovorima, pomogli ste mi. Jos jedno
pitanje : kada koristim naredbu MENU TO , a ne znam koliko cu dobiti PROMPTOVA
( recimo kada hocu da podatke iz baze stavim u PROMPT .... MENU TO ) da li
nekako mogu da odredim koliko ce biti PROMPTOVA ( Da li bih to mogao preko SET
KEY to 24 i da prenesem parametre promenljivoj MENU TO i kako )? Hvala !!!
clipper.1052jtitov,
-> #1047, zalex> vec samo 21.12.87, 2:00. Na zalost, imam upravo pogresan
> Clipper, pa bih bio JAAAAKO zahvalan onom koji moze da mi
> pomogne. Posto radim na mrezi, a dosadila
Evo koju '87 imam: pa nesto je sa vremenom 00:00, a nesto sa vremenom 2:00.
Sa vremenom 2:00 je sledece: clipper.exe, clipper.lib, debug.obj,
extend.lib, ndx.obj, plink86.exe, i jos neke manje-vise nebitne sitnice. Pa
ako ti nesto znaci...
clipper.1053raul,
Zdravo. Imam Clipper S87, a zelio bih da koristim misa. Moze li mi neko
reci kako to da uradim. Imam CLIPGRAP21 i Hercules karticu. Probao sam i sa
demo programomk CLIPGRAP-a, ali nikako da se pojavi ikona ....
Pozdrav : RAUL
clipper.1054broker,
-> #1036, raul> Moze li mi neko reci zasto se u CLIPPERU (S87) kad
> koristim naredbu SET KEY TO ime procedure ( na primjer
> dodjelim da mi F! pozove neku proceduru ). Zasto sve radi
> jedno 5-6 puta dobro , a onda se na stisak tatsera pojave
> brljotine, tj. maska se pokvari.
clipper.1055d.petrovic,
-> #1053, raulĂ> Zdravo. Imam Clipper S87, a zelio bih da koristim misa. Moze li mi
Ă> neko
Nemoj da se ljutiš ako ti je to neko već rekao ali... pređi
brate na 5.01 i uživaj.
clipper.1056rolandz,
-> #1047, zalexEvo mislim da mogu da ti pomognem, ostavi mi poruku.
Volume in drive C is DEEP PURPLE Volume Serial Number is 0000-0000 Directory
of C:ĐCLIP87ĐBEZVEZE . <DIR> 11-05-92 6:18p.. <DIR>
11-05-92 6:18pCLIPPER EXE 79121 12-21-87 2:00aPLINK86 EXE
83834 12-21-87 2:00aCLIPPER LIB 307019 12-21-87 2:00aEXTEND LIB
82189 12-21-87 2:00aOVERLAY LIB 7104 12-21-87 2:00aDEBUG OBJ
57986 12-21-87 2:00aTEXT TXT 0 11-05-92 6:19p 9 file(s)
617253 bytes 15232640 bytes free
rastumaci mrzelo me je da kucam a sad necu da prekidam vezu zbog greše
pozdrav or RolandZ a.
clipper.1057banex,
-> #1053, raul>> Zdravo. Imam Clipper S87, a zelio bih da koristim misa. Moze li mi
>> neko reci kako to da uradim. Imam CLIPGRAP21 i Hercules karticu.
Ima nekoliko lib-ova koji su namenjeni toj stvari, nisam
ni jednu probao ( nisam ni imao miša do sada ;) ali se iz
gomile može izabrati ono što tebi naviše odgovara. Probaj
ovu koju sam ti zakačio uz poruku, imaš i mali primer kako
treba da izgledaju rutine a rađena je asembleru. Samo
ulinkuješ bmouse.obj uz tvoje .obj datoteke, i trebalo bi da
radi. Ako ti ne odgovara, viči da pošaljem neku drugu.
PS. Nema veze kakvu video karticu imaš...
bmouse87.arjclipper.1058banex,
-> #1055, d.petrovic>> Nemoj da se ljutiš ako ti je to neko već rekao ali... pređi
>> brate na 5.01 i uživaj.
Kad smo već kod 5.01 klipera, da li neko zna u čemu je
problem kod sledećeg primera:
Source datoteke (.prg) su rađene u starom kliperu (summer 87),
i kada ih proteram kroz kliper 5.01 tako da on sam pronalazi
odgovarajuće, napravi jedan .obj koji se bez problema linkuje sa
Rtlinkom. Exe program dalje radi bez problema.
Ako te iste .prg datoteke kroz novi kliper proteram sa /m svičem,
da mi napravi za svaku po jedan .obj file, tada pri linkovanju izbaci
za svaki po jedan error i prekine rad sa porukom da su to
kliper87 funkcije (ili tako nešto ;) ?
Da li bih trebao da koristim neki svič za rtlink u tom
slučaju, nisam se baš mnogo bavio istim?