clipper.719ematic,
Bug or feature ?
Iako je stigao i Clipper 5.2, neki inertniji korisnici (npr. ja ;)
još koriste 'stari' 5.01 i zadovoljni su i njime (dok se ne ispita
novi ;). Međutim, prilikom apdejtovanja (dobar izraz, a ? ;) na CA
5.01a pomoću patcha sa Sezama i ponovnog prevođenja, program koji mi
je do tada sasvim lepo radio počeo je da puca. To parče je otprilike
ovakvo:
> static function swap(b)
>
> local col1 := b:getColumn(1), col2 := b:getColumn(2), searcher, slican
>
> set order to if( indexord() == PERA_ORD, MIKA_ORD, PERA_ORD )
> searcher := fieldget(indexord())
> slican := alltrim(searcher)
>
> // col1:colorBlock := NIL // Ovde CA update daje runtime grešku
> col1:colorBlock := {|x| NIL } // zato mora npr. ovako
> // col1:colorBlock := {|x| {6,2}} // ili ovako, mada preferiram gornje
>
> col2:colorBlock := { |x| if( x == searcher, {5,5},;
> if( at(slican, x) == 1, {4,4}, {6,2})) }
>
> b:setColumn(1,col2)
> b:setColumn(2,col1)
> b:configure()
> b:refreshAll()
> donebeep()
>
> return NIL
(u programu se b prenosi po referenci, to je ok)
Xmmmm ;(. Reko' ajd' da pročitam uputstvo ;). Elem, u gajdama za CA
update piše sledeće:
> Assigning invalid data to TBrowse and TBColumn
> instance variables would not generate an error in
> Clipper 5.01. Type checking during instance <- axa !
> variable assignment has been added in Clipper 5.01a
> to trap invalid values and produce a recoverable
> runtime error.
>
> The problem commonly occurs when assigning a NIL <- to li je, al' ipak...
> value to an instance variable as a result of an
> optional parameter:
> blablatruć, sledi primer...
Dobro, slažem se, nije to loše. Međutim, prilikom prvog poziva swap
f-je, colorBlock *ima vrednost NIL* za obe kolone u objektu, a ne
kodni blok (što se vidi u dibageru). Prema tome, ne razumem kako bi
bilo nedozvoljeno dodeljivati vrednost koja je već inicijalno
postavljena (ili nepostavljena, kako hoćete :)), pa prema tome i
dozvoljena ? Ako se npr. colorBlock instanci dodeljuje kodni blok,
zašto onda nije odmah definisana kao blok, već kao NIL ? Cccc,
traljavo.
Moj zaključak je da se u CA Clipperu instancama objekta koje trebaju
da imaju vrednost NIL, odnosno default vrednost (kao što sam ja
radio), ista dodeljuje preko kodnog bloka oblika { |x| NIL }. Stoga,
probajte da u starim listinzima, gde se služite sličnom tehnikom kao
ja gore, upotrebite to rešenje.
Šta kompetentniji od mene (npr. nbatoćanin) misle o ovome ?
p.s.izvinjavam se što je poruka konfuzno napisana, al' valjda će
neko da shvati šta sam mislio da kažem/pitam :)))
p.s.s. da, znam šta je to NIL, al lakše mi je da govorim o istom kao
o vrednosti :))
clipper.720pusa,
-> #682, nbatocanin> Ocigledno problemi sa memorijom. Ili da iskljuci INCREMENTAL ili
> koriscenje EMS memorije
Covek stvarno sad radi sa incremental iskljucenim ali onda slaba
korist od tog drugog linkera. Kojom opcijom da proba da iskljuci
koriscenje EMS?
Hvala unapred
clipper.721ppekovic,
-> #713, snemcev>> odreknu kompatibilnosti, a sudeći po najavama, ništa nije epohalno novo.
Što se komaptibilnosti tiče i ne treba da bude ništa epohalno
novo, ali je za mene epohalno novo sistem izmenjivih database
driver-a.
Paya
clipper.722bulaja,
**** new file ****
R:\IBMPC\CLIPPER\*.*
----------------------
dbuplus arj 66367 DBU Plus, update za Clipper 5.01 (CA)
DBU Plus
--------
This version of DBU resolves several problems found with the supplied
version. More importantly it adds some additional functionality to the
utility, including
o Network aware - access/modify files already opened share
o Import/Export memo fields
o Maximize/Minimize memoedit window
o Indexing Gauge Bar
o Dates in British Format
o Delete/Recall records with FOR, WHILE and NEXT criteria
o UDF functions within index expression including DESCEND
clipper.723bulaja,
**** new file ****
R:\IBMPC\CLIPPER\*.*
----------------------
fedo10 arj 26172 FastEdit 1.0ß, objektno orijentisana zamena za MemoEdit()
FastEdit is an object oriented editor library for use within
Clipper 5.01 applications. Since Clipper 5.01 is not truly
object oriented, FastEdit depends on external libraries, such
as Class(y) and o:Clip, to provide the OO extensions.
FastEdit is a complete replacement for the Clipper MEMOEDIT()
function. While MEMOEDIT() gives a small amount of control
over your memo editing capabilities, FastEdit gives you total
control.
FEATURES
────────
Here are a few of the things you can do under FastEdit which are impossible
using MEMOEDIT():
- Block operations. Move, copy, delete, & save are just a few of
the operations you can do on blocks.
- Embedded printer codes. Use these to support operations such as
bold and underline. These embedded codes may be displayed as part
of the text being editing (ie [BOLD] shown where bold is turned on)
or cause a color change of the specified text (ie text to be made
bold is displayed hilited).
- Rectangular Gets. Using this feature you can edit long character
strings in a rectangular area. For example, suppose you have a
character field of length 150 characters and you want to edit this
across 3 lines of 50-characters each. To do this in Clipper, you
would have to break the line into 3 different strings and do a GET
on each one. With FastEdit, just define the rectangular area and
the user will get full editing capabilities--and you don't have
to worry about the resulting string being longer than 150 characters.
- Enhanced cursor control. Including word operations, horizontal
and vertical panning, and completely configurable key control.
Emulating your favorite word-processor within Clipper is not out
of the question.
- Multiple edit windows. Display multiple edit windows on the screen
at the same time, and switch between them at the press of a key.
Or, incorporate FastEdit directly into your GET system.
- Search & Replace. (Not completely implemented yet)
- A completely configurable editor environment. The possibilities
are too numerous to mention!
clipper.724bulaja,
Evo ga Class(Y). Nazalost ovo je verzija samo za Clipper 5.0, tako
da je slabo upotrebljiva, ali bar se moze videti cemu to sluzi :).
Welcome to Class(y).lib, the object oriented extension to Clipper 5.0.
Class(y).lib allows the creation of user-defined object classes (UDOs)
in Clipper 5.0 and 5.01. It also provides all the features required to
develop fully object oriented programs. Class(y).lib elevates Clipper
to the level of languages such as C++ and Smalltalk, making it one of
the most attractive choices for software development in today's market.
The software associated with this file is being released free of charge
for evaluation purposes. It will only work with Clipper 5.0. The version
for Clipper 5.01, which is currently under production, will be sold as a
regular product. For those who have already deleted 5.0 off their hard
disks <g>, a restricted demonstration version for 5.01 is being prepared.
classy.arjclipper.725nbatocanin,
-> #707, neman> INIT FUNCTION ime_funkcije
Ovo je postojalo u Clipper-u 5.0, ali nije bilo dokumentovano. U 5.0
postoje INIT PROC i EXIT PROC i dokumentovane su.
clipper.726nbatocanin,
-> #710, dr.grba> Da li je Clipper 5.2 vertikalno kompatibilan sa Clipperom
> 5.01?
Bilo bi veoma glupo od njih da nije.
clipper.727ndragan,
-> #705, snemcev/ Al' ipak ima da se misliš što inicijalizacija traje x (x>>2) minuta...
E, šta kliperaši podrazumevaju pod inicijalizacijom? Kod nas to čudo ne
postoji, ili ne mislimo na istu stvar.
A procedura za indeksiranje je dostupna iz menija, a mušterijama u tri
rečenice objasnimo u kojim situacijama nije zgoreg da se pusti, što
piše i u uputstvu.
clipper.728dr.grba,
-> #713, snemcev>> Vidiš, ovo mi upošte nije palo na pamet kao pitanje već kao nešto što
>> treba po defaultu da važi.
E, zbog tog "defaulta" su mnogi sate i sate izgubili ):. Jasno je da
najpre STD.CH, a potom i neke druge smicalice postoje da bi se obezbedila
kompatibilnost. Uostalom, U NG fajlu lepo piše da se za obsolete komande
i funkcije ne garantuje kompatibilnost, a za ... bla-bla.
>> Zaista bi im trebao debeli razlog, pa da se
>> odreknu kompatibilnosti, a sudeći po najavama, ništa nije epohalno novo.
Već spomenu Dejan u replici na moje pitanje, "može biti da ima nekih
suptilnih različica", i time je strefio na šta sam mislio pitajući.
A što se tiče novina U Cl 5.2, već smo pričali o raznim aspektima noviteta
koji postoje...
clipper.729dr.grba,
-> #716, nbatocanin>> :(((( Bogami, ovaj Blinker i nije baš previše pouzdan. I meni se juče
>> žalili korisnici na neki Internal Error.
Znate šta? Nisam siguran, ali ovo mi smrdi na loš odnos sa programom
za keširanje diska...
---> "Tvoj kešer smrđi!". "Nje, Blinher smrđi".
clipper.730dr.grba,
-> #717, nbatocanin>> Ja ne koristim SET TMP, jerbo imam dosta RAM-a, pa rTLink i ne kreira
>> one tmpove.
Da li to znači da se rTLink inteligentno ponaša u odnosu na EMS / XMS
memoriju? Ovo je vredno eksperimentisanja...
>> ...A u NG-u lepo stoji da LIB i
>> INCLUDE sadrže *listu* kataloga, a TMP samo jedan.
Da, tačno, iako mi je promaklo... Ali opet, prvi put u MS DOS-u 6.0
sam doživeo probleme zbog toga...
Sada smo se sasvim spontano dotakli jedne teme, za koju bi možda bilo
zanimljivo da je ovde apsolviramo : kako optimalno setovati mašinu za
rad / programiranje u Clipper-u 5.xx. Ja već rekoh da sam se odrekao
keša nasuprot RAM drajva i ubrzanje je dvostruko... imam 286 mašinu
sa žestoka 2 megabajta i zver od diska čije vreme pristupa se meri
kretanjem sunca. Izbor nije baš velik, a svaka sugestija je dobrodošla.
Dakle?
clipper.731dr.grba,
-> #721, ppekovic>> Što se komaptibilnosti tiče i ne treba da bude ništa epohalno
>> novo, ali je za mene epohalno novo sistem izmenjivih database
>> driver-a.
Sa kojima ću se sigurno dooooooooooobro poigrati pre nego što se rešim
na korak definitivne migracije na Cl 5.2.
clipper.732snemcev,
-> #721, ppekovic>> Što se komaptibilnosti tiče i ne treba da bude ništa epohalno
>> novo, ali je za mene epohalno novo sistem izmenjivih database
>> driver-a.
Pa zar to nije moglo i iz Clipper-a 5.01 naredbom USE ... VIA <cDriver>?
Da nije novo to što se sad ovo da proveriti i u praksi?
clipper.733bingo,
-> #687, nbatocaninGreska takvog tipa da skrati niz u 100 puta 3ga
skrati.Aeval pravi gresku jedino u kombinaciji sa Lenom inace
dobro radi vidi sta se desava. Probano je na puno masina
i uvek se dogadja isto cak je i procenat greske isti.
Molio bih te za detaljnija objasnjenja za rad sa pregledom pre stampe
u mrezi kako to da uradim.
Pozdrav Bingo
o7ŐóÍy`▄ÝőĂl)¤áŞ}[y
box.prgclipper.734bulaja,
-> #727, ndragan││Al' ipak ima da se mislis sto inicijalizacija traje x (x>>2) minuta...
│└───
│E, sta kliperasi podrazumevaju pod inicijalizacijom? Kod nas to cudo
│ne postoji, ili ne mislimo na istu stvar.
└───
Ili si propustio pocetak diskusije :). Pod "inicijalizacijom" se
podrazumevalo vreme da se svaki put uradi ponovni INDEX ON, sto je
neko predlozio kao resenje za probleme sa corrupted indeksima.
clipper.735bulaja,
-> #730, dr.grba│Da li to znaci da se rTLink inteligentno ponasa u odnosu na EMS / XMS
│memoriju? Ovo je vredno eksperimentisanja...
└───
Znaci, ali to i nije neka inteligencija :). RTLink uzima EMS memoriju
dok je ima, kad mu nestane memorije pravi swap file na disku. Koliko
memorije memorije mu treba zavisi od aplikacije, ali cini mi se da to
nikako nije ispod 500-600 Kb.
clipper.736ppekovic,
-> #732, snemcev>> Pa zar to nije moglo i iz Clipper-a 5.01 naredbom USE ... VIA <cDriver>?
>> Da nije novo to što se sad ovo da proveriti i u praksi?
Moglo je, ali od drajver-a ni traga, a struktura je bila
poznata samo nantucket-u (CA-u).
Paya
clipper.737snemcev,
-> #727, ndragan>> E, šta kliperaši podrazumevaju pod inicijalizacijom? Kod nas to čudo
>> ne postoji, ili ne mislimo na istu stvar.
Podrazumevam sve ono što treba uraditi od momenta startovanja aplikacije
pa dok korisnik ne dobije meni na ekranu. To znači provera i po potrebi
kreiranje baza podataka, provera integriteta podataka, provera i (po
potrebi) kreiranje indekasa (jel' tako, koji to padež beše...;) a ovo
poslednje je jedino što ume da potraje nerazumno dugo vremena.
clipper.738ematic,
U vezi Internal error-a, dal' neko može da dobavi ovo ?:
> INTERNAL ERRORS No documentation. See User-upload, CL5IEn.ZIP
> ══════════
> Clipper Version 1.29 dtd 04/15/91.
>
> Problem Statement
>
> Nantucket(r) has not supplied Internal Error documentation.
>
> Work Around
>
> None; however, CL5IEn.ZIP in the NanForum library may be of some help.
══════════════════════════════════
clipper.739nbatocanin,
-> #720, pusa> slaba korist od tog drugog linkera. Kojom opcijom da proba
> da iskljuci koriscenje EMS?
BLINKER CACHE EMS
clipper.740nbatocanin,
-> #719, ematic> Bug or feature ?
Očigledno je da CA pokušava da završi posao započet prelazom S'87 ->
5.0, a to je strožija sintaksa. Mislim da je ovaj prelaz odlično (tj.
bezbolno) napravljen. E sad, ove poslednje izmene nisu tako krupne,
ali vidim da prave probleme u programima. Nadam se da će se to
kasnije isplatiti: bolje da sad da sintaksnu grešku, a da posle imamo
OK objekte ;) I dalje mislim da ako se 5.2 pokaže pouzdanim
(testiranje je u toku) da se isplati preći na njega!
clipper.741dusanp,
Imam problema sa koriscenjem SWPRUNCMD-a. Bilo kako ga pozvao
(da, sve sam lepo podesio) on swapuje na disk. Ima 4 mega slobodno
gore, sto xms-a sto ems-a, a on nikako da ih konstatuje. Jel
sam bio jasan? Kako svima vama radi ok, nisam primetio da se jos
neko zali?
clipper.742ematic,
-> #740, nbatocanin> kasnije isplatiti: bolje da sad da sintaksnu grešku, a da posle
> imamo OK objekte ;) I dalje mislim da ako se 5.2 pokaže
> pouzdanim (testiranje je u toku) da se isplati preći na njega!
Bilo bi predivno da CA 5.01a daje *sintaksnu* grešku, al' naprotiv :(,
sůmo prevođenje ide normalno, što će reći da kompajler *prihvata*
stvari tipa c:colorBlock := NIL koje su po 'novom' nelegalne. Zato
program radi naizgled normalno, sve dok ne naleti na ovakvo
dodeljivanje, a onda... TBROW xxxx greška ili nešto slično, ne sećam
se tačno. Ako je nešto 'na površini' onda nije strašno, ali ako se
nalazi u nekoj retko pozivanoj f-ji, onda Marfi radi prekovremeno ;).
Ovako se javlja nekompatibilnost sa Nantucket-ovim 5.01 koja se
ispoljava na najgori mogući način, prilikom rada programa.
Druga stvar je što, bar ja tako mislim, ako stvarno hoćemo da
imamo OK objekte oni trebalo i da se OK inicijalizuju, dakle,
nedopustivo je da neka instanca prilikom inicijalizacije preuzme
vrednost koja je ilegalnog tipa, što se upravo i dešava. Kompajler bi
ipak trebao da bude dovoljno pametan da primeti takve stvari, bar
tamo gde se ilegalna vrednost, tj. neodgovarajućeg tipa, eksplicitno
dodeljuje, što se u stvari i desilo.
CA je započeo fin posao, ali ga nije realizovao na najkorektniji
način. Zanima me kako se Clipper 5.2 nosi sa ovim problemima ? Btw,
koliko vidim 5.2 donosi puno lepih stvari, tako da se potpuno slažem
s tim da nakon provere treba preći na njega.
clipper.743ndragan,
-> #734, bulaja/ Ili si propustio pocetak diskusije :). Pod "inicijalizacijom" se
/ podrazumevalo vreme da se svaki put uradi ponovni INDEX ON, sto je
Nisam propustio, nego sam hteo da čujem naglas. Video sam dovoljan broj
kliper aplikacija koje počinju sa totalnim indeksiranjem svega i
svačega, što je na kilavijim makinama zaista trajalo, pa me zanimalo
zašto se to radi.
Ja baš nikad ne radim tako (tj. cela mi firma). Procedura za
indeksiranje postoji, dostupna je iz menija, a korisniku se kaže kad bi
trebalo da indeksira - jednom nedeljno, ili ako primeti neki od
simptoma, ili ako mu telefonom poručimo da to uradi. Vredelo bi, takođe,
da napravimo test brzine indeksiranja (sve verzije klipera, i tri
verzije foksa u opticaju) sa istim .dbf i istim ključevima. Sve mi se
čini da je S87 imao dosta sporu rutinu za indeksiranje.
clipper.744ndragan,
E, našao sam jedan bugi u funkciji Adir() (u FP2.0), a pošto čujem da
slična postoji i u kliperu, žajde da vidimo u čemu je štos.
Rutine za izradu štampe puštam iz jedne generalne rutine - nekakvog
menija sa promptovima "izrada - pregled - štampa - delimična štampa -
podešavanje štampača". Iz te rutine usput i popunjavam neku bazu za
statistiku štampe. Kad već to radim, ubacim i da popamti vremena, i to
ovako:
t1=time()
do (_rutina)
t2=time()
Posle toga, proverim da li je _rutina napravila nešto, dakle
n=adir(_c,_stampa)
_stampa naravno može da već postoji na disku, pa zato sravnim datum i
vreme, i tu je zbunj. Vreme nastanka (u stvari, zatvaranja) fajla na
disku je ažurno u rezoluciji od dve sekunde, dok je u t1 i t2 ažurno u
sekundu; odatle dobijam ovako nešto:
Dosovi podaci u direktorijumu, kako ih vidi adir()
_C Priv A
( 1, 1) C "KARTROB.TXT" ime fajla
( 1, 2) N 1832 ( 1832.00000000) dužina
( 1, 3) D 27.05.93 datum
( 1, 4) C "19:06:28" vreme
( 1, 5) C ".A..." atributi
Prema FoksProovom časovniku, rutina koja je napravila fajl, startovana
je u 19:06:38 a završila u 19:06:57. Zašto je dos zapisao ranije vreme?
Nije, nego _adir() ne vodi računa o tome da je ono po dve sekunde, ne
pomnoži sa dva i napiše "19:06:28" umesto "19:06:56" ili "19:06:57".
Ukapiram to i skratim test na sate i minute... i opet nađem situaciju
kad se dosov časovnik ne slaže sa funkcijom time() za par minuta; ispada
da je fajl za toliko stariji (na disku). E, sad se i babo češka po
glavi... Testiraću ovo malo podrobnije.
clipper.745bulaja,
-> #744, ndragan│Vreme nastanka (u stvari, zatvaranja) fajla na disku je azurno
│u rezoluciji od dve sekunde,
└───
Nije stvar ni u Foxu (a ni u Clipperu), vec DOS za sekunde u file
date/time koristi 5 bita, pa zato vreme ide u rezoluciji od dve
sekunde.
clipper.746nbatocanin,
Bre ljudi, što se danas razočarah! Isprobavao sam Clipper 5.2 i ima
zaista lepih stvari. Taman sam se naoštrio da pređem na DBFCDX
drajver, kad, ne čuči vraže: performanse su mu po mojim merenjima
katastrofalno gore od DBFNTX drajvera! Jedinu malu prednost sam uočio
kod veoma malih datoteka (do 1000 slogova), ali i to je za dlaku.
Probao sam sve: i različite podatke, i različit broj različitih
podataka, i sa kešom i bez keša i ništa: CDX indeksi ispadoše sporiji
za oko 30% u svim operacijama. Na stranu što sam našao da ovaj
drajver pri indeksiranju menja jedan bajt u DBF datoteci, pa drugi
drajveri posle prave probleme. Dal' je greška il' namera, pitanje je
sad ;)
clipper.747nbatocanin,
-> #733, bingo> Molio bih te za detaljnija objasnjenja za rad sa pregledom
> pre stampe u mrezi kako to da uradim.
Pa evo ovako. Ako tvoj program ima korisnike, uvedi neki
identifikator za svakog. Na primer, neki broj. Sada funkciju za
pregled izmeni tako da ne radi sa datotekama PART1.PRT i PART2.PRT,
već sa PART1_XX.PRT i PART2_XX.PRT, gde je XX taj identifikator.
Tako ćeš postići da svaki korisnik ima svoje datoteke za preview.
Naravno, ako imaš neki drugi sistem, možeš ovo izvesti na neki drugi
način, ali se sve svodi na to da svaki korisnik ima svoju datoteku za
preview pre štampanja. Nadam se da sam sad bio jasniji.
clipper.748nbatocanin,
-> #729, dr.grba> ---> "Tvoj kešer smrđi!". "Nje, Blinher smrđi".
Kamo sreće :( Oba računara su imala klot DOS. Uzgred, danas mi se
žali drug koji nije na Sezamu da je dobio neki internal error na
programu koji radi već nekoliko godina. Naravno upravo kada je sa
Tlinka prešao na Blinker!
clipper.749nbatocanin,
-> #730, dr.grba> Da li to znači da se rTLink inteligentno ponaša u odnosu
> na EMS / XMS memoriju? Ovo je vredno eksperimentisanja...
Krkne dosta privremenih podataka u EMS, koliko mi je poznato. Kad mu
oduzmeš EMS, obavezno bude "creating temporary file 21312312"
> kako optimalno setovati mašinu za rad / programiranje u Clipper-u
> 5.xx.
Ja imam 386/33 sa 4MB. Od toga 1-1.5MB drži HyperDisk, 1.5MB je
prazan EMS, a ostatak razne nevažne trice i kučine ;) I ne koristim
MBOOT i slične programe.
> Ja već rekoh da sam se odrekao keša nasuprot RAM drajva i ubrzanje je
> dvostruko...
A za šta koristiš RAM disk?
clipper.750nbatocanin,
-> #643, ndragan> Glavni dobitak kod .cdx indeksa nije samo u tome, nego što
> ga foks interno žestoko koristi za pretrage;
žuj, ovo mi ne izgleda baš tako moćno na drugi pogled. Ne verujem da
je FoxPro pametniji od programera koji će (valjda) uvek prvo izvršiti
SEEK (ako može), pa onda LOCATE. Neka složenija analiza uslova za
pretragu mi je malo komplikovana za on-line analizu. Interesuje me
kakva su ti praktična iskustva sa ovim pretraživanjem? Al' da budeš
objektivan ;)
> Postoje li Valid, Picture i When opcije na celom slogu i
> pojedinim poljima?
Šta to znači?
Uzgred, da li bi mogao neko ko radi sa FoxPro-om da objasni kako
tačno rade SCATER i GATHER naredbe.
clipper.751pusa,
-> #379, d.petrovic> BLINKER CACHE EMS
Hvala ti prenecu coveku a psole cu preneti tebi da li mu je
uspelo!
clipper.752ppekovic,
Clipper verzija 5.2 postoji u dve verzije: američkoj i
onoj za ostatak sveta. Američka verzija odbija da se instalira
na računarima van USA i Kanade :)). To utvrđuje tako što
proveri koja je kodna strana aktivna.
Paya
clipper.753ndragan,
-> #750, nbatocaninAl' si mnogo naređao odjedared. žAjd jedno po jedno.
/ SEEK (ako može), pa onda LOCATE. Neka složenija analiza uslova za
/ pretragu mi je malo komplikovana za on-line analizu. Interesuje me
Kod strukturnog indeksa je zaista nebitno da li je urađen SEEK ili
LOCATE For <uslov_po_indeksu>, jer i jedno i drugo podleže Rašmor
optimizaciji. Caka je u tome da se .dbf ni ne čita, ako se skup traženih
slogova može naći iz uslova koji uključuju samo (ili pretežno) polja po
kojima postoje strukturni indeksi. žita se samo .cdx, a on je uz to
komprimovan (nikakav zip ili tako nešto, jedino je ukinuto ponavljanje
delova ključa koji su isti kao u prethodnom ključu; ista tehnika kao na
VMS/RMS od File Prolog V3 pa nadalje).
Objektivno, to znači da je brzina pretraga mnoogo veća. Ranije je
filtriranje baze išlo tehnikom 'index on trt+mrt for <uslov1> .and.
<uslov2> .and. ... ', ili 'Seek... do .. while..'. Brzina u odnosu na
tehniku selektivnog indeksiranja je veća oko 10 puta, a u odnosu na
pretragu po postojećem indeksu nema neke veće razlike, osim što se jedan
deo kodiranja izbegava, što će reći da je program kraći, radi sve u
manje naredbi, najčešće ima bar jednu petlju manje, i tu onda opet
postoji dobitak.
O čemu se radi. Kad napravi SQL kursor, on može da sadrži ne samo
proizvoljne kombinacije polja iz baze (ili više baza), nego može da
sadrži i nekakve zbirne slogove, kao i kombinaciju toga. Naprimer
sele fpromet.konto, fpromet.datnal, fpromet.brnal, ;
fpromet.opis, ;
fpromet.duguje, fpromet.potraz, fpromet.kod;
from fpromet,spisak ;
where fpromet.konto = spisak.konto ;
and DATNAL betw _mpoc and _mZAV;
union (sele fpromet.konto, _mpoc-1 as datnal, fpromet.brnal, ;
'početno stanje ' as opis, ;
sum(fpromet.duguje) as duguje, ;
sum(fpromet.potraz) as potraz, fpromet.kod;
from fpromet,spisak ;
where fpromet.konto = spisak.konto ;
and DATNAL < _mpoc and kod=1 ;
group by fpromet.konto);
union (sele fpromet.konto, _mpoc-1 as datnal, fpromet.brnal, ;
'promet pre '+dtoc(_mpoc) as opis, ;
sum(fpromet.duguje) as duguje, ;
sum(fpromet.potraz) as potraz, fpromet.kod;
from fpromet,spisak ;
where fpromet.konto = spisak.konto ;
and DATNAL < _mpoc and kod#1 ;
group by fpromet.konto);
order by 1,2,3 ;
into cursor nesa
'Spisak' je jedan mali lažni .dbf (u stvari kursor, briše se čim se
zatvori) u kojem su konta za koja se traže kartice. E, ovo radi
stravično brže u odnosu na 'seek konto... do.. sabiraj.. while' pa tako
za svaki konto.
/> Postoje li Valid, Picture i When opcije na celom slogu i
/ Šta to znači?
Browse valid g_f1() when g_f2() ;
fields polje1 :v=f1() :p='999.99', ;
polje 2 : w=f2();
for <uslov> ;
key <klj1>,<klj2>
F*() i g*() su nekakve funkcije koje vraćaju .t. ili .f. (ako se navede
uz polje valid može da vraća i numerik, koji je u stvari ofset do
sledećeg polja: ako vrati 0, ostaje na istom polju, 1 sledeće, -2
pretprošlo itd). g_f1 ne dozvoljava prelazak na sledeći slog dok ne
vrati .t.; g_f2 preskače slogove za koje vraća .f.
/ tačno rade SCATER i GATHER naredbe.
Ima par varijanti, ali ukratko:
select prva
scat to t kreira se niz
sele druga
appe blank
gath from t popunjava se slog iz niza
Ovde Scat naredba stvara niz t() koji ima dimenziju jednaku broju polja
baze 'prva'. Popunjava ga sadržajem polja iz tekućeg sloga - prvo polje
u t(1) itd. Gather onda to iz t() upisuje u slog.
Ovo fino šljaka ako imaju istu strukturu; lepši štos je Scat Memvar -
prepiše polja u memorijske promenljive. Druga baza ne mora da ima istu
strukturu, ne moraju čak ni sva polja da se popune (dobro, uvek može
Fields lista).
E, da, Scat/Gath preskače memo polja.
Al' sam odužio...
clipper.754ndragan,
-> #745, bulaja/ date/time koristi 5 bita, pa zato vreme ide u rezoluciji od dve
/ sekunde.
Da, ali zašto Foks ne pomnoži to čudo sa dva? Bilo bi dobro da im neko
šapne, ko ima pristup gore.
clipper.755jpiri,
-> #746, nbatocanin>> ...spori DBFCDX drajver.
Da li si prilikom linkovanja izbacio DBFNTX biblioteku?
Ako nisi, ona ti nepotrebno jede Clipperovu radnu memoriju a to itekako
utice na performanse. Pozdrav.
clipper.756balinda,
Instalirao sam novi Clipper 5.2. Kako sam u jednom programu koristio
Nanfor biblioteku (takodje "najnoviju"), prijavljuje se nakon
linkovanja sa RTLINKOM i sa BLINKEROM poruka:
unsolve external 'CLIPPER501' NANFOR.LIB
Ovo mi nije jasno (bar što se smera tiče) :(
Program posle RTLINK-a radi bez problema iako je ova greška prijavljena!
Naravno BLINKER pravi problem zato što čak i zbog jedne prijave greške
ne formira EXE fajl (bar ja neznam kako da ga odviknem od toga).
P.S. Velike probleme imam i sa prijavama raznih EMS grešaka sa
BLINKEROM (npr.93H). Kako da potpuno isključim detekciju EMS i napravim
možda (za utehu) neki RAMDRIVE...
clipper.757cnenad,
Zdravo svim Kliperasima.
Nazalost jos nisam presao sa S87 na 5.* ali molim za pomoc
Prvo, gde mogu da nadjem (mislim) da se zove FUNCKY.LIB iz koje postoji
mogucnost da se napravi sat u kliperu (bilo je u bajtovima u r90 i neki broj)
Drugo (ovo izgleda moze da resi samo Deja caskao sam u chat-u sa mbulatom o
ovome) radi se o sledecem, moj EXE fajl ima 320 Kb, memorije na racunaru imam
slobodno kad ucitam drajvere i ostale rezidente programe (vshield, mouse,
doskey, smartdrive i sl.) oko 580 KB, Koristim DOS 6. ali racunar nikako nece
da startuje program i prijavljuje Not enough Memory ili posto sam preveo dos
NEMA MEMORIJE !!!
Racunar je 386DX40hz 4Mb RAM-a. Ima li leka ovome, napominjem da ni drugi EXE
fajl koji ima 220 i jedan cak 180 nece da startuje. Medjutim onaj prvi od
320 Kb se sastoji od preko 40 modula odnosno glavni program poziva oko 45
potprograma ali su svi kompalirani u jedan obj fajl.
Trece, Dejanr mi odgovori u poruci ▀broj 562 na moje pitanje za replace
datuma ali Dejane ne ljuti se nisam zadovoljan time, odnosno iskreno
priznajem komplikovano je to za mene jos uvek jel moze neko da mi napise
liniju sa normalnim REPLACE.
Hvala i pozdrav Svima koji procitaju ovo.
Nenad Canic
clipper.758dejanr,
-> #757, cnenad>> Trece, Dejanr mi odgovori u poruci ▀broj 562 na moje pitanje za replace
>> datuma ali Dejane ne ljuti se nisam zadovoljan time, odnosno iskreno
>> priznajem komplikovano je to za mene jos uvek jel moze neko da mi napise
>> liniju sa normalnim REPLACE.
REPLACE ALL datum WITH date() FOR empty(datum).
Nisam probao, kucam on-line, ali valjda je tako nešto.
clipper.759dr.grba,
-> #756, balinda>> unsolve external 'CLIPPER501' NANFOR.LIB
>>
>> Ovo mi nije jasno (bar što se smera tiče) :(
>> Program posle RTLINK-a radi bez problema iako je ova greška
>> prijavljena!
Aha, tu smo. A lepo sam pitao...
>> Naravno BLINKER pravi problem zato što čak i zbog jedne prijave
>> greške ne formira EXE fajl (bar ja neznam kako da ga odviknem od
>> toga).
Pokušaj da upotrebiš switch NODELETE.
clipper.760dejanr,
-> #759, dr.grba>> Aha, tu smo. A lepo sam pitao...
Nije stvar u nekompatibilnosti, nego je NANFOR za svaki slučaj definisao
ovaj simbol. Dakle, i RTLINK javlja istu grešku samo što čovek nije
pročitao uputstvo za Blinker pa nije znao da ga "natera" da čuva .EXE
fajl iako ima grešaka u povezivanju.
Inače, greška bi se konačno ispravila nabavkom nove verzije NANFOR.LIB-a,
a verovatno bi i postojeći mogao da se "popravi" iz Nortona.
clipper.761snemcev,
-> #756, balinda>> Naravno BLINKER pravi problem zato što čak i zbog jedne prijave
>> greške ne formira EXE fajl (bar ja neznam kako da ga odviknem od
>> toga).
Imaš BLINKER EXECUTABLE NODELETE. Stavi to negde u .lnk datoteku i više
ti neće brisati .exe ako ima grešaka.
clipper.762arazumenic,
Da li neko zna kako da iz CLIPPER-a nateram SVGA/VGA karticu u neki drugi
mod (na primer 132 x XX)?
Sasa
clipper.763nbatocanin,
-> #742, ematic> kompajler *prihvata* stvari tipa c:colorBlock := NIL
Na ćalost, mislim da neäemo skoro doćiveti da Clipper prijavi ovu
greëku, jer promenljiva jednog objekta *moće* imati vrednost NIL, pa
to zavisi od autora objekta/klase.
> dakle, nedopustivo je da neka instanca prilikom
> inicijalizacije preuzme vrednost koja je ilegalnog tipa,
> ëto se upravo i deëava.
Kao ëto rekoh: prevodilac ne moće znati ëta je nelegalna vrednost
jedne promenljive, osim ako mu se ne kaće.
> Kompajler bi ipak trebao da bude
> dovoljno pametan da primeti takve stvari, bar tamo gde se
> ilegalna vrednost, tj. neodgovarajuäeg tipa, eksplicitno
> dodeljuje, ëto se u stvari i desilo.
To bi znaüilo da u definiciji klase promenljive ne budu ravnopravne
sa normalnim promenljivim, jer njima moćeë dodeljivati ëta hoäeë.
> Zanima me kako se Clipper 5.2 nosi sa
> ovim problemima ?
Isto kao i 5.01, iz prethodnih razloga.
clipper.764d.petrovic,
-> #763, nbatocaninĂ>> dodeljuje, ëto se u stvari i desilo.
set code..
clipper.765cnenad,
-> #758, dejanrIzvinjavam ti se Dejane. U vezi zamene datuma u polju moja je greska
jer sam ispustio naredbu for. I to sto je najcrnje pre naredbe za zamenjivanje
datuma imao sam nekoliko linija u kojima sam isto vrsio zamenu nekih drugih
polja i nikako da primetim da mi bas tu fali jos FOR.
Ipak, hvala.
Nenad / Mr.Virus "X" / BMPS
clipper.766cnenad,
U vezi poruke 9.9577 u kojoj sam napomeno da sam sa Mbulatom u chat-u
razgovarao o probelmu gde kad se zavrsi program ostaje mi zarobljeno memorije
od oko 240 Kb, covek me lepo pitao da li negde u programu koristim naredbu
run / ! a ja kategoricki odgovaram NE moram da se ispravim i da kazem da sam
koristio posto nemam biblioteku za sat u clipper-u mali COM program CLO od
svega 432 bajta ali koji je rezidentan i ne moze da skine a posto se ucitavao
iz glavnog programa koji je pre njega ucitan on zaglavi memoriju koju je zauzeo
glavni program i iz njega se izadje ali memorija ostaje zauzeta a slobodno
samo 237 Kb. Medjutim jos jedno pitanje za onoga ko zna: zasto onda nije
DOS-ova naredba MEM/C prijavila u listi i moj izvrsni program nego samo CLO.
Da to nije neki bag DOS-a odnosno MEM-a ?
Molim jos jednom za odgovor, gde mogu da nadjem FUNCKY.LIB i zasto ne mogu da
startujem program od 320 KB kad imam slobodno 589 Kb.
Pozdrav.
Nenad./Mr.Virus "X"/BMPS
clipper.767bulaja,
-> #766, cnenad│koristio posto nemam biblioteku za sat u clipper-u mali COM program CLO od
│svega 432 bajta ali koji je rezidentan i ne moze da skine a posto se ucitavao
│iz glavnog programa koji je pre njega ucitan on zaglavi memoriju koju je
zauzeo
│glavni program i iz njega se izadje ali memorija ostaje zauzeta a slobodno
│samo 237 Kb.
└───
Malo konfuzno :), ali shvatio sam sta je po sredi. NEMOJ ni slucajno da
iz Clipper-a startujes neki externi program koji ce ostati rezidentan.
Sigurno je da ce ti pojesti memoriju, a mozes i jos goru zbrku da
napravis :). Ako vec hoces taj rezidentni sat, onda ga startuj PRE
Clipper programa (npr. iz .BAT fajla).
│zasto ne mogu da startujem program od 320 KB kad imam slobodno 589 Kb.
└───
Velicina EXE file-a nema mnogo veze sa time koliko program trazi
memorije. Uzsam kod (koji je tih 320 Kb), memoriju trose i razne
promenljive, nizovi, baferi za baze podataka & indekse,... Ako
zelis da ostanes na Summer 87 verziji moraces da se petljas sa
ovrlejovima, zato najbolje predji na 5.x gde nema petljanja sa
ovrlejovima, a memorije imas koliko hoces :).
clipper.768dusanp,
-> #741, dusanp=> Imam problema sa koriscenjem SWPRUNCMD-a. Bilo kako ga pozvao
=> (da, sve sam lepo podesio) on swapuje na disk. Ima 4 mega
=> slobodno gore, sto xms-a sto ems-a, a on nikako da ih
=> konstatuje. Jel sam bio jasan? Kako svima vama radi ok, nisam
=> primetio da se jos neko zali?
Nisam ocekivao da mi se bas niko ne javi. Znaci da bas svima
radi ok? Mozda sam ipak ja nesto z*? Ajde koga ne mrzi da mi
posalje jedan kratak primer + .rmk + .lnk. Hvala :)
clipper.769nbatocanin,
-> #753, ndragan> Kod strukturnog indeksa je zaista nebitno da li je urađen
> SEEK ili LOCATE For <uslov_po_indeksu>, jer i jedno i
> drugo podleže Rašmor optimizaciji.
Ovo ne razumem: kako se optimizuje SEEK? Zar se optimizacija ne
odnosi samo na LOCATE?
> .dbf ni ne čita, ako se skup traženih slogova može naći iz
> uslova koji uključuju samo (ili pretežno) polja po kojima
> postoje strukturni indeksi.
E, ovo me interesuje: do koje mere je FoxPro inteligentan da upotrebi
indeks? Na primer, imaš indekse po X i Y, a tražiš
LOCATE FOR Left(x,2) == Right(y,2)
clipper.770nbatocanin,
-> #755, jpiri> Da li si prilikom linkovanja izbacio DBFNTX biblioteku?
Ne, ovo mi nije palo na pamet, ali uvek je bio prisutan i DBFNTX i
DBFCDX, tako da su oba podjednako smetala onom drugom ;)
clipper.771nbatocanin,
-> #756, balinda> unsolve external 'CLIPPER501'
Ovo se javlja kad linkuješ biblioteke od 5.2 sa programima prevedim
prevodiocem od 5.01 (ili beše obrnuto?).
clipper.772dejanr,
-> #765, cnenad>> Izvinjavam ti se Dejane. U vezi zamene datuma u polju moja je greska
>> jer sam ispustio naredbu for.
Nema mesta izvinjenjima, zato baš Sezam i služi, da zajednički rešavamo
probleme.
clipper.773bulaja,
Bilo je vec price o tome da je Clipper Debuger (v5.01) glup :), pa da
kad iz programa koji se debaguje promenite aktivni dir, on ne uspeva da
pronadje vise izvorni kod programa (a trebao bi da gleda tamo odakle je
startovan exe). E ovo moze da se resi :). Gluplje resenje je da svaki
put izmenite stazu do source fileova u "Options / path for Files", a
najbolje je da napravite script file za CLD gde ce stojati npr.:
Options path d:\prg
Najbolje da se script file zove INIT.CLD posto njega CLD automatski
ucitava pa ga ne morate posebno navoditi (cld @script exe).
clipper.774ematic,
-> #763, nbatocanin> Na ćalost, mislim da nešemo skoro doćiveti da Clipper prijavi
> ovu greëku, jer promenljiva jednog objekta *moće* imati
> vrednost NIL, pa to zavisi od autora objekta/klase.
To je u principu tačno, ali opet ne vidim razlog zašto nije bilo
moguće ugraditi ovu proveru u kompajler, jer se tu ipak radi o
klasama ugrađenim u jezik koje su jasno definisane i deklarisane, a
ne o korisnički definisanim klasama (Clipper 6.0, tj. Clipper++ :))
za koje ovo tvrđenje stoji.
> Kao ëto rekoh: prevodilac ne moće znati ëta je nelegalna
> vrednost jedne promenljive, osim ako mu se ne kaće.
Opet tačno, ali u ovom slučaju su mogli da mu kažu... :)
> To bi značilo da u definiciji klase promenljive ne budu
> ravnopravne sa normalnim promenljivim, jer njima moćeë
> dodeljivati ëta hošeë.
Ove promenljive imaju rezervisana imena (jer su i klase o kojima
govorimo ravnopravni deo osnovnog jezika), stoga pretpostavljam da je
bilo moguće uvesti proveru tipa.
clipper.775d.petrovic,
-> #768, dusanpĂ> Nisam ocekivao da mi se bas niko ne javi. Znaci da bas svima
Ă> radi ok? Mozda sam ipak ja nesto z*? Ajde koga ne mrzi da mi
Ă> posalje jedan kratak primer + .rmk + .lnk. Hvala :)
1. Mani ga se, hoće da zeza pomalo, koristi za konačnu verziju rtlink
2. Imaš primer uz blinker
3. ako već nemaš...
swap.arjclipper.776bulaja,
Moze li se u MEMODEDIT() ikako preusmeriti neki od non-configurable
tastera? Oni se kroz user funkciju propustaju tek posle izvrsene default
operacije (npr. ako je pritisnut DEL, prvo se obrise char, a tek onda
ME javi user func "e obrisao sam..."). Potrebno mi je da se pre izvrenja
default operacije (recimo DEL) prvo urade neke stvari, a zatim default
operacija ipak izvrsi. SetKey() ne pomaze mnogo jer sa ME (tj. user
func) moze da komunicira jedino preko globalnih parametara, posto bi
KEYBOARD Chr(K_DEL) opet rekurzivno pozvao SetKey() proc.
clipper.777cnenad,
Zdravo, vidim da se nesto mnogo prica o BLINKER-u.
Kad je tako da Vas pitam gde nadjoste taj linker ?
Koliko kosta ako nije Shareware ?
Cekam odgovor.
Pozdrav.
Nenad/Mr.Virus "X"/PS
clipper.778dejanr,
-> #777, cnenad>> Koliko kosta ako nije Shareware ?
Nije shareware, prodaje ga firma Assembler Softvare Manufacturers.
Bio je prikaz sa dosta detalja u "Računarima 90", 32. strana.
clipper.779ematic,
-> #776, bulaja> KEYBOARD Chr(K_DEL) opet rekurzivno pozvao SetKey() proc.
Neka ide sa setkey(), samo što u funkciji koja će se pozivati
pritiskom na DEL (nek' se zove del_func() ) uradiš prvo setkey(K_DEL,
NIL), pa onda te neke stvari :) i keyboard chr(K_DEL). E, kad onda
memoedit() javi user_funkciji "obrisah šta treba..", kaži dobro,
setkey( K_DEL, { |...| del_func(...) } ). Nadam se da je jasno, ako
nije onda da napišem i listing :)
clipper.780d.petrovic,
-> #777, cnenadĂ> Kad je tako da Vas pitam gde nadjoste taj linker ?
Probaj:
Snake Dance 686-737 18:00 - 05:00
clipper.781bulaja,
-> #779, ematic│Neka ide sa setkey(), samo sto u funkciji koja ce se pozivati
│pritiskom na DEL (nek' se zove del_func() ) uradis prvo setkey(K_DEL,
│NIL), pa onda te neke stvari :) i keyboard chr(K_DEL). E, kad onda
│memoedit() javi user_funkciji "obrisah sta treba..", kazi dobro,
│setkey( K_DEL, { |...| del_func(...) } ). Nadam se da je jasno, ako
│nije onda da napisem i listing :)
└───
Ma jasno je, to sam bas i koristio kao privremeno resenje :), ali ima
manu da se ipak ne moze prepustiti MemoEditu da komunicira sa user func.
U slucaju kad SetKey() proc naidje na nesto sto se ne bi smelo obrisati
(zato mi i treba da preusmerim DEL), onda ona mora da vrati ME jedno
nista, a onda user func ne zna da je bio pritisnut DEL.
U stvari upravo sam se setio :) da moze i ovako - ako SetKey() u tom
slucaju vraca nista, onda nema potrebe za SetKey (K_DEL, NIL). User func
i ne mora da zna da se nista nije obrisalo, a ne mora da vraca SetKey().
clipper.782dr.grba,
-> #762, arazumenic>> Da li neko zna kako da iz CLIPPER-a nateram SVGA/VGA karticu u neki
>> drugi mod (na primer 132 x XX)?
Mislim da bi FT_SETMODE funkcija iz NANFORUM TOOLKIT biblioteke mogla
da završi posao.
clipper.783snemcev,
-> #763, nbatocanin>> Na ćalost, mislim da nešemo skoro doćiveti da Clipper prijavi ovu
>> greëku, jer promenljiva jednog objekta *moće* imati vrednost NIL, pa
>> to zavisi od autora objekta/klase.
Aman koji je ovo kodni raspored?!? Probah sve što imam na disku, i ništa
nije uspelo. Daj Nenade, napravi taj set code. Ili se bar javljaj samo
sa onog računara sa kojeg si i dosad zvao ;) Sve mi se čini da je ovaj
račun platio neko drugi ;)
clipper.784snemcev,
-> #762, arazumenic>> Da li neko zna kako da iz CLIPPER-a nateram SVGA/VGA karticu u neki
>> drugi mod (na primer 132 x XX)?
Za to nisam siguran, ali kad startuješ program u tom modu, radi OK.
Funkcije MaxRow() i MaxCol() rade korektno.
clipper.785dr.grba,
-> #766, cnenad>> Molim jos jednom za odgovor, gde mogu da nadjem FUNCKY.LIB i zasto
>> ne mogu da startujem program od 320 KB kad imam slobodno 589 Kb.
Dopusti da ti odgovorim ovako :
proc main()
..... // nešto
private niz := šć
....
for i = 1 to 1000
nizŠiĆ := space(512)
next
....
Koliko nam sad ceo niz uzima memorije?
...Nije samo kod programa ono što nam uzima memoriju. Postoje tu još
tabele, stekovi, razna egzotična područja... Ispitaj takve tačke u
inicijalizaciji svog programa.
clipper.786dr.grba,
-> #770, nbatocanin>> Ne, ovo mi nije palo na pamet, ali uvek je bio prisutan i DBFNTX i
>> DBFCDX, tako da su oba podjednako smetala onom drugom ;)
Da li to znači da DBFNTX više ne pripada default spisku biblioteka,
već se decidirano mora navesti?
clipper.787nbatocanin,
-> #774, ematic> To je u principu tačno, ali opet ne vidim razlog zašto
> nije bilo moguće ugraditi ovu proveru u kompajler, jer se
> tu ipak radi o klasama ugrađenim u jezik koje su jasno
> definisane i deklarisane, a ne o korisnički definisanim
> klasama
Da, mogli su da naprave tu proveru, ali mislim da bi to bilo glupo:
tako bi napravili jednu zavisnost viška, koja bi sigurno kasnije
zasmetala kod novih verzija. Zašto od nečega praviti izuzetak uz
sumnjiv dobitak?
clipper.788nbatocanin,
-> #773, bulaja> Options path d:\prg
Samo da dodam da ovde može da se pojavi spisak. Na primer:
d:\prg;c:\clipper;
clipper.789ematic,
-> #781, bulaja> U slucaju kad SetKey() proc naidje na nesto sto se ne bi smelo
> obrisati (zato mi i treba da preusmerim DEL), onda ona mora da
> vrati ME jedno nista, a onda user func ne zna da je bio
> pritisnut DEL. U stvari upravo sam se setio :) da moze i ovako...
A, to :). Ovo je bilo ovako jer si, kako vidim, tražio da:
> ME javi user func "e obrisao sam..."). Potrebno mi je da se pre
> izvrenja default operacije (recimo DEL) prvo urade neke stvari,
> a zatim default operacija ipak izvrsi.
Uglavnom, došlo se do pravog rešenja :). Ima li nešto bolje ?
clipper.790smilan,
U jednom numerik polju zelim da se dolaskim kursora (preko WHEN
funkcije) pojavi neka osnova za godinu gradnje neke zgrade, npr.
1900 i da kursor dodje na prvu nulu od 1900 i tako omoguci
korisniku da otkuca samo zadnje dve cifre "prave" godine.
Naravno, kada se strelicom prelazi preko tog polja na gore (chr(5))
ili na dole (chr(24)) uneta cifra ne bi trebalo da se menja.
Posto u nekoliko maski imam slicnu potrebu, resio sam da napravim
univerzalnu funkciju. Ovo sto se vidi funkcionise po gornjem opisu ali
nakon REPLACE FILE->GOD with MEM->GOD prijavljuje gresku
DBFNTX /1020 Data type error
@ 9,70 GET GOD pict "@Z 9999" when gradilw("GOD") valid gradilv("GOD")
^^^
ovo je promenjiva a ne
polje baze
FUNC gradilw(gra_whe) ******* (za WHEN funkciju)
LOCAL staro
staro:=&gra_whe && U staro smesta ono sto nadje u
polju
&gra_whe:=1900 && promenjivoj iz GET-a dodeljuje
1900
if lastkey()=5 .or. lastkey()=24
&gra_whe:=staro && ako se ide strelicama gore-dole
vrati staru vrednost
return .t.
endif
keyboard chr(4)+chr(4) && pomeri kursor dva mesta udesno
RETURN .t.
FUNC gradilv(gra_val) ******* (za VALID funkciju)
if (&gra_val > val(god[1])) .or. (&gra_val < 1800) && uneta godina ne
sme biti veca od
tekuce niti manja
od 1800
return .f.
endif
RETURN .t.
clipper.791ematic,
-> #787, nbatocanin> Da, mogli su da naprave tu proveru, ali mislim da bi to bilo
> glupo: tako bi napravili jednu zavisnost viška, koja bi sigurno
> kasnije zasmetala kod novih verzija. Zašto od nečega praviti
> izuzetak uz sumnjiv dobitak?
Nadajmo se da oni znaju šta rade :), a meni ostaje da napravim
programče koje će da traži pogrešna dodeljivanja (naravno, ukoliko me
ne bude mrzelo :)).
clipper.792bulaja,
-> #790, smilan│ @ 9,70 GET GOD pict "@Z 9999" when gradilw("GOD") valid gradilv("GOD")
│ ^^^
│ ovo je promenjiva a ne polje baze
└───
A kako je deklarisana ta promenljiva? Ako je LOCAL ili STATIC, onda je
ne mozes koristiti preko macroa. Ako zelis da je menjas iz WHEN
procedure, onda je mnogo zgodnije (ako koristis LOCAL var) da je
preneses po imenu gradilw(@god). A ako je private/public ne moras da
prenosis ime promenljive kao parametar, vec to ime mozes da saznas sa
ReadVar().
clipper.793arazumenic,
-> #784, snemcev---------------------------------------------------------
->>> Da li neko zna kako da iz CLIPPER-a nateram SVGA/VGA karticu u neki
->>> drugi mod (na primer 132 x XX)?
->Za to nisam siguran, ali kad startuješ program u tom modu, radi OK.
->Funkcije MaxRow() i MaxCol() rade korektno.
Sledi još jedan odgovor u sledećoj poruci. U svakom slučaju, hvala.
Sasa
clipper.794arazumenic,
-> #782, dr.grba->>> Da li neko zna kako da iz CLIPPER-a nateram SVGA/VGA karticu u neki
->>> drugi mod (na primer 132 x XX)?
->Mislim da bi FT_SETMODE funkcija iz NANFORUM TOOLKIT biblioteke mogla
->da završi posao.
Ne moče. Doduše, ona stvarno prebaci računar u željeni mod (132x30), ali i
dalje ne dobijam željeni rezultat. Naime, ako se startuje sledeci test:
ft_setmode(84)
? maxcol()
? maxrow()
kao rezulta se i dalje dobija 79 i 24 i to ispisani u jednom redu (sa raz-
makom izmedju njih od 78 slovana mesta). Ideja je bila sledeća: Ako je ra-
čunar opremljen sa SVGA/VGA kartom, onda da se iskoristi taj mod za prikaz
raznih tabela koje su dosta sire i od mogucih 132 slova u redu, a ako nije
onda da se ostane pri standardnih 80 kolona. Dakle, ne prolazi sledece:
if ft_adapter() == 3
PrebaciUMod(132x30)
mod = 84
endif
PrikazTabele()
if mod == 84
VratiNormalniMod()
endif
Izgleda da prilikom startovanja programa, interno se postavljaju neki para-
metri programa izmedju kojih je su i mod u kome radi video karta, tako da
funkcije maxcol() i maxrow() samo procitaju te parametre i njih vracaju bez
obzira sto je mod kartice promenjem. Inače, SNEMCEV je u poruci 9.784 pot-
puno u pravu, samo to nije ono što sam želeo.
Saša
clipper.795nbatocanin,
-> #783, snemcev> Aman koji je ovo kodni raspored?!?
Ne pitaj ;)) Imam neki svoj privatni raspored, a joë nisam automatizovao
konverziju u Raüunari raspored koji sam prijavio na Sezamu. Zato kad zaboravim
da izvrëim konverziju nastane haos...
> Sve mi se čini da je ovaj račun platio neko drugi ;)
Jock, varaš se ;)
clipper.796nbatocanin,
-> #786, dr.grba> Da li to znači da DBFNTX više ne pripada default spisku
> biblioteka, već se decidirano mora navesti?
Ne, ne mora.
clipper.797neman,
-> #794, arazumenic> ->>> Da li neko zna kako da iz CLIPPER-a nateram SVGA/VGA
> karticu u neki ->>> drugi mod (na primer 132 x XX)?
Mislim da Flipper ima neku funkciju BIOSMODE( ) koja radi to.
neman
clipper.798ndragan,
-> #755, jpiri/>> ...spori DBFCDX drajver.
/ Da li si prilikom linkovanja izbacio DBFNTX biblioteku?
Pitam se, pitam se, da li je dbfcdx drajver kompletan? Da li on radi
samo do nivoa čitanja-pisanja .cdx indeksa, tek poradi kompatibilnosti
sa FP2, ili ume i ostale stvari koje ovaj radi?
clipper.799dr.grba,
-> #794, arazumenic>> ...Inače, SNEMCEV je u poruci 9.784 potpuno u pravu,
>> samo to nije ono što sam želeo.
Znam, želiš da presvičuješ mod unutar programa.
Opisano ponašanje funkcije koju sam ti preporučio smatram bugom ):
Lično se time nisam bavio, nego se samo prisetih da sam je video u NG
fajlu, pa sam ga i konsultovao da bih ti odgovorio...
clipper.800snemcev,
-> #795, nbatocanin>> Zato kad zaboravim da izvrëim konverziju nastane haos...
Opet si zaboravio ;))) Napravi bre batch ili još bolje, uradi konverziju
u Clipper-u! :))
clipper.801solajac,
-> #738, ematicERROR.DOC (CLIPPER 87) stoji :
INTERNAL ERROR najčešće nastaju zbog pokvarenih indeksa.
Moja napomena i podsćanje: Reindeks radite isključivo sa:
instrukcijom INDEX
nikako sa REINDEX (ova instrukcija ne popravlja HEADER datoteke)
To je sve što sam našao o INTERNAL ERRORčr.
Meni se inače pojavljuje INTERNAL ERROR 19 na jednoj konfiguraciji i
ponovno indeksiranje do sada je uvek pomagalo.
Isti program na drugoj konfiguraciji radi bez probblema.
clipper.802skerl,
RShowPCX 1.2 - 16 March 1993 (c) 1993 Rolf van Gelder
=======================================================================
RSHOWPCX LIBRARY
- RShowPCX is a shareware Clipper 5.01a library which contains a
function to display a .PCX graphics file.
- Because the library is written using the ASSEMBLER language the
function works VERY FAST !!
- Some SUPER VGA adaptors are supported.
- RShowPCX is perfect to display Company logo's, graphs, wallpapers...
Pozdrav,
Skerl.
p.s. sve spremno da ide u dir :)
clipper.803skerl,
ž Clipper "Fast" EGA/VGA PCX Display Library Ć
For Clipper Summer '87 &
Clipper 5.0x
This is the documentation for two libraries: CLFPCX87.LIB and
CLFPCX50.LIB. The first for Clipper Summer '87, the latter for
Clipper 5.0x (5.0 and 5.01).
These libraries provides a function that display's some PCX files,
in an efficient, fast and easy manner. The memory overhead by CLFPCX
is very little, as the core has been programmed directly in Assembly,
and there are also very few options for extra displays etc... CLFPCX
is ideal for your application just to display the Logo of your
Company/Organisation.
The display of the PCX is quite fast, as the decoding and writing of
the actual picture is completely handled by Assembly routines.
For each library, the source code to the FastPCX() function has been
supplied, would you want to add some more robust error checking, or
display more pictures in a row, or whatever..
Files: Comment:
--------------------------------------------------------
CLFPCX87.LIB The library for Clipper Summer '87
CLFPCX50.LIB The library for Clipper 5.0 or 5.01
CLFPCX87.PRG Clipper '87 code to FastPCX(), also in .LIB
CLFPCX87.PRG Clipper 5.0[1] code to FastPCX(), also in .LIB
PCX87.PRG Simple Clipper '87 demo of the FastPCX() function.
PCX50.PRG Simple Clipper 5.0[1] demo of the FastPCX() function.
BART.PCX EGA 640x350x16 picture: Bart Simpson
MJTITLE.PCX VGA 640x480x16 picture: Title screen of Mah-Jonng VGA.
MINDSCAP.PCX VGA 320x200x256 picture: Mindscape (?) Logo.
Pozdrav,
Skerl.
p.s. I ovo moze u dir :)
clipfpcx.zipclipper.804dejanr,
-> #802, skerl>> p.s. sve spremno da ide u dir :)
U dir-u je, hvala. Pogledao sam na brzaka i lepo radi.
Bulaji ostavljam da pogleda "konkurentski" program uz 9.803.
clipper.805seovic,
-> #387, dejanr> Ima li neki nacin da se za logicke promenljive u raznim
> @say...get maskama pojavljuju i kucaju vrednosti D i N
> (ili recimo J i N) umesto onoga T i F? Ideja je, naravno,
> da se to nekako doda u postojeci program, a da se po
> mogucnosti u njemu sto manje mora menjati.
>
> U bazama itd moze slobodno da ostane .t. i .f., samo da se
> promeni na ekranu
Mozda odgovor na ovo pitanje stize malo prekasno, ali na SEZAM-u sam od
nedavno tako da nisam bio ranije u mogucnosti da ponudim svoje resenje:
LOCAL cVar := "N" // ili "D"
FIELD xxx IN yyy // logicko polje u fajlu
.
.
@ nRow, nCol GET cVar PICT "!" VALID (cVar $ "DN")
READ
.
.
REPLACE xxx WITH (cVar == "D")
Hteo bih i da pitam kako resavate problem podrske razlicitim tipovima
stampaca, kao i stampanje pod mrezom.
A.Seovic
clipper.806smilan,
Ima li ko iskustva sa Flipperom i ima li traga bilo kakvom uputstvu.
žini mi se da za neke hitne potrebe NG nije dovoljan.
clipper.807ndragan,
-> #769, nbatocanin/ Ovo ne razumem: kako se optimizuje SEEK? Zar se optimizacija ne
/ odnosi samo na LOCATE?
Frljoka u izražavanju - Locate po pojmu koji sadrži samo strukturni
indeks je podjednako optimizovan kao da je urađen Seek. Po tom principu
se u stvari optimizuje sve što ima for opciju.
/ E, ovo me interesuje: do koje mere je FoxPro inteligentan da upotrebi
/ LOCATE FOR Left(x,2) == Right(y,2)
Ovo bi verovatno proglasio za 'partially optimizable'. Pod jedan, ne
treba ti left(), jer po difoltu radi poređenje do dužine desnog stringa.
A onda zavisi da li je y drugo polje iz baze (ne može) ili drugi
indeksni pojam (možda, nisam probao) ili polje iz druge baze koja nije
pod relacijom, ili varijabla (može da optimizuje).
Operacije nad ključevima strukturnih indek(a)sa koje podržavaju totalnu
optimizaciju su uglavnom elementarna poređenja, funkcija Empty()...
uostalom, evo iz helpa:
Potentially Optimizable Commands With FOR Clauses
AVERAGE EXPORT
BROWSE LABEL
CALCULATE LIST
CHANGE LOCATE
COUNT RECALL
COPY TO REPLACE
COPY TO ARRAY REPORT
COUNT SCAN
DELETE SORT
DISPLAY SUM
EDIT TOTAL
...
A basic optimizable expression:
<index expression> <relational operator> <constant expression>
<index expression> must exactly match the expression on which an
index is constructed and <index expression> must not contain aliases.
<relational operator> must be one of the following: <, >, =, < =, >
=, < >, #, !=.
<constant expression> may be any expression, including memory
variables and fields from other unrelated databases.
E sad, šta spada u 'fully optimizable' - sve spomenute relacije i
funkcija empty(), not <basic expr>, te da se u desnoj strani mogu
nalaziti kojekakvi izrazi, uključujući funkcije, ali da im se argument
ne menja tokom šetnje kroz bazu. Not optimizable je ako se manipuliše
stringom, recimo "for ime=upper(ime)", $ operator, ili izrazi tipa x+2=y
(moralo bi da se baci 2 desno i da y ne bude iz iste baze nego iz neke
druge i ne pod relacijom, ili memorijska promenljivva, ili da 2 ostane
levo a x da je iz druge baze itd).
Veoma je bitno da se polje po kojem se traži pojavljuje kao indeksni
pojam u strukturnom indeksu. Jednom sam, verovatno zbog zamora, ukucao
"...where upper(kupac) between k1 and k2" i čudio se zašto čita celu
bazu. Kasnije sam slučajno primetio da onaj Upper ne služi ničemu
('kupac' je šifra :), pa sam ga skinuo, i umesto "3500 records read"
počeo je da javlja "132 records read" i da uradi za 3 sekunde umesto 24.
clipper.808ndragan,
-> #784, snemcev/ Funkcije MaxRow() i MaxCol() rade korektno.
U FoxProu postoji Set Display to Vga50 itd, međutim ako se potera (iz
aplikacije) eksterni program koji promeni dimenzije ekrana, srows() i
scols() daju ispravne vrednosti.
clipper.809arazumenic,
-> #808, ndragan->U FoxProu postoji Set Display to Vga50 itd, međutim ako se potera (iz
->aplikacije) eksterni program koji promeni dimenzije ekrana, srows() i
->scols() daju ispravne vrednosti.
O.K. za FoxPro, ali meni treba za Clipper.
Saša
clipper.810cnenad,
-> #780, d.petrovicHvala na odgovoru probacu da ga skinem kad ostanem ovde na poslu
duze od 15 casova.
Pozdrav.
NENAD/Mr.Virus "X"/BMPS/CNENAD
clipper.811cnenad,
-> #785, dr.grbaHvala za odgovor ali ipak po savetu moram da predjem sa S87 na 5.01
i da resim taj problem sa memorijom.
Cekam tipa da mi posalje diskete sa C5.01.
Pozdrav.
NENAD/Mr.Virus "X"/BMPS/CNENAD
clipper.812d.petrovic,
-> #811, cnenadĂ> Cekam tipa da mi posalje diskete sa C5.01.
Na vreme..., jel to nešto taze izašlo? ;)
clipper.813mackb,
Da li neko zna kako je moguce pokrenuti iz clippera DOS-ovu
naredbu MODE za podesavanje parametara stampaca ili se parametri
mogu podesiti na drugi nacin(nekom funkcijom ili tome slicno).Kod
pokretanja MODE-a bitno je da poruka o uspesnosti njenog izvrsenja ne ide na
ekran jer to narusava koncepciju Hvala.KKKKKKK. Hvala.
clipper.814martin,
-> #813, mackbProbaj sa run("MODE ..... > SMECE.TXT")
pozdrav martin
clipper.815bulaja,
-> #813, mackb│Da li neko zna kako je moguce pokrenuti iz clippera DOS-ovu
│naredbu MODE za podesavanje parametara stampaca ili se parametri
│mogu podesiti na drugi nacin(nekom funkcijom ili tome slicno).
└───
Ma kakav mode, dovoljno je da posaljes stampacu odgovarajucu kontrolnu
(ESC) sekvencu, u ovom slucaju za promenu sirine karaktera (pitch) i
line spacing. Pogledaj u uputstvu za stampac koje su tacno sekvence,
cini mi se da je npr. za Epson za compressed pitch (132 char u redu)
dovoljno poslati jedan SI (chr(15)).
clipper.816ratman,
Imam AT 286/12 sa HD Seagate 44Mb, 640K osnovne + cca.300 extended RAM.
Ako bih hteo da ubrzam kompajliranje i linkovanje sa Clipper-om (5.01),
koliko ima smisla dodavanje RAM i koliko bi bilo najbolje dodati?
Moze li se za Clipper iskoristiti nesto od ovih cca.300K?
█ş█şĚ█Pozdrav,
Dejan
clipper.817martin,
-> #816, ratmanSa 2 Mb se može sasvim lepo raditi! (ako nisi video brže).
Što se tiče onih 300Kb Clipper ih već koristi!
clipper.818d.petrovic,
-> #814, martinĂ> Probaj sa run("MODE ..... > SMECE.TXT")
NUL