clipper.926neman,
Primetio sam da SIX NSX 1.5 prilicno usporava pristup podacima na mrezi
kada se upotrebi SET SCOPE komanda umesto kombinacije SEEK & WHILE.
Pretpostavljam da se radi o stalnom zakljucavanju & otkljucavanju indeksne
datoteke zbog kontrole opsega. Ima li neko slicinih iskustava ?
clipper.927bulaja,
-> #914, aquarius│Novi NLabSGetReader v2.25, laksi za implementaciju u source.
│Ko voli nek izvoli. Ako Bulaja misli da treba moze i u DIR.
└───
Može :), prebačeno.
clipper.928stosic,
-> #916, hercog> Zna li neko kako se koristi cudo zvano Clipper za WIN. Dobih ga na 1 3.5"HD
> disketi, instalirah, ali sad ne znam sta cu sa njim.
Bilo je o tome u CIP-u, br.3 i 4.
clipper.929stosic,
-> #925, bulaja>Sramota je da ovo pitanje ostane bez odgovora :) (ja nesto nisam pri
>vremenu, ali kad moram..), so evo ga.
O ovome sam jednom razgovarao sa Dejanom. Ideja je bila da se pitanja koja
ne spadaju u "neozbiljna" ne ostavljaju bez nekog odgovora. Ko bi vodio
racuna o tome, stvar je Redakcije.
Jesmo li u koraku sa svetom ili mozemo i korak napred?
clipper.930aquarius,
Ko ima FUNCky II nek proba.
Aquarius
funsaa.zipclipper.931aquarius,
Ko ima FUNCky II nek procita.
Aquarius
funckyds.zipclipper.932jolicm,
Potrebna pomoć
Grafička biblioteka za clipper DGE50
Pri štampanju nema veze koji je drajver za štampač učitan štampa pogrešno
kodove za broj tačaka u jednoj liniji, prvo je sa originalk drajverom štampao
(slao kontrolne karaktere) za duzinu linije obrnuto, prvo high pa zatim low
bajt. Kada sam "ručno" izmenuo kodove u drajveru low high bajt dobro pošalje, a
u low smesti neku nebulozu.
Rezultat je takav da štampač pri štampanju grafike ne dobije prave podatke o
broju bajtova koji slede za grafiku u jednoj liniji, pa odštampa deo grafičke
linije ispravno , a ostatak kao karakuke.
Da li je neko od Vas imao takve probleme sa DGE v5.0 i ako je imao kako ih je
rešio ?
POMOĆ JE POTREBNA HITNO.
clipper.933bpekic,
-> #932, jolicmDaj jos neki podatak;
- Jesi li isto probao sa DGE 4.0
- Koji stampac biras
- STA stampas (grafikon ili nesto drugo
- Kakva ti je inicijalizacija stampe,
Inace ja koristim FLIPPER, mislim da izmedju ostalog, efikasnije koristi
drajvere za stampac.
Pozdrav.
clipper.934jolicm,
-> #933, bpekic>> Daj još neki podatak;
Prvi put se susrećem sa DGE rutinama.
Drajver za štampač sam probao , sve raspolozive za crno bele štanpače.
Sa bilo kojom inicijalizacijom, portrant, landskape .. neće!
Inače rešio sam problem štampe na krajnje grub način.
Prvo odštampam grafikon u datoteku, a zatim iz datoteke čitam red po red
grafike i ispravljam šta se da ispraviti i to tako štampam.
>> Inače ja koristim FLIPPER
Molim te nabroj mi neke prednosti nad DGE., pa se mozda i ja odlučim za
flipper.
clipper.935dzoric,
Evo jos jednom da ponovim problem, posto mi prosli put niko nije
pomogao. Naime, trebam da na A4 formatu stampam izvestaje koji
imaju po dvadesetak kolona u redu. To su knjige koje su potrebne
za vodjenje STR radnji (knjige rashoda, prihoda, itd...).
Do sada sam ih stampao kondenzovano u 3-4 reda, ali su dosta
nepregledne kao u prilozenom skracenom primeru:
GGG STRANA: 1
Prodavnica: KOMISION 1
KNJIGA RASHODA
U periodu od: 01.01.94. do: 11.11.94.
=========================================================
1 Datum Br.dokumenta Opis
---------------------------------------------------------
Materijalni trosk. Nematerijalni Obracunate
2 i amortizacija troskovi plate
---------------------------------------------------------
Razlika u Obracunati Prodajna vre-
3 ceni porez dnost robe
---------------------------------------------------------
UKUPNI Izdaci za hum. Izdaci za re-
4 RASHODI zdravstv. nauku prezentaciju
=========================================================
1 01.05.94 4 ULAZNA KALKULACIJA
2 0,00 0,00 0,00
3 77,56 33,44 405,00
4 294,00 0,00 0,00
-------------------------------------------------------
1 10.11.94 44 ULAZNA KALKULACIJA
2 0,00 0,00 0,00
3 508,30 356,70 4.397,00
4 3.532,00 0,00 0,00
-------------------------------------------------------
...
...
...
ITD
Da li se neko (a sigurno jeste) bavio ovim problemom, i ako
moze da mi predlozi neko elegantnije resenje.
__Dejan__
clipper.936bulaja,
-> #935, dzoric│Evo jos jednom da ponovim problem, posto mi prosli put niko nije
│pomogao. Naime, trebam da na A4 formatu stampam izvestaje koji
│imaju po dvadesetak kolona u redu. To su knjige koje su potrebne
│za vodjenje STR radnji (knjige rashoda, prihoda, itd...).
└───
Ako se ne varam, sve te knjige su na po dve A4 strane, tako da će
najbolje biti da ih štampaš na dva odvojena lista, koja ćeš zatim
jednostavno spojiti po sredini i dobiti A3 list sa rasporedom kolona
kao u standardnim knjigama. Predlažem ti ovde rešenje koje kompletan
izveštaj odnosno štampanje tretira kao da će ići na A3 format i štampa
ga u datoteku, a zatim posebna procedura štampa levu i desnu A4 stranu
i odvojeno ih štampa - tvoje je samo da posle spojiš strane :).
Dole data procedura se oslanja na funkciju Print_String (<cString>)
koju ćeš morati sam da napišeš (mada je verovatno već imaš gotovu:) i
koja izbacuje na štampač željeni string (u našem slučaju celu stranu),
uz sve potrobne kontrole uspelosti štampanja. Da ne bi ovde suviše
komplikovao, ova moja procedura za razdvajanje strana ne proverava
status koji mu funkcija Print_String() vraća (da li je štampanje
uspelo ili ne), tako da ćeš i to trebati da dodaš :).
Ovde se podrazumeva da ne koristiš nikakve specijalne kodove za
štampač, tj. strana se seče na pola tamo gde si rekao da je margina.
Štampanje sa kontrolnim kodovima nije problem ugraditi (proceduri se
prosledi i lista svih mogućih specijalnih kodova koje zatim uzima u
obzir za odredjivanje realnog mesta podele strane), pa ako ti je to
potrebno možeš dodati :).
#define FF Chr(12)
**** -------------------------------- ****
PROC Prn_PolaA3 (cFileName, nSredina)
/*
Dakle kao argument funkciji proslediš naziv datoteke u koju si
smestio izveštaj i broj kolone na kojoj hoćeš da se razgraniči
leva od desne strane (npr. 80).
*/
LOCAL xFile, cLine
LOCAL cPage1, cPage2
xFile := FOpen (cFileName, FO_READ)
IF Ferror() != 0
Alert ("Greška prilikom otvaranja print datoteke!")
RETURN
ENDIF
cPage1 := ""
cPage2 := ""
DO WHILE .T.
IF FEOF()
Print_String(cPage1 + FF)
Print_String(cPage2 + FF)
EXIT
ENDIF
cLine := FReadLn (xFile, 1, 255)
IF (cLine == FF)
// prazan red sa Form Feed-om u izveštaju
// bi trebao da znači kraj strane :)
Print_String(cPage1 + FF)
Print_String(cPage2 + FF)
cPage1 := ""
cPage2 := ""
ELSE
/*
u slučaju da budeš modifikovao proceduru da uzima u
obzir i specijalne kodove za štampanje, ovde bi prvo
trebao da proračunaš realnu <nSredina> za dati red.
*/
cPage1 += Left(cLine, nSredina)
cPage2 += Stuff(cLine, 1, nSredina, "")
ENDIF
ENDDO
FClose(xFile)
RETURN
**** -------------------------------- ****
FUNC Print_String (cString)
/*
U ovoj funkciji treba prosledjeni <cString> proslediti na
štampanje bez ikakvog dodatnog formatiranja, samo uz kontrolu
uspelosti štampanja (naravno trebalo bi dresirati i prethodnu
proc da obradjuje slučajeve neuspelog štampanja:).
*/
// Place your code here :)
RETURN (.T.)
/*
* Copyright (c) 1994 Jovan Bulajić
* Free usage granted for Sezam users
* O:)
*/
clipper.937mdrazic,
-> #935, dzoric> Evo jos jednom da ponovim problem, posto mi prosli put niko nije
> pomogao. Naime, trebam da na A4 formatu stampam izvestaje koji
> imaju po dvadesetak kolona u redu. To su knjige koje su potrebne
Predlažem dva rešenja.
Prvo, online. Izveštaj kada praviš, baferišeš u jedan niz (listu).
Kada popuniš broj linija na strani ili završiš izveštaj tada odštampaš
otprilike ovako:
aeval( aLinije, šđcLinijađ QQout(substr(cLinija, 1, 80)) ć )
aeval( aLinije, šđcLinijađ QQout(substr(cLinija, 81, 80)) ć )
aeval( aLinije, šđcLinijađ QQout(substr(cLinija,161, 80)) ć )
itd.
Široka strana ide na nekoliko uzastopnih užih, pa se spoje.
Drugo, postprocessing. Izgenerišeš izveštaj u fajl (što svima prepo-
ručujem), pa kod štampe koristiš spoljni program (filter) koji seče
jednu traku iz dokumenta i štampa je. Recimo:
stripfil 1 80 <infile >prn
stripfil 81 80 <infile >prn
stripfil 161 80 <infile >prn
( isto: type infile đ stripfil 161 80 >prn )
gde ovaj filter radi istu stvar kao prvo rešenje. A i ne mora da je
baš filter, može i običan program pa imena fajlova da preuzimaš kroz
argumente.
Po istoj ideji možeš i da izdvajaš i određeni opseg stranica iz dugačkog
dokumenta za dalji postupak (recimo zgužvana jedna strana izveštaja).
Milan
clipper.938neman,
Interesuje me sintaksa funkcije m_aprompt() iz FUNCKY-ja.
clipper.939bpekic,
-> #935, dzoricJa sam to resio vrlo jednostavno, stampam te vrste izvestaja u sirini
koliko god zelim (kada je bila inflacija 99999999999999 milona i tada
nije bilo problema), koristim mali .COM program koji se zove
SIDEWAYS.COM.
Stampu radim na onoliko kolona koliko zelim a stampam POPREKO na
papir i nema problema. Knjige te vrste neko u kancelariji uz kaficu
smislja i mi treba da se snalazimo kako znamo.Kod STR je to posebno
uocljivo.
Dakle predlog = SIDEWAYS ili neki drugi slican program, ako nemas,
ostavi poruku - stize :)
clipper.940dzoric,
-> #938, neman>> Interesuje me sintaksa funkcije m_aprompt() iz FUNCKY-ja.
Prvi put cujem da postoji ova funkcija u FUNCky lib-u, pretrazio
sam i NG i nema. Napisi gde si naisao na ovu funkciju.
BTW, Thanks to bulaja, mdrazic i bpekic na savetima u vezi stampe.
__Dejan__
clipper.941neman,
-> #940, dzoric>>> Interesuje me sintaksa funkcije m_aprompt() iz
> FUNCKY-ja.
>
> Prvi put cujem da postoji ova funkcija u FUNCky lib-u,
> pretrazio sam i NG i nema. Napisi gde si naisao na ovu
> funkciju.
Ima, ima cak i kada je pozovem iz programa, linker ne vristi, vec crkne
pri izvrsavanju jer treba zadati parametre ;(
Hint : NG -> Apendixes -> Overviews -> Sample UDF-s
Kaze da postoji i sors, a problem mi je u tome sto jedna arhiva
( surface ili tako nesto sa prve diskete nije bila ispravna pa sam
instalaciju izvrsio bez predmetne.
clipper.942neman,
-> #939, bpekic> Dakle predlog = SIDEWAYS ili neki drugi slican program,
> ako nemas, ostavi poruku - stize :)
Imas i Onside u IBMPC\PRINTER, samo sto je prilicno komplikovan
( fontovi, velicine fontova :)
clipper.943bpekic,
-> #942, nemanProbao sam ONSIDE ali sam odmah odustao, SIDEWAYS takodje podesava
velicinu fontova i sve neophodne parametre ali je MNOGO jednostavniji
i mali pa se po potrebi moze startovati i iz aplikacije (mada ja to
ne radim). Poslao sam ti pa probaj.
clipper.944bulaja,
-> #939, bpekic│Ja sam to resio vrlo jednostavno, stampam te vrste izvestaja u sirini
│koliko god zelim (kada je bila inflacija 99999999999999 milona i tada
│nije bilo problema), koristim mali .COM program koji se zove
│SIDEWAYS.COM.
└───
To sam i ja hteo odmah da predložim dzoric-u, ali ipak bolje da prvo
razmotrimo Clipper rešenje :).
clipper.945aquarius,
-> #941, neman<> Kaze da postoji i sors, a problem mi je u tome sto jedna
<> arhiva ( surface ili tako nesto sa prve diskete nije bila
<> ispravna pa sam instalaciju izvrsio bez predmetne.
1. evo ga source c_m_apro.prg
2. eto sta se desava sa pirat instalacijama :)
3. mozemo li nekako da se organizujemo pa da se na desava ovo pod 2 ?
aquarius
c_m_apro.zipclipper.946dvesic,
-> #939, bpekic>> ostavi poruku - stize :)
Ostavljam poruku ! :))
clipper.947pzivic,
-> #943, bpekic>Probao sam ONSIDE ali sam odmah odustao, SIDEWAYS takodje podesava
>velicinu fontova i sve neophodne parametre ali je MNOGO
jednostavniji
>i mali pa se po potrebi moze startovati i iz aplikacije (mada ja to
>ne radim). Poslao sam ti pa probaj.
Zeleo bih da probam taj SIDEWAYS.COM, pa ako moze da se dobije,
bio bih jako zahvalan.
clipper.948neman,
-> #945, aquarius> 1. evo ga source c_m_apro.prg
Hvala ti :)
> 2. eto sta se desava sa pirat instalacijama :)
Pa nije pirat nego prijatelj ;) a kako je i u ovom slucaju bio primenljiv
postupak instalacije *zguraj_sve_u_isti_dir*, nisam ni trazio ponovno
snimanje. Nisam cak morao ni da menjam oznake disketa iz SideKick-a.
> 3. mozemo li nekako da se organizujemo pa da se na desava ovo pod 2 ?
Sankcije ????
clipper.949dcolak,
Evo problema za clipperaše bez knjiga o istom, rešenje se traži...
Imamo ovakvu situaciju:
INDEXNA DATOTEKA
┌─────────┬──────────┐ So, otvorim bazu i željeni index.
│Vrednost │ RECNO() │ Krećem od TOP ka BOTTOM. Kako da znam
│ │ │ do kog sam indexa po redu stigao.
│11 │ 5 │
│22 │ 1 │ Tj. recimo upravo sam ispisao '22' i recno()
│33 │ 3 │ mi je vratio '1'. Očigledno to nije prvi Index
└─────────┴──────────┘ u nizu i pravi karambol u programu.
Treba mi funkcija koja će mi nakon pristupa
broju (slogu baze) '22' dati redni broj
pointera na njega u indexnoj datoteci.
Najkraće: Funkcija koja vraća RECNO() ali za
INDEXE, so da znam koliko još imam do kraja
il' početka (npr.)
Nadam se da sam bio jasan :)
P.S.
Isključiti fore tipa: broj odakle krećeš etc. jer skačem iz TBrowseDB
čitajući samo RECNO() a to ne govori koji je to INDEX (pointer u
indexnoj datoteci) po redu...
Sledge DAMMIR!
clipper.950ikordic,
-> #949, dcolakRE: IndexNo ()
=> Evo problema za clipperaše bez knjiga o istom, rešenje se traži...
?
=> Treba mi funkcija koja će mi nakon pristupa
=> broju (slogu baze) '22' dati redni broj
=> pointera na njega u indexnoj datoteci.
Imaš par opcija. Najbolja je akrobacija sa kodnim blokovima koji se koriste
pri skakanju sa sloga na slog (skipblock) u okviru TBrowse-a. Znači svaki
put kada se pomera pokazivač, ne daš mu da to radi avtomacki, nego ubačiš
svoje kodne blokove za prelazak na n-ti slog, prelazak na početak i kraj
baze. U okviru tog bloka ostvaruješ i preračunavanje pozicije indeksa,
obzirom da krećeš sa vrha tabele, ažuriranje brojača je trivijalno.
Alternativno, možeš da pogledaš i SIx CDX/NSX biblioteku koja ima funkciju
Sx_KeyNo () koja radi upravo to što ti treba. Negotivna varijanta je što
moraš da koristiš pomenutu biblioteku koja je jedan od faktora koji
izazivaju famozni VMIF.
Takođe pogledaj i poruku 10.559 by goxx, tamo se nalazi opis neke osnovne
rutine koja radi to. Takođe, misim da ja bulaja slao neko programče koje ima
scroll bar, a on mora da radi na istom principu.
=> Isključiti fore tipa: broj odakle krećeš etc. jer skačem iz TBrowseDB
=> čitajući samo RECNO() a to ne govori koji je to INDEX (pointer u
=> indexnoj datoteci) po redu...
Ovo baš nisam najbolje razumeo, 'ajde ponovo. Skačeš ODAKLE u GDE? Ako si
već u TBrowse-u, opisana metoda ti ne pravi nikakve probleme. Ali ako treba
da uletiš u TBrowse sa podatkom koji je redni broj u indeksnoj datoteci,
stvar je malko komplikovanija ali ne i nerešiva.
clipper.951dvesic,
-> #950, ikordic>> moras da koristis pomenutu biblioteku koja je jedan od faktora
>> koji izazivaju famozni VMIF.
Ne vise, ne vise ....
Ziveo Six 2.0 ! :)))
Hip hip, hura, hip hip hura .. :))
clipper.952jolicm,
-> #951, dvesicZdravo.
>> Ziveo Six 2.0 ! :)))
Ja sam preko nekih veza nabavio upgrade sa sixnsx 1.5 na 2.0, DVE datoteke
sa upozorenjem da je to upgrade 1 i 3, a da mi fali druga potrebna datoteka.
Dal mozes da mi napišeš koje datoteke imaš, pa da ti ja dojavim šta mi treba,
Pa ako to nije veliko da mi pošalješ na mail. ??? :) :) :)
Pozdrav
clipper.953bulaja,
-> #949, dcolak│ Treba mi funkcija koja će mi nakon pristupa broju (slogu baze)
│ '22' dati redni broj pointera na njega u indexnoj datoteci.
└───
Najlakše je ukoliko koristiš SIx RDD, imaš njegovu funkciju SX_KeyNo()
koja vraća baš to - poziciju (redni broj) trenutnog ključa unutar
indeksa. Za standardni DBFNTX rešenje je u pisanju novih funkcija za
skakanje po bazi umesto dbSkip(), dbGoTo(), dbGoTop() i dbGoBottom()
koje će raditi isto to uz održavanje realnog broja ključa unutar
indeksa (posle se te funkcije bez problema ubace u TBrowse).
clipper.954neman,
-> #951, dvesic>>> moras da koristis pomenutu biblioteku koja je jedan od
>>> faktora koji izazivaju famozni VMIF.
> Ne vise, ne vise ....
> Ziveo Six 2.0 ! :)))
Koja verzija 2.00, 2.01.01 2.0x.0x ???
Pa oni su je pacovali za krace vreme vise puta nego bilo sta sto sam do
sada video. Ona kobasica sa ispravljenim bagovima prilicno neprijatno
deluje :( To je bio glavni razlog da NE ukljucujem tu verziju ( trenutno
v 2.01.02 ). A ljudi koji unose podatke navikli su da svremena na vreme
iskoci po neki VMIF, razbije im monotoniju ;)
Inace, da li koristis FUNCKY II biblioteku uz SIX 2, i da li neko ima
iskustva sa takovm kombinacijom ?
clipper.955st.pol,
╔═══════════════════════════════════════════════════════════════════╗
║ Zavod za zdravstvenu zastitu studenata ║█
║ Univerziteta u Beogradu ║█
║ Proleterskih brigada 57 ║█
║ BEOGRAD ║█
║ ║█
║ raspisuje ║█
║ ║█
║ K O N K U R S ║█
║ ║█
║ za 1 programera. ║█
║ ║█
║ Potrebna predznanja: Mrezno programiranje na Clipper-u, ║█
║ Rad sa NOVELL NetWare 3.11. ║█
║ ║█
║ Pozeljna predznanja: Programiranje na C/C++, ║█
║ Osnovi projektovanja IS ║█
║ ║█
║ Potrebna skola.....: Nepotrebna ;). Ali od toga zavisi ║█
║ koeficijent, tj. plata ;(, znaci ║█
║ pozeljan faks, bilo koji, ali ║█
║ nije uslov. ║█
║ ║█
║ Posao je vrlo interesantan, radi se na projektovanju ║█
║ Zdravstvenog Informacionog Sistema (ZIS), sve su jos ║█
║ pocetni koraci, nije kasno da se ukljucite. Vlada RS ║█
║ je odlucila da finansira, izgradnju jedinstvenog ZIS ║█
║ Srbije, a da ustanove koje su najdalje otisle u raz- ║█
║ voju vlastitih IS, budu referentne. Nasa ustanova je ║█
║ jed(i)na ;) od tih, pa izvolite .... ║█
║ ║█
║ Sve prijave i dodatna obavestenja na mail st.pol ║█
║ ║█
║ Zvanican konkurs ce biti uskoro u Politici, ali ne ║█
║ nameravam da primim nekoga ko ne prati SEZAM ;) ║█
║ ║█
╚═══════════════════════════════════════════════════════════════════╝█
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
clipper.956d.petrovic,
-> #925, bulaja> TB:skipBlock := š đnSkipđ ;
> Skip_Niz (nSkip, čnIndex, Len(aTabela)) ć
Dozvoli ljudima da odluče O;)
U commands.ch ide:
#define AR_SKIPBLOCK(atBro, aIndex, ar, arLen);
atBro:SkipBlock := šđn, sađ sa := aIndex,;
IIF(aIndex + n > arLen, aIndex := arLen,;
IIF(aIndex + n < 1, aIndex := 1, aIndex += n)), aIndex - sać
a u program:
AR_SKIPBLOCK(ar_Bro, aIndex, chArray, arLen)
Ovo sam valjda modifikovao i zaboraavio sam zašto :))
atBro - Objekat
aIndex - Indeks niza
ar - Niz, ubij me da se setim zašto ga prenosim ;(
arLen - Dužina (šta li će ona tu kad je niz već prisutan ?) :)
clipper.957d.petrovic,
I am back :))
clipper.958dcolak,
-> #950, ikordic│ baze. U okviru tog bloka ostvaruješ i preračunavanje pozicije indeksa,
│ obzirom da krećeš sa vrha tabele, ažuriranje brojača je trivijalno.
Da, upravo ovo sam i uradio... Well, neka ga tako :) Nego, još
jedno pitanje...
Kako da napravim senku ispod svojih BOX-ova? Al' onu lepu, što samo
izmeni boje pozadine...
Tj. da li postoji restscreen kome se može odabrati samo prenos
karaktera ali ne i njihovih atributa (ja mu zadajem boju ispisa)?
Sada mi je senka CRNA i neprovidna ;)
Sledge DAMMIR!
clipper.959rccomp,
-> #958, dcolakProbaj sa funkcijom Shadow() . Ima je na Sezamu u ClipTool.arj
clipper.960mileusna,
-> #958, dcolakEvo ti dan .PRG za senku ispoBOX-a.
Srecno!
shadow.prgclipper.961mdrazic,
-> #949, dcolak> Treba mi funkcija koja će mi nakon pristupa
> broju (slogu baze) '22' dati redni broj
> pointera na njega u indexnoj datoteci.
>
> Najkraće: Funkcija koja vraća RECNO() ali za
> INDEXE, so da znam koliko još imam do kraja
> il' početka (npr.)
Manite se ćorava posla ako nećete da prebrojavate zapise od početka
do kraja.
Jedino rešenje ti je SiX driver ili Comix (slično prethodnom) koji
imaju podršku ovoj opciji.
Međutim, i dalje problem ostaje položaj u tabeli pod filtrom, ili
recimo samo ako imaš brisane zapise i set deleted on. Problem je u
tome što u indeksnom fajlu nema informacija koji je zapis brisan a
koji nije.
Prelistaj temu od juna naovamo, čini mi se da je neko rekao kako
takve funkcije iz SiX drajvera rade sporo. Ja ih ne koristim pa to
ne mogu potvrditi.
Milan
clipper.963dvesic,
-> #954, neman>> Koja verzija 2.00, 2.01.01 2.0x.0x ???
2.01.02
>> Inace, da li koristis FUNCKY II biblioteku uz SIX 2, i da li
>> neko ima iskustva sa takovm kombinacijom ?
Ne, za to se obrati bulaji.
clipper.964mileusna,
-> #949, dcolak??Kako saznati trenutni broj sloga u aktivnom indeksu??
Jedino rešenje koje ja znam zove se SIXCDX i njegova funkcija SX_KeyNo().
Avaj. Funkcija je vrlo spora, a naročito kada su u pitanju velike baze.
Može da posluži ako ti njen rezultat nije često potreban.
clipper.965cnenad,
Problemčina koju ne mogu da rešim, a tiče se BU_MENU.
SET KEY... // vezivanje funkcijskih tastera za određene procedure
WHILE lnIz<9
CLS
IF lnIz1==1
Tabela()
ENDIF
WHILE .t.
// deo koda za iscrtavanje ekrana
@22,1 PROMPT " Unos " HOTKEY 'U' MESSAGE "UNOS OSTALIH PODATAKA"
// ovde dolazi još 6 linija za druge izbore
CLEAR TYPEAHEAD
MENU TO lnMizb // lnMizb deklarisan kao LOCAL numerik.
DO CASE
CASE lnMizb==1
Prg1()
// case za ostale linije
ENDCASE
END WHILE
END WHILE
RETURN
Nakon aktiviranja programa prvo ide procedura TABELA koja je običan TBROWSE
ali iz nje pritiskom na funkcijsku dirku F5 mogu ući u proceduru u kojoj se
dodaju novi podaci UNOS()
Ako izađem iz TBROWSE (Tabela()) sa ESC, i izaberem prvi izbor iz MENU TO,
aktiviram PRG1() za unos nekih drugih podataka koji nemaju veze sa onim iz
Tabela() -> F5. Kao proveru ispravnosti unosa podataka u PRG1() nakon
GET/READ opet sam stavio petlju WHILE .t. i izbor DA, NE realizovan preko
MENU TO odnosno BU_MENU ali pošto koristim BUMENU.CH radim sa 'standardnim'
naredbama. Sve se lepo u toj proceduri završi kako treba, vratim se u petlju
u glavni program, na F5 aktiviram TABELA(), u njemu opet na F5 proceduru
UNOS() (unos podataka), unesem podatke. Opet je tu nakon unosa provera sa
MENU TO. Kada ispiše pitanje 'DA' 'NE' u toj proceduri UNOS() i pokrenem
strelice levo desno dobijam ispod tog izbora kompletan izbor koji mi se nudi
u glavnoj proceduri (dakle onaj koji sam gore naveo). Ako ne izabrem ništa,
sa ESC se vraćam u glavnu proceduru i kad pokušam da mrdnem osvetljenje
izbora sačeka me poruka:
BASE/1132 BOUND ERROR: ARRAY ACCESS
Called from Bu_Menuto(236)
Called from Test(182) // test je inače moja glavna procedura a linija
182 je ona gde stoji MENU TO lnMizb
U nekim slučajevima je dodatno ispisivao i PROMPT(261) ?!?!?
Napominjem da je u svakoj proceduri u kojoj je iskorišćeno MENU TO,
memorijska promenljiva deklarisana kao LOCAL numerik sa potpuno različitim
imenom.
Šta se ovo dođavola događa i kako ovo rešiti ?
BTW, da li se nekako može izbeći da MESSAGE.. CENTER seče eventualno RAM
iscrtan sa n,n1 to nn,nn1 ?
Ajde kad već ovoliko napisah da dodam i ovo :)
Primer pomoću kojeg Spence rešava problem kod GET/VALID unosa koji je
Nenad stavio u zadnji Savetnik ili ima BUG ili je to Feauture :)
On normalno radi ono za šta je namenjen jer nakon pritiska na PgUP ili Down
na nekom GET polju ako je korektno uneto skače na prvo koje nije kako treba
popunjeno. E sad, iz tog polja čak i kad se unese korektna vrednost koju
ispituje VALID ne može se strelicama na gore vratiti na prethodna polja nego
je moguće ići samo na dole nakon unosa korektne vrednosti i to naravno uz
pritisak na taster ENTER. Ima li rešenja za ovo ?
clipper.966dzoric,
-> #955, st.pol> pocetni koraci, nije kasno da se ukljucite. Vlada RS
> je odlucila da finansira, izgradnju jedinstvenog ZIS
> Srbije, ...
Ako je 2,000 < PLATA < 10,000 eto nas :)
clipper.967kuki,
-> #966, dzoric> Ako je 2,000 < PLATA < 10,000 eto nas :)
a ako je PLATA > 10000 ....
pa naučiću kliper za te pare :))))
clipper.968dpredovic,
-> #963, dvesic>>> Koja verzija 2.00, 2.01.01 2.0x.0x ???
>
> 2.01.02
žoveče, odakle ti to? Dal si dobio tako, ili imaš onaj patch 01/08 ->
11/08? Daj da uradimo nešto u svakom slučaju ;), ubi me ono što su
"popravili" rad sa memo poljima...
clipper.969dpredovic,
-> #954, neman> Inace, da li koristis FUNCKY II biblioteku uz SIX 2, i da li
> neko ima iskustva sa takovm kombinacijom ?
Da, ide sasvim lepo, ne tangiraju se ni 2%.
clipper.970d.petrovic,
-> #950, ikordic> Imaš par opcija. Najbolja je akrobacija sa kodnim blokovima
> koji se koriste pri skakanju sa sloga na slog (skipblock) u
> okviru TBrowse-a. Znači svaki put kada se pomera pokazivač, ne
> daš mu da to radi avtomacki, nego ubačiš
Ne znam zašta njemu treba, ali znam da to meni ne pomaže :(
Elem, predefinišem ja skip, ali procedura movekey() koja stoji na
otherwise u petlji za tbrowse osim što skipuje može i da potraži
"po slovu", ako je takav indeks i ako je pritisnuto slovo. E, kad
Seek uradi svoje možeš da zaboraviš di si bio :(
clipper.971d.petrovic,
Treba mi funkcija u Cl 5.01 koja vraća ima li i koliko ima slobodne
XMS i EMS memorije.
clipper.972dcolak,
-> #961, mdrazic│ Prelistaj temu od juna naovamo, čini mi se da je neko rekao kako
│ takve funkcije iz SiX drajvera rade sporo. Ja ih ne koristim pa to
│ ne mogu potvrditi.
Prvo da se zahvalim svim ljudima na pomoći a onda da nastavim ;)
Elem, koristim Clipper 5.01 i nije mi baš najčistije to sa SiX
drajverom. Tj. znam da 5.2 ima opciju biranja različitih indexa
(sem ntx) no nisam primetio da to ima i 5.0..
So, kako sam ukapirao ostaje mi da koristim neku biblioteku. Koje
vi koristite u svakodnevnom radu? Meni nedostaje meni sistem. Sve
što sam video ovde (RSOFT) na Sezamu ne zadovoljava :(
Dal' da se bacim na izmišljanje tople vode (meniji)?
Sledge DAMMIR!
clipper.973dcolak,
-> #964, mileusna│ Avaj. Funkcija je vrlo spora, a naročito kada su u pitanju velike baze.
│ Može da posluži ako ti njen rezultat nije često potreban.
Biće poprilično velike... Nego imam još jedan problem. Kada koristim
SET FILTER često mi javi error : TOO MANY LABELS. Tj. ide nešto u
stilu:
set filter to upper(ime) = ime .and upper(prezime) = prezime itd itd..
Očigledno "svari" samo određeni broj stavki u postavljanju filtera.
Šta da radim kad bih imao mnogo više polja nego sada?
Postoji li u Clipperu nešto kao LIKE u SQL-u ili čemu već? Tj. da
uporedi ali "logično?"
Sledge DAMMIR!
clipper.974ikordic,
-> #951, dvesicRE:
=> Ziveo Six 2.0 ! :)))
Priznaj, ovo si namerno napisao, samo da bi milion paćenika udarilo reply na
tvoju poruku ;) Ozbiljno, jel' to 101% sigurno?
Hoću konačno da pređem na Clipper 5.2 (taman kad izlazi 5.3 :)) i neki SIx,
i zanime me neka kombinacija koja stabilno radi. Ako ponovo počnu veselja,
ja ostajem na 5.01 a vi se zamajavajte :) Ondak ću opet da probam za pola
godine i tako u krug ... :)
clipper.975ikordic,
-> #958, dcolakRE: Shadow
=> Kako da napravim senku ispod svojih BOX-ova? Al' onu lepu, što samo
=> izmeni boje pozadine...
=> Tj. da li postoji restscreen kome se može odabrati samo prenos
=> karaktera ali ne i njihovih atributa (ja mu zadajem boju ispisa)?
Pa, sa SaveScreen () mu otmeš ekran u neki string. Svaki prvi (neparni)
karakter u stringu je znak a svaki drugi (parni) predstavlja atribut tog
znaka. Znači, kad pročitaš ekran, napraviš neku petlju u kojoj menjaš
postojeći atribut nekim drugim i tako postizavaš senku. Naravno, menjanje
atributa sprovodi samo tamo gde treba da se pojavi senka, zbog uštede
vremena. Realizacija sopstvenih funkcija je jednostavna.
clipper.976ikordic,
-> #961, mdrazicRE: IndexNo ()
=> Manite se ćorava posla ako nećete da prebrojavate zapise od početka
=> do kraja.
=> Jedino rešenje ti je SiX driver ili Comix (slično prethodnom) koji
=> imaju podršku ovoj opciji.
=> Međutim, i dalje problem ostaje položaj u tabeli pod filtrom, ili
=> recimo samo ako imaš brisane zapise i set deleted on. Problem je u
Skačeš sebi u usta :) ipak je jedino rešenje pisanje sopstvenih funkcija za
mrdanje po bazi, koje se mogu ukorporirati u kodne blokove u okviru
TBrowse-a. Oslanjanje na eksterne biblioteke uglavnom donosi više problema
no koristi, pomenuto usporenje je samo jedan od njih.
Posle par traumatoznih iskustava, sve više razumem nbatocanina po pitanju
odbojnosti korišćenja stranjskih tela u sopstvenim aplikacijama.
clipper.978ikordic,
-> #965, cnenadRE: Born to code in Clipper ;)))
=> Problemčina koju ne mogu da rešim, a tiče se BU_MENU.
Ja i inače slabo kapiram, al' tvoja poruka je totalna destrukcija :) Reč
jednu nisam shvatio, a pročitao sam opis problema par puta i gledao u ono
čudo od listinga ;) žisto da poruka ne stoji bez veze, dva kratka saveta:
* Koristi malo više razmaknicu pri pisanju programa. Primeti koliko je
lepše napisati:
IF nIzbor == 1 .AND. lIzlaz == .F.
Tabela ()
ELSE
Msg ( "Kraj rada ... ", RED )
END IF
nego
IF Izb==1.AND.Izl==.F.
Tabela()
ELSE
Msg("Kraj rada...",RED)
ENDIF
Osim što je lepše, daleko je jednostavnije uočavati tako izdvojene
logičke celine u okviru naredbe, čitati i održavati program. Ja sam se
jednom davno posle par dana mučenja navikao i NIKAD mi se nije desilo
da mi treba neki SNAP ili PR za ulepšavanje sorseva. I davaj bre malo
duža imena promenljvama :)
* SetKey () izbegavati. Apsolutno ne postoji situacija u kojoj se ova
naredba/funkcija ne može zameniti sopstvenom, daleko fleksibilnijom
opcijom. žak i da je tako, pokušaj da situaciju realizuješ preko neke
CASE petlje (event programming - tako beše?) kao kod TBrowse-a. Na taj
način će ti slabo zatrebati pomenuti anahronizam. A i bolje se
pripremaš za WinMain () ... :)
clipper.979d.petrovic,
-> #965, cnenad> Problemčina koju ne mogu da rešim, a tiče se BU_MENU.
Otkud ja sad da znam šta je u tim linijama bulajinog menija
(ja koristim ver 1.2 izmenjenu po želji O:)) )
Prevedi svoj prg sa "/p" pa vidi kako je to složio pretrpocesor
i prati cld-om
clipper.980dvesic,
-> #968, dpredovic>> Covece, odakle ti to? Dal si dobio tako, ili imas onaj patch
>> 01/08 -> 11/08? Daj da uradimo nesto u svakom slucaju ;), ubi
>> me ono sto su
Patch #1 (Six 2.01.00 -> Six 2.01.01)
int201-1.zipclipper.981dvesic,
-> #968, dpredovic Patch #2 (Six 2.01.01 -> Six 2.01.02)
int201-2.zipclipper.982bulaja,
-> #961, mdrazic│Međutim, i dalje problem ostaje položaj u tabeli pod filtrom, ili
│recimo samo ako imaš brisane zapise i set deleted on. Problem je u
│tome što u indeksnom fajlu nema informacija koji je zapis brisan a
│koji nije.
└───
Za filter mora da se održava trenutni record pointer, pošto SIx v1.5
funkcija koja bi to trebala da radi - ne radi :) (ne znam da li je
ispravljeno u v2.0).
Ako se ne varam, u indeksni fajl ne bi trebalo da ulaze obrisani slogovi
(ako je setovano Set Deleted On). Inače dobra je praksa (tako bar kažu u
SIx dokumentaciji:) da se (kod CDX ili NSX indeksa) uvek drži jedan tag
indeksiran po Deleted(). Njega koristi Mach SIx za optimizaciju, tako da
i kod Set Deleted On ne dolazi do usporenja prilikom kretanja po bazi.
clipper.983bulaja,
-> #963, dvesic││ Inace, da li koristis FUNCKY II biblioteku uz SIX 2, i da li
││ neko ima iskustva sa takovm kombinacijom ?
│└───
│ Ne, za to se obrati bulaji.
└───
Ja još nisam koristio SIx v2.0 (shame on me:), ali usudiću se da ga
ubacim umesto v1.5 u neke aplikacije koje koriste i FUNCky, pa ćemo
videti :).
clipper.984bulaja,
-> #965, cnenad│Problemčina koju ne mogu da rešim, a tiče se BU_MENU.
│...
│BASE/1132 BOUND ERROR: ARRAY ACCESS
│Called from Bu_Menuto(236)
└───
Pretpostavljam da je u pitanju BuMenu v1.4 i da nisi ništa dirao u
osnovnom source-u biblioteke. Onda je linija 236 sledeća:
IF EVAL (bUpper, aMenuHotKey[i]) == EVAL (bUpper, CHR(kkk))
odnosno to je deo gde se ispituje da li je pritisnut taster neki od hot
key-ova. Bound Error Array Access grešku može javiti jedino pristup nizu
(odnosno pokušaj pristupa:) aMenuHotKey[] van njegovog opsega. Pošto se
<i> vrti od jedan do <nMax> koji predstavlja broj promptova (odnosno
veličinu niza u koji se oni smeštaju), onda je jako čudno kako je moguće
da se ovakva greška javi - jedino ako je dimenzija niza promenjena od
trenutka izračunavanja <nMax> (a on se izračunava odmah na početku
funkcije, pre ulaska u glavnu petlju). Još je čudnije to što se greška
javlja prilikom pokušaja "mrdanja osvetljenja izbora" :), pošto se pre
mesta greške nalazi kod koji procesira sve tastere za kretanje (kurzori,
Home, End, PgUp, PgDn, Enter) i Esc, tako da se prilikom "mrdanja" taj
deo i ne izvršava (nalazi se u OTHERWISE delu glavnog CASE iskaza.
Takodje se pre toga i izvrše sve eventualne Set Key procedure.
Ono što mi se čini da bi mogao biti uzrok problema (i pored svih
misterija:) je da se još jedan bu_MenuTo() (odnosno standardni MENU TO
korišćen sa BuMenu.ch) poziva iz neke od procedura koje su nakačene na
SET KEY. Pošto BuMenu trpa sve u STATIC promenljive (biće skoro verzija
sa objektima:), znači da se ne može rekurzivno pozivati pre nego što se
završi prethodna instanca glavne funkcije (bu_MenuTo()) i resetuju
STATIC-i (a to se radi prilikom svakog izlaska iz bu_MenuTo() odnosno
izlaza iz menija na bilo koji način). Dakle proveri da li se BuMenu
poziva rekurzivno iz neke od SET KEY procedura, pa ako to nije problem
(a meni se sve čini da ipak jeste:) videćemo štaćemo dalje.
clipper.985bulaja,
-> #972, dcolak│ So, kako sam ukapirao ostaje mi da koristim neku biblioteku. Koje
│ vi koristite u svakodnevnom radu? Meni nedostaje meni sistem. Sve
│ što sam video ovde (RSOFT) na Sezamu ne zadovoljava :(
└───
Imaš BuMenu kao pristojnu O:) zamenu za standardni MENU TO sistem
(\ibmpc\clipper\bumenu14.zip). Ako misliš na kompletan dobar sistem
pull-down menija, onda to nije baš lako pronaći (iako to nije neki
naročiti programski problem). Ja imam lep :) poluzavršeni sistem
pull-down menija koji koristim za internu upotrebu, ali već godinu dana
nikako da stignem da ga upristojim za javnost. Iskreno, poslednjih
nekoliko meseci čekam da vidim šta će CA da uradi, pošto je jedan od
najavljenih noviteta u Clipper-u 5.3 (trebao bi da izadje do kraja
godine) objektno orijentisan sistem menija.
clipper.986dcolak,
-> #970, d.petrovic│ Elem, predefinišem ja skip, ali procedura movekey() koja stoji na
│ otherwise u petlji za tbrowse osim što skipuje može i da potraži
│ "po slovu", ako je takav indeks i ako je pritisnuto slovo. E, kad
│ Seek uradi svoje možeš da zaboraviš di si bio :(
Isti problem. Any Solution? Nekako mi je bezvezno da nema rešenja :)
Osim onog SIX ili kako već? :) Jel' to biblioteka?
Sledge DAMMIR!
clipper.987cnenad,
-> #965, cnenadŁŁŁ Problemčina koju ne mogu da rešim, a tiče se BU_MENU.
Problemčina rešena :)))
Caka je bila u glupo postavljenoj konstrukciji programa. Naime, u glavnoj
proc. pojavljuje se prvi put MENU TO. Iz tog stanja čekanja stavio sam da na
funkcijsku dirku poziva TBROWSE, a iz njega opet na istu dirku neku levu
proceduru u kojoj se koristi opet MENU TO ali sa drugom mem. promenljivom.
E sad, on kad natrči na MENU TO lnMiz, pokaže onaj MENU TO lnMizb iz glavne
procedure. Kad sam programu uveo sankcije sve je proradilo. :)
clipper.988dcolak,
-> #985, bulaja│ nekoliko meseci čekam da vidim šta će CA da uradi, pošto je jedan od
│ najavljenih noviteta u Clipper-u 5.3 (trebao bi da izadje do kraja
│ godine) objektno orijentisan sistem menija.
Da, nikako da naletim na neki kompletan PullDownMenu kao u FoxPro...
Još uvek se lomim da li da pređem na FoxPro... Nervira me to što nemam
NG za FoxPro ;))
Sledge DAMMIR!
clipper.989neman,
-> #963, dvesic>>> Koja verzija 2.00, 2.01.01 2.0x.0x ???
>
> 2.01.02
Pa da, greska ;)
>>> Inace, da li koristis FUNCKY II biblioteku uz SIX 2, i
>>> da li neko ima iskustva sa takovm kombinacijom ?
>
> Ne, za to se obrati bulaji.
bulajo, prozvan si ;)
clipper.990dpredovic,
-> #954, neman> sada video. Ona kobasica sa ispravljenim bagovima prilicno
> neprijatno deluje :( To je bio glavni razlog da NE ukljucujem
> tu verziju ( trenutno
A one kobasice uz svaku novu podverzijicu clippera? Da čovek počupa kosu
kad vidi da je 5.2c->5.2d imao _samo_, ako me sećanje ne vara, 83
izmene.
clipper.991ikordic,
-> #970, d.petrovicRE: SKIP
=> Elem, predefinišem ja skip, ali procedura movekey() koja stoji na
=> otherwise u petlji za tbrowse osim što skipuje može i da potraži
=> "po slovu", ako je takav indeks i ako je pritisnuto slovo. E, kad
=> Seek uradi svoje možeš da zaboraviš di si bio :(
Pa, može i ovo da se odradi programski, ali jedino što mi pada na pamet
trenutno je gruba sila. Sad ću ozbiljno da se zamislim, pa ako nešto
ispadne, će javimo.
clipper.992ikordic,
-> #973, dcolakRE: SET FILTER
=> Biće poprilično velike... Nego imam još jedan problem. Kada koristim
=> SET FILTER često mi javi error : TOO MANY LABELS. Tj. ide nešto u
Ne koristi SET FILTER :)
=> Postoji li u Clipperu nešto kao LIKE u SQL-u ili čemu već? Tj. da
=> uporedi ali "logično?"
Ne razmem. Šta znači "logično"?
clipper.993ikordic,
-> #971, d.petrovicRE: Memory ()
=> Treba mi funkcija u Cl 5.01 koja vraća ima li i koliko ima slobodne
=> XMS i EMS memorije.
Za EMS možeš sa Memory ( 4 ), a XMS, koliko znam, Clipper ne koristi.
clipper.994ikordic,
-> #972, dcolakRE: UI
=> vi koristite u svakodnevnom radu? Meni nedostaje meni sistem. Sve
=> što sam video ovde (RSOFT) na Sezamu ne zadovoljava :(
Jedina koja ima zadovoljavajući odnos uložen trud/performasne je omenu.prg
koji ide uz Clipper 5.01, normalno tek nakon žešćeg prepravljanja. Sve
ostalo je, meni barem, svetlosne godine daleko od komfora, kako po pitanju
korisničkog aspekta, tako i po pitanju programiranja. Nadalje, i ako nađeš
neki dobar meni-podsistem, ne zaboravi da tu treba da dođu i radio-dugmići,
check-boxovi, alerti itd., daklem da sve bude urađeno kako treba, jer a)
različite datoteke ne surađuju kako treba i b) ne dobivaš sors uz njih.
Negde daleko u belom svetu postoji lib koji je u potpunosti Win
kompatibilan, daklem izgleda i ima sve one fazone kao i NU, al' ne znam kako
se zove. Alternativno, probaj Funcky, on ima neke grafiče menije u tekst
modu.
clipper.995hercog,
-> #988, dcolak> Još uvek se lomim da li da pređem na FoxPro... Nervira me to što nemam
> NG za FoxPro ;))
U foxprou imaš njegov help ;)
Sale
clipper.996dvesic,
-> #974, ikordic>> Priznaj, ovo si namerno napisao, samo da bi milion pacenika
>> udarilo reply na tvoju poruku ;)
Priznajem :)
>> Ozbiljno, jel' to 101% sigurno?
Pa sad, vec dva meseca svi moji programi (cirka 10 komada) rade sa
ovom kombinacijom i nije bilo (kuc, kuc, kuc) problema. VMIF-ovi su
se jedino (istina, vrlo retko) desavali prilikom debagovanja nekog
veceg programa ( >= 700 Kb) eksternim Clipper dibagerom.
Od eksternih biblioteka koristim NovLib2 (podrska Novell-u) i
prosirenje (BlxClp52.Lib) Blinkera za rad u protected modu.
Svi programi su linkovani sa Blinker-om 3.01 u svim ukusima :
Real, Dual, Extended (u zavisnosti od platforme/mreza/stanica).
Drajveri : SixCdx i SixNtx. Za sada nisam radio sa SixNsx RDD-om.
Toliko.
clipper.997dkaralic,
-> #967, kuki> a ako je PLATA > 10000 ....
> pa naučiću kliper za te pare :))))
a ako je PLATA ¸ 300 .AND. ZNAMCLIPPER == .T.
da li onda ima zainteresovanih
clipper.998d.petrovic,
-> #991, ikordic> Pa, može i ovo da se odradi programski, ali jedino što mi pada
> na pamet trenutno je gruba sila. Sad ću ozbiljno da se
> zamislim, pa ako nešto ispadne, će javimo.
Gruba sila je BAŠ gruba:
Zapamtiš RecNo(), Go Top i skipuješ dok se ne vratiš. A baza ima 485324
slogova i ti se nalazio kod "Zurić Zaharije" :(
Doduše može se i videti prvo slovo u stringu, može...
Zaboravi, osim da praviš svoj indeks (još jedan .dbf)
clipper.999d.petrovic,
-> #953, bulaja> indeksa. Za standardni DBFNTX rešenje je u pisanju novih
> funkcija za skakanje po bazi umesto dbSkip(), dbGoTo(),
> dbGoTop() i dbGoBottom()
Ovo mi se sviđa, samo, šta će ti ove poslednje dve ?
clipper.1000d.petrovic,
-> #973, dcolak> Biće poprilično velike... Nego imam još jedan problem. Kada
> koristim SET FILTER često mi javi error : TOO MANY LABELS. Tj.
> ide nešto u stilu:
Ružna navika. Prestani da koristiš filter.
clipper.1001d.petrovic,
-> #978, ikordic> * SetKey () izbegavati. Apsolutno ne postoji situacija u
> * kojoj se ova
Još bolje, ko koristi svoju funkciju za skeniranje tastature može da ubaci
u nju svoju za setkey().
clipper.1002goxx,
-> #998, d.petrovic Nema me na Sezamu par dana, pa me zatrpaše silne poruke.
■ > Pa, može i ovo da se odradi programski, ali jedino što mi pada
■ > na pamet trenutno je gruba sila. Sad ću ozbiljno da se
■...
■ Gruba sila je BAŠ gruba:
■ Zapamtiš RecNo(), Go Top i skipuješ dok se ne vratiš. A baza ima 485324
■ slogova i ti se nalazio kod "Zurić Zaharije" :(
■ ...
■ Zaboravi, osim da praviš svoj indeks (još jedan .dbf)
Pre nekog vremena sam nesto ovde pisao na ovu temu. Ja imam 286 na 12 MHZ
i sistem rada sa prebrojavanjem slogova ladno prolazi na njemu čak i sa
ogromnim datotekama. Ograničenje postoji sa brisanim slogovima i sa
filterom. Medjutim to jednostavno zaobilazim u samom projektu baze
podataka tako da nikad i ne koristim fizičko brisanje ili filter.
Možda će izaći članak o celoj ovoj temi u Računarima, ali primer je
obiman tako da ne verujem da će biti najjasniji (ako uopšte izađe :).
Celovit primer će biti na Sezamu (ili u RSOFT ili ako ne izađe poslaću
ga ovde).
Goran
clipper.1003mdrazic,
-> #976, ikordic> => Međutim, i dalje problem ostaje položaj u tabeli pod filtrom, ili
> => recimo samo ako imaš brisane zapise i set deleted on. Problem je u
>
> Skačeš sebi u usta :) ipak je jedino rešenje pisanje sopstvenih funkcija
> za mrdanje po bazi, koje se mogu ukorporirati u kodne blokove u okviru
Pa čovek je i tražio analog recno() ali pod indeksom. Ni sa recno()
nemaš pravu informaciju za slučaj filtra i brisanih zapisa. Flag za
brisanje je u tabeli, ne u indeksu, a filter koji ti postaviš nije
nigde na disku registrovan, pa ne možeš dobiti ažurnu informaciju o
'metrici' osim da neposredno sam brojiš. Možeš zapakovati to u
kodne blokove i ubrzati posao, ali i dalje je neupotrebljivo za veće
tabele.
Milan
clipper.1004mdrazic,
-> #973, dcolak> set filter to upper(ime) = ime .and upper(prezime) = prezime itd itd..
>
> Očigledno "svari" samo određeni broj stavki u postavljanju filtera.
> Šta da radim kad bih imao mnogo više polja nego sada?
Napravi funkciju
ISUPPERALL( cString ) --> lJesteIliNije
koja vraća .t. ako su sva slova velika, .f. inače pa
set filter to IsUpperAll(ime+prezime+...)
Milan
clipper.1005bulaja,
-> #978, ikordic│ A i bolje se pripremaš za WinMain () ... :)
└───
Tačnije METHOD Start() CLASS App :).
clipper.1006bulaja,
-> #999, d.petrovic││Za standardni DBFNTX rešenje je u pisanju novih funkcija za skakanje
││po bazi umesto dbSkip(), dbGoTo(), dbGoTop() i dbGoBottom()
│└───
│Ovo mi se sviđa, samo, šta će ti ove poslednje dve ?
└───
Pa da resetuješ brojač kad skočiš na početak, odnosno da proračunaš
ukupan broj slogova koji u indeksu kad skačeš na kraj. Obe funkcije su
potrebne i za ubacivanje u TBrowse metode za skok na početak/kraj baze.
clipper.1007bulaja,
┌────────────┐
│Clipper News│
└────────────┘
SuccessWare Univeils Replacable Data Driver for CA-Visual Objects
Successware, developers of the SIx Driver and SIxBase, will univeil
their newest high-performance Replaceable Data Driver (RDD) for
CA-Visual Objects at CA TechniCon in New Orleans. The new CA-VO RDD
enables applications developers to directly access and create FoxPro
tables, indexes and memo fields from within their Windows/VO
applications without the performance-burden of the ODBCC layer.
SuccessWare says future versions will add compatibility and support for
additional database formats, including HiPer-SIx (TM) (NSX/SMT) and
dBASE IV (TM) (MDX/DBT).
Further news from SuccessWare includes turning their Clipper RDD,
HiPer-SIx, into freeware. HiPer-SIx indexes and memos are supported by
most reporting/code generation systems (including R&R) and will soon be
supported in client/server via Extended System's Advantage Xbase Server
NLM and in Windows via SuccessWare's SIxBase product line. Rumor has it
that HiPer-SIx will be included with CA-Clipper 5.3.
SuccessWare, 800-683-1657, (909) 699-9657, fax (909) 695-5679.
clipper.1008bulaja,
┌────────────┐
│Clipper News│
└────────────┘
Grumpfish Releases Dual Platform and Reporting Tools
Clip-4-DOS is a linkable CA-Clipper library that allows developers to
create event-driven mouseable DOS applications. It's compatible with the
Windows API and Clip-4-Win, Grumpfish's library for creating Windows
based Clipper applications. Grupfish says applications will port easily
to CA-Visual Objects. Grumpfish Reporter 2.0, an XBase query/reporting
tool, can be linked directly into applications without additional memory
requirements. Clip-4-DOS iz US$ 249, and Reporter 2.0 is US$ 299. Goth
ship with printed and electronic documentation, source code, and
royality-free integration license.
Grumpfish, Inc., (503) 588-0737, fax (503) 588-1980.
clipper.1009dpredovic,
-> #980, dvesic> Patch #1 (Six 2.01.00 -> Six 2.01.01)
>
Ne radi posao, ovaj je 11/8 -> 18/8, meni treba 1/8 -> 11/8 :((
clipper.1010dcolak,
-> #995, hercog│> Još uvek se lomim da li da pređem na FoxPro... Nervira me to što nemam
│> NG za FoxPro ;))
│
│ U foxprou imaš njegov help ;)
Gori Help u životu nisam video. Nit context sensitive (ako je to
cs onda sam ja tramvaj), nit su lepo raspoređene komande. Dok pronađem
šta mi treba počupam svu kosu. Užas blago rečeno. BTW, ko je lud da
piše programe u Fox-ovom IDE-u? :))
Sledge DAMMIR!
clipper.1011dcolak,
-> #992, ikordic│=> Biće poprilično velike... Nego imam još jedan problem. Kada koristim
│=> SET FILTER često mi javi error : TOO MANY LABELS. Tj. ide nešto u
│
│ Ne koristi SET FILTER :)
Hm, al' kako onda da TBrowsujem kroz datoteku sa zadatim filterom ako
ne koristim SET FILTER... Opet kroz Skipper-a da pravim svoje rutine?
│=> Postoji li u Clipperu nešto kao LIKE u SQL-u ili čemu već? Tj. da
│=> uporedi ali "logično?"
│
│ Ne razmem. Šta znači "logično"?
Hm, recimo "Damir" .like. "amir" == .T. ;)
Sledge DAMMIR!
clipper.1012dcolak,
-> #1000, d.petrovic│> Biće poprilično velike... Nego imam još jedan problem. Kada
│> koristim SET FILTER često mi javi error : TOO MANY LABELS. Tj.
│> ide nešto u stilu:
│
│ Ružna navika. Prestani da koristiš filter.
Kako pronađene podatke da browsujem? Sa Seek skočim na prvi, pa onda
continue za sledeći i tako u beskraj. So, ovo moram da implementiram
u TBrowse? Kako će TBrowse znati koliko ima pronađenih recorda i na
osnovu toga napraviti tabelu?
BTW, pravljenje nove datoteke (swap ;)) sa pronađenim recordima mi
je suviše sporo...
Hm, možda se sa VIEW nešto da srediti (prvo što mi pada na pamet)?
Sledge DAMMIR!
clipper.1013nbatocanin,
-> #975, ikordic> RE: Shadow
> (parni) predstavlja atribut tog znaka. Znači, kad pročitaš
> ekran, napraviš neku petlju u kojoj menjaš postojeći
> atribut nekim drugim i tako postizavaš senku.
Bolji štos je sa Transform i PICTURE kombinacijom:
Transform (cScreen, Replicate("X" + Chr(?), Len(cScreen)/2)
Ovo svaki drugi simbol zameni sa atributom za crno i to je to.
clipper.1014nbatocanin,
-> #978, ikordic> A i bolje se pripremaš za WinMain () ... :)
Start(), u stvari :) A može se i promeniti :)
clipper.1015jovca.car,
-> #988, dcolak/* Još uvek se lomim da li da pređem na FoxPro... Nervira me to što nemam
/* NG za FoxPro ;))
A šta fali njegovom helpu?
clipper.1016ikordic,
-> #997, dkaralicRE: Guns for hire
=> a ako je PLATA ¸ 300 .AND. ZNAMCLIPPER == .T.
=> da li onda ima zainteresovanih
Cccc, ... nisi u trendu! Treba:
IF nPlata >= 300 .AND. lZnamClipper == .T.
pa onda sledi i:
IF nValuta == "DEM"
Maybe ()
ELSE
NoWay ()
ENDIF
;)
clipper.1017ikordic,
-> #998, d.petrovicRE: IndexNo ()
=> Gruba sila je BAŠ gruba:
=> Zapamtiš RecNo(), Go Top i skipuješ dok se ne vratiš. A baza ima
=> 485324
Sedim ja tako i mislim :) i jedino što mi pade na pamet est sledeće: naime,
kada TBrowse započinje svoj život i radni vek, on protrči kroz jedan deo
baze koristeći svoj skipblok, ne bi li skrpio dovoljno podataka da nešto i
prikaže u tabeli. Normalno, umesto tog skipbloka se može podmetnuti
sopstveni, koji će protrčati kroz celu bazu, u tabelu skembati samo slogove
koji mi se sviđaju i pritom sve njih izbrojati. Tako dobivamo nLast, koji je
najveći problem. Ovo i ne mora da se dešava u okviru TBrowse-a, moglo bi da
se načini na početku rada sa programom. Pošto se dodavanje/brisanje/izmena
slogova vrši pod neposrednom kontrolom programa, ovakav brojač je
jednostavno održavati.
Prednost ovoga jeste da se sve one gadne rabote (filteri, indeksi, brisanja,
...) mogu obraditi bez da se potežu neke spore rutine i neke leve
biblioteke.
Ja ovoliko smislio, gde su rupe u svemu ovome? Znam da ih ima al' danas beše
naporan dan ... Posebno me zanima mišljenje Mister Koudbloka ... :)
clipper.1018dcolak,
-> #1004, mdrazic│ ISUPPERALL( cString ) --> lJesteIliNije
│ koja vraća .t. ako su sva slova velika, .f. inače pa
│ set filter to IsUpperAll(ime+prezime+...)
My Mistake ;) Upoređujem promenjljive sa poljima u .DBF. So, to
otpada...
Sledge DAMMIR!
clipper.1019mdrazic,
-> #982, bulaja> Ako se ne varam, u indeksni fajl ne bi trebalo da ulaze obrisani slogovi
> (ako je setovano Set Deleted On). Inače dobra je praksa (tako bar kažu u
idu, idu... (a i što ne bi kada index ne zna da li ti radiš trenutno
sa set deleted on ili off).
> SIx dokumentaciji:) da se (kod CDX ili NSX indeksa) uvek drži jedan tag
> indeksiran po Deleted(). Njega koristi Mach SIx za optimizaciju, tako da
> i kod Set Deleted On ne dolazi do usporenja prilikom kretanja po bazi.
Bolje ti je da ubaciš u redovne indekse (tagove) 'for .not.deleted()',
a ako želiš reciklažu (i samo za to i za ne daj bože neku restauraciju)
stavi i indeks (tag) po deleted() ključu ili još bolje po glavnom
ključu ali 'for deleted()'.
Milan
clipper.1020mdrazic,
-> #996, dvesic> ovom kombinacijom i nije bilo (kuc, kuc, kuc) problema. VMIF-ovi su
> se jedino (istina, vrlo retko) desavali prilikom debagovanja nekog
> veceg programa ( >= 700 Kb) eksternim Clipper dibagerom.
To ti je verovatno dužina EXE fajla. Koliko memorije traži program da
bi radio (šta javlja linker na kraju) ? Da li ima šanse da moj paket
od 1.4MB EXE sa 380-420K prijavljene potrebne memorije radi sa SiX-om?
Milan
clipper.1021mileusna,
-> #1012, dcolak>> Kako pronađene podatke da browsujem? Sa Seek skočim na prvi, pa onda
>> continue za sledeći i tako u beskraj. So, ovo moram da implementiram
>> u TBrowse? Kako će TBrowse znati koliko ima pronađenih recorda i na
>> osnovu toga napraviti tabelu?
Kao prvo nije mi jasno kakve veze SEEK ima sa CONTINUE. CONTINUE nastavlja
pretraživanje koje je započela komanda LOCATE, dok SEEK pretražuje isključivo
indeksiranu tabelu i to od početka. Ili sam te ja pogrešno shvatio, ili si ti
pogrešno objasnio.
Ukoliko ti je tabela indeksirana po polju po kom praviš filter, na primer :
SET FILTER TO fcPseudo="MILEUSNA", a tabela ti je indeksirana po polju
fcPseudo, onda je samo potrebno napisati nove kodne blokove koji će si
pozivati prilikom izvršavanja metoda:
goTopBlock - Pozicionira pokazivač na vrh tj. blok izvršava DBSEEK(cKljuc)
goBottomBlock - Pozicionira se na kraj. Funkciju koju blok poziva treba da
izgleda ovako :
LOCAL lSoftSeek:=SET( _SET_SOFTSEEK , .T. )
SEEK SUBSTR( cKljuc,1,LEN(cKljuc)-1 ) + ;
CHR( ASC( SUBSTR(cKljuc,LEN(cKljuc)) )+1 )
SKIP -1
SET( _SET_SOFTSEEK , lSoftSeek )
RETURN NIL
skipBlock - poziva SKIP , dokle god je potrebno i pazi da pokazivač ne
izađe van vrednosti ključa. Ovo je malo komplikovanije jer
se skipBlock poziva za metode up(),down() kao i za pageUp() i
pageDown() metode.
Hteo sam ovo odmah da ti pošaljem, ali se negde izgubilo. No, ako ti treba
potrudiću se da ti pošaljem. Razlog "zagubljivanja" je taj da od kad sam prešao
na SIX jednostavno otkucam SET SCOPE i sve je isto kao da je u pitanju cela
tabela.
Ovo gore navedeno važi, kao što rekoh, samo ako je filter po polju za koji
postoji indeks. Ali šta raditi ako se radi o nečem složenijem, kao recimo
SET FILTER TO fnIsplata > 300 .AND. fnUplata > 1000. Jednom sam imao i taj
problem. Rešio sam ga tako što sam prvo vršio pretraživanje po bazi i ukoliko
bi slog zadovoljio uslov izvršio bi jedno AADD( aNađeni,RECNO() ). Takođe sam
( već pogađaš ) izvršio izmenu vrednosti za skipBlock, goTopBlock i
goBottomBlock, tako da su metode praktično vršile pomeranje kroz aNađeni. Po
meni je bolje da korisnik malo sačeka, pa zatim "piči" kroz tabelu i gore i
dole, nego da odmah dobije tabelu, pa da se kilavi kroz nju. Jedini problem
je ograničenje od 4096 elemenata za niz (u našem slučaju aNađeni). Meni više
nije ni trebalo, ali ako zatreba umesto niza se može koristiti nova tabela
(temp) koja će imati samo jedno polje ( za RECNO() iz tabele koja se filtrira
).
Ovo što sledi nisam praktično isprobao, ali bi trebalo da radi. Ukoliko
koristiš SIX, filtriranje tabele je omogućeno pravljenjem indeksa komandom
SUBINDEX koja uzima u obzir samo slogove koji zadovoljavaju SET FILTER uslov.
Normalno, moraćeš da sačekaš da prođe indeksiranje, ali ćeš zatim dobiti indeks
koji prividno filtira tabelu, i moći ćeš da radiš sve kao da je u pitanju cela
tabela.
clipper.1022nbatocanin,
-> #1011, dcolak> Hm, al' kako onda da TBrowsujem kroz datoteku sa zadatim
> filterom ako ne koristim SET FILTER... Opet kroz Skipper-a
> da pravim svoje rutine?
Mogao bi da koristiš uslovne indekse. Traje dok izdvoji slogove, ali
posle toga je sve trenutno. To je za generalno rešenje, a za
specijalizovane primene bi mogao da napraviš neki inteligentan
pregled na osnovu postojećih indeksa.
clipper.1023neman,
-> #1019, mdrazic> Bolje ti je da ubacis u redovne indekse (tagove) 'for
> .not.deleted()', a ako zelis reciklazu (i samo za to i za
Da, samo sto na mrezi brisanje sloga koji ima indekse sa uslovom
FOR !DELETED() ( NSX 1.5 ) usporava rad svih onih koji pristupaju podacima,
pa za bazu sa cestim brisanjen ne preporucujem to resenje.
clipper.1024dvesic,
-> #1020, mdrazic>> To ti je verovatno duzina EXE fajla.
Da, odnosi se na duzinu fajla.,
>> Koliko memorije trazi program da bi radio (sta javlja linker na kraju) ?
364 Kb.
>> Da li ima sanse da moj paket od 1.4MB EXE sa 380-420K prijavljene
>> potrebne memorije radi sa SiX-om?
Nema razloga da ne radi. Ako linkujes sa Rtlink-om, Six ce ti
(naravno, ako iskljucis DBFNTX koji se linkuje po default-u)
povecati Load Size za 20 - 30 Kb. Ako linkujes sa Blinkerom
lako se moze desiti da ti se Load Size smanji :))
clipper.1025dcolak,
-> #1015, jovca.car│/ * Još uvek se lomim da li da pređem na FoxPro... Nervira me to što nemam
│/ * NG za FoxPro ;))
│
│ A šta fali njegovom helpu?
Užasan je. Recimo tražim FOUND(). Kucam F, pa kucam O pa kucam U i
već sam na UPPER() :))
Sledge DAMMIR!
clipper.1026mdrazic,
-> #1018, dcolak> My Mistake ;) Upoređujem promenjljive sa poljima u .DBF. So, to
> otpada...
Ako su ti promenljive deklarisane kao private tada postavi filter
po nekoj funkciji, a u njoj ispituj koliko ti volja.
Milan
clipper.1027mdrazic,
-> #1017, ikordic> kada TBrowse započinje svoj život i radni vek, on protrči kroz jedan deo
> baze koristeći svoj skipblok, ne bi li skrpio dovoljno podataka da nešto
> i prikaže u tabeli. Normalno, umesto tog skipbloka se može podmetnuti
> sopstveni, koji će protrčati kroz celu bazu, u tabelu skembati samo
> Ja ovoliko smislio, gde su rupe u svemu ovome? Znam da ih ima al' danas
> beše naporan dan ... Posebno me zanima mišljenje Mister Koudbloka ... :)
Možeš li da zamisliš kako u mreži (makar maloj) izgleda kada samo pet
korisnika startuje browser za tabelu sa nekoliko hiljada zapisa, ili
možda par desetina hiljada? Ako ne znaš, probaj i javi nam vreme
odziva.
Milan