baze.podataka.312.marko.,
Ima li ko kakva pozitivna/negativna iskustva sa kursom za ORACLE
koji organizuje "Vinca"?
baze.podataka.313nkbog,
Dva problema sa FoxPro 2.6:
1. SELECT nesto AS a, SUM(nestodrugo) AS b FROM blabla WHERE blabla
GROUP BY nesto INTO CURSOR temp
dodeljuje polju b MMMMMsirinu od nula decimala ako je prvo "nestodrugo" vezano
za nesto nula (cela suma). Ovo smo resili tako sto pisemo 0.0001 + SUM(...),
al' me interesuje dal' ima neko bolje resenje.
2. Na nekoliko sporijih masina (dve): AT i 386-ica, kod BROWSE-a kada se brzo
pritiska leva strelica ispali poruku "Invalid file descriptor". S obzirom da
nas to upucuje na MS Support (tamo negde u Nemackoj), da li neko zna kako
to izbeci (ON ERROR, ON KEY ili nesto slicno).
NB.
baze.podataka.314misa.m,
-> #313, nkbog>> 1. SELECT nesto AS a, SUM(nestodrugo) AS b FROM blabla WHERE blabla
>> GROUP BY nesto INTO CURSOR temp
>> dodeljuje polju b MMMMMsirinu od nula decimala ako je prvo "nestodrugo"
Rezultujuće polje bi trebalo uvek da ima isti broj decimala
kao ulazno, bez obzira na sadržaj. Ja za forsiranje dužine
decimalnog dela koristim ROUND funkciju, npr:
SELECT nesto AS a, SUM(ROUND(nestodrugo, 4)) AS b ...
baze.podataka.315ndragan,
-> #267, dr.grba/ Eto, a mene si zimus zezao zbog "tek sad uvedenog" SCOPE indeksa u
/ Clipper.
Ej, pajto, spusti malo. Pomenuti Browse je _već_ u 2.0 imao opcije
Key k1 (, k2)
For
Valid
When (poslednje dve na nivou celog sloga i pojedinog polja).
Rest opcija je samo mali dodatak koji sprečava prečitavanje baze i/ili
indekasa od početka, nego tek od tekućeg sloga naniže, kol'ko da se
ubrza stvar.
baze.podataka.316ndragan,
-> #275, mjevta/ SELECT MAX( datum ), Ime, ... FROM maticna INTO CURSOR cur ;
Ovde implicitno praviš grupu (group by) čim koristiš neku od agregatnih
funkcija nad kolonama, u ovom slučaju MAX(); pošto nisi naveo kriterijum
grupisanja, podrazumeva se da vadi jedan slog iz cele baze; samo za prvo
polje si naveo šta tačno hoćeš i to si dobio, za ostala polja se smatra
da ti je svejedno iz kog su sloga.
/ SELECT DISTINCT datum, Ime, ... FROM maticna INTO CURSOR cur;
/ WHERE datum IN ( SELECT MAX( datum ) FROM maticna ) AND ;
E ovde si već bio precizniji, tražio si da ti izdvoji sve slogove kod
kojih je datum jednak najvećem datumu.
/ Kako to radi u 2.6 ?
Isto tako.
baze.podataka.317ndragan,
-> #274, mdrazic/ Veoma je bitno za komotan rad više korisnika da u ove tri faze
/ NEMAŠ stanje čekanja (ne daj bože neko editovanje) koje koči
Što reče help za TTS u FP2.6:
"When other users on the network try to access records you have
modified, they must wait until you end your transaction. They receive
the message "Record not available ... please wait" until the records
become available. Because of this, it is important to keep the length of
the transaction to a minimum. It is best to end a transaction before
you go to lunch."
baze.podataka.318max.headroom,
-> #313, nkbog> 2. Na nekoliko sporijih masina (dve): AT i 386-ica, kod
> BROWSE-a kada se brzo pritiska leva strelica ispali poruku
> "Invalid file descriptor". S obzirom da
De, ako te ne mrzi, opiši problem malo podrobnije.
baze.podataka.320nbulatovic,
-> #305, max.headroom> FOXDCOMP
> A DECOMPILER FOR FOXBASE PROGRAMS
Gde to može da se nabavi?
ja sam inače radio sa sličnim programima i nisam baš oduševljen
njihovom efikasnošću.
Nikola
baze.podataka.321gaston,
Zdravo narode !
Nije me dugo bilo, pa sam bio prijatno iznenadjen kvalitetom diskusije
u zadnja 2-3 meseca. Posebno se to odnosi na priloge max.headroom-a.
Ne znam cime ga hrane, ali samo neka tako nastave ! Verovatno ce "dosaditi"
moderatorima konferencija pretrpavanjem istih korisnim (i dugackim) prilozima
vezanim za FOX, pa cemo valjda dobiti posebnu konferenciju. Od mene licno ima
gajbu piva, samo neka javne broj ziro-racuna, pa neka sve knjizi u fond za
reprezentaciju.
Imam nekoliko pitanja i zapazanja:
1) Sve sto je u vezi strukture DBF i ostalih fajlova poslao milanv je tacno,
nema se sta zameriti, ali jedan podatak koji me jako interesuje nije spomenut.
To je u vezi sa zapazanjima max.headroom-a i ndragan-a u vezi nacina kako FOX
resava situaciju nedostajeceg CDX fajla i kako je programer mora resiti. I ja
imam slicna zapazanja o toj pojavi.
Mislim da FOX negde u DBF fajlu upisuje da li uz fajl ide i CDX ili ne.
Prema tome, ako je nekome poznato gde i kako, neka to javne. Onda bi se dala
napraviti procedura za proveru postojanja CDX fajla iz hedera DBF fajla. U
vrlo lepoj knjizici "CA-Clipper 5.2 i mrezno programiranje" od J.D.Booth i
G.Lief daju se strukture DBF , NDX, CDX i dr., kao i kompletna procedura za
proveru izpravnosti hedera DBF i CDX fajlova. Medjutim ni u toj knjizi se nista
ne kaze o mestu u hederu DBF fajla gde je zapisana informacija o tome da li
postoji CDX fajl.
2) U jednom od priloga max.headroom-a vezanih za mreze, daje se lep primer
programceta za dobijanje nekih parametara mreze putem funkcije FP_INT86().
Slicnih stvari ima i u gorepomenutoj knjizi. Iako je knjiga pisana za Clipper
moze sasvim lepo da posluzi i za FOX. Jedino sto sam ja vrrrrlooo slab sa
asemblerom (sama funkcija FP_INT86() je deo NanForum Clipper biblioteke i
data je u asembleru). Elem, treba taj asemblerski program preraditi na
odredjeni nacin (sto meni nije uspelo, i pored svojevremenih sugestija
ndragan-a), prevesti i koristiti u FOX-u. Ako je noko voljan da opise kako je
to resio, verujem da ne bih bio jedini koji bi mu bio vrlo zahvalan.
3) Da li neko ima iskustva sa Library Construction Kit-om za FOX ??????
Ajd pa tako
Nesa - Gaston
P.S. Bolje naka max.headroom javno objavi broj ziro-racuna, verovatno nisam
jedini koji zeli da konkretno zahvali ...
baze.podataka.322goxx,
-> #321, gaston■ Mislim da FOX negde u DBF fajlu upisuje da li uz fajl ide i CDX ili ne.
■ Prema tome, ako je nekome poznato gde i kako, neka to javne. Onda bi se dala
■ napraviti procedura za proveru postojanja CDX fajla iz hedera DBF fajla. U
Gotovo da sam sto posto siguran da tako nešto ne postoji. U vezi procedure:
Da li bi ti to bila pouzdana informacija o postojanju CDX-a? Šta kad ručno
izbrišeš CDX, a u DBF-u ostane indikator?
Postoje file sistemi koji drže opis indeksa u osnovnom fajlu (naročito na
većim sistemima).
Goran
baze.podataka.323dobrada,
Zanima me da li za biblioteke za rada sa bazama podataka pre svega za
C/C++ (Paradox Engine ili Code Base) postoje alati koji omogucavaju
pri debugovanju da se vidi sta se desava sa bazom podataka (trenutni slog,
aktivni index i sl.).
U clipper-u je to integrisano u njegov debuger.
baze.podataka.324ndragan,
-> #298, mdrazic/ Uz sav respekt prema proizvodu (Fox) i firmi (Microsoft) ipak
BTW, nisam nešto najjače zadovoljan ponašanjem lisice pod prozorom.
Prvo, brzina grafike je drastično manja nego u aplikacijama pisanim u
jezicima nižih nivoa; drugo, sve mi se čini da je, otkako je Mali Mekani
kupio Lisicu, počelo zbrzeljavanje (paz' verzije: 1.00, 1.01, 1.02, 2.00
pa odma 2.5, 2.6 - tipično za maleckog mekanog).
Takođe mi ide na I.I. što između #if i #endif ne može da se uglavi
nikakav #define, te izmišljam promenljive gde bi lepo došle konjstante.
Inače je ok, i ima većinu stvari (tri od četiri :) koje su dosad
nedostajale.
--> jel nekom pao šaka LCK za fp3.0?
baze.podataka.325ndragan,
-> #313, nkbog/ za nesto nula (cela suma). Ovo smo resili tako sto pisemo 0.0001 +
/ SUM(...),
On pokušava da na osnovu prvog sloga proračuna širinu polja, pa šta
dobije (probaj ? 0+0 i ? 0+0.00) . Najbolje je da se zada kompletna širina
navođenjem potrebnog broja nula sa obe strane decimalne tačke:
000000000000.00+sum(trt_mrt) as rkekoke
/ to izbeci (ON ERROR, ON KEY ili nesto slicno).
Ovo vuče na neki bag iz 2.5, koji se javljao na strelici ulevo na brauzu
na numeričkom polju. Nisam imao slučaj, mada sam čuo, a prema
dokumentaciji treba da je ispravljeno u 2.6. Probaj "on key label
leftarrow keyb 'šbacktabć' plain', istina skakaće po celo polje ulevo, a
korisnici mogu još da pomisle da tako i treba :)
baze.podataka.326dr.grba,
-> #324, ndragan>> jezicima nižih nivoa; drugo, sve mi se čini da je, otkako je Mali Mekani
>> kupio Lisicu, počelo zbrzeljavanje (paz' verzije: 1.00, 1.01, 1.02, 2.00
>> pa odma 2.5, 2.6 - tipično za maleckog mekanog).
Gotovo sam siguran da Microsoft ovo radi namerno, a u nameri da izbaci
Access u prvi plan.
baze.podataka.327bulaja,
-> #321, gaston│ Mislim da FOX negde u DBF fajlu upisuje da li uz fajl ide i CDX ili ne.
│ Prema tome, ako je nekome poznato gde i kako, neka to javne.
└───
Ne upisuje! :) Pretpostavljam da to misliš zbog postojanja .CDX-ova koji
se automatski otvaraju kad se otvori .DBF, ali tu se jednostavno radi o
tome da database engine (Fox-ov ili npr. kod Clippera neki RDD, npr. SIx
CDX) kod otvaranja baze (npr. "test.dbf") proveri da li postoji .CDX sa
istim imenom ("test.cdx") i ukoliko je uključeno samootvaranje CDX-ova
(auto-open) otvori i njega.
baze.podataka.328ndragan,
-> #321, gaston/ Prema tome, ako je nekome poznato gde i kako, neka to javne. Onda bi
/ se dala napraviti procedura za proveru postojanja CDX fajla iz hedera
/ DBF fajla. U
Knjiga ('razvijačke gajde') mi je u Mađarskoj, pa ako se setim negde od
nedelje. Mislim da piše gde je.
Što se mene tiče, za indeksiranje svakako _preventivno_ obrišem .cdx
fajl. Zatim ga otvaram Excl (mora, inače odbija da pravi tegove). Rutina
za obradu greške javi da je fajlu nestao .cdx, foks obriše informaciju o
postojanju .cdx i onda forsirano ponovo otvorim .dbf (ovog puta je on
bez ikakvog indeksa) i onda sve prolazi.
Ono brisanje ne ide tek tako zbog mreže, zato prvo probam da otvorim za
čitanje/pisanje:
xx=fopen(cdxf, 2)
if xx<0
... (neko drži otvoreno)
Zašto brišem .cdx? Zato što foks odbija da otvori bazu ako je on
oštećen, a upravo hoću da napravim nov pa dobar - ergo, uopšte me ne
zanima kakav je stari.
baze.podataka.329max.headroom,
-> #320, nbulatovic FOXDCOMP
A DECOMPILER FOR FOXBASE PROGRAMS
Evo ga, stiže. Nisam proveravao njegovu pouzdanost, pa ti ne
mogu garantovati kvalitet :)
P.S. Nikola, zanimaš li se i dalje neuronskim mrežama? Ako da,
jesi li u kakvoj zanimljivoj grupi?
foxdcomp.arjbaze.podataka.331misa.m,
-> #326, dr.grba>>>> jezicima nižih nivoa; drugo, sve mi se čini da je, otkako je Mali Mekani
>>>> kupio Lisicu, počelo zbrzeljavanje (paz' verzije: 1.00, 1.01, 1.02, 2.00
>>>> pa odma 2.5, 2.6 - tipično za maleckog mekanog).
>> Gotovo sam siguran da Microsoft ovo radi namerno, a u nameri da izbaci
>> Access u prvi plan.
U septembarskom PC Magazine je objavljen test Developer Databases
(Clarion 3.0, DataEase 4.53, DataFlex 3.05, dBase IV 2.0, Access 2.0,
FoxPro 2.6 prof DOS i WIN, Paradox 4.5 DOS i WFG, R:Base 4.5+ )
i normalno ;) Editors' choice je Access.
Paradox for DOS i obe verzije Foxa imaju najbolje perfomanse u single
user varijanti dok je FOX daleko iznad svih u mreži (32 stanice).
Access je (sa pozajmljenom Rushmore tehnologijom) u mreži izbio na
treće mesto.
U prilog vaših teza evo i zadnje rečenice iz Fact FILe-a:
ACCESS: If you're looking for a superb Windows development tool,
look no further.
FOX4WIN: Yuo might be better off waiting for the next release.
baze.podataka.333gaston,
-> #322, goxx
Mislim da FOX negde u DBF fajlu upisuje da li uz fajl ide i CDX ili ne.
Prema tome, ako je nekome poznato gde i kako, neka to javne. Onda bi se dala
napraviti procedura za proveru postojanja CDX fajla iz hedera DBF fajla. U
>> Gotovo da sam sto posto siguran da tako nesto ne postoji. U vezi
procedure:
>> Da li bi ti to bila pouzdana informacija o postojanju CDX-a? Sta kad rucno
>> izbrises CDX, a u DBF-u ostane indikator?
A ja sam sto posto siguran da TAKO NESTO POSTOJI !
Mozda se nismo dovoljno razumeli...
Sa instaliranim error handler-om (npr. iz FOX2EROR.PRG ili slicno) ako obrisete
CDX neke baze, javice gresku:
"Structural .CDX file not found - Error #1707"
Evo kako se ponasa FOX ako se uradi recimo sledece:
ON ERROR() DO GRESKA.PRG WITH ....
SELECT 0
USE ABC
INDEX ON _POLJE TAG _PO_POLJU
CLOSE DATABASES
!DEL ABC.CDX
<<< USE ABC >>> tu ce javiti poruku o gresci.
Medjutim, kada sledeci put otvorite ABC, a CDX ne postoji, greska nece biti
prijavljena. Ja iz takvog ponasanja zakljucujem sledece:
Informacija da neki DBF fajl ima CDX se zapisuje negde u zaglavlju baze
podataka. Ako obrisemo CDX, FOX ce po tom znaku zakljuciti da CDX treba da
postoji,ali ce proverom na disku utvrditi da ga nema i javice poruku o
gresci #1707. Pored toga, upisace u zaglavlje DBF fajla znak da DBF fajl
nema CDX fajl, tako da kada se sledeci put pokusa otvaranje baze,
nece biti greske.
Program za proveru ispravnosti DBF i CDX fajlova bi radio sledece:
- proverio bi ispravnost strukture DBF fajla, memo i CDX fajla
- proveravao bi postojanje memo i CDX fajlova i dr.
i u zavisnosti od toga preduzimao odredjene akcije: popravke ili prekide rada.
Da li sam sada malo jasniji ? U svakom slucaju hvala na primedbi.
Nesa Gaston
baze.podataka.334max.headroom,
Izvinjavam se na odsutnosti - sve je posledica nedostatka vremena.
Da se iskupim, šaljem programske pristupe otvaranju baza po
Booth-u i Lief-u...
* Function: INITDB()
* Purpose: Initialize database structure arrays
* Syntax: InitDB()
* Arguments: <NONE>
* Returns: .T.
*
* Notes: This function is used to create two public
* arrays which the opening programs use to make
* sure that all necessary files are opened when
* you need to access a table.
*
*********************************************************
PUBLIC AFiles_Š5Ć
PUBLIC ARelat_Š1Ć
PUBLIC AIndex_Š6Ć
* Alias DBF Name Index file names
* ------ ---------- -----------------
AFiles_Š1Ć = "EMPLOYEE; F:ĐAPPĐEMPLOYEE ; EMP_INIT,EMP_NAME"
AFiles_Š2Ć = "EMP_DEPT; F:ĐAPPĐEMP_DEPT ; EMP_LINK"
AFiles_Š3Ć = "DEPTS ; F:ĐPAYĐDEPTS ; DEPTS"
AFiles_Š4Ć = "POSITION; F:ĐPAYĐPOSITION ; POSITION"
AFiles_Š5Ć = "MANAGERS; F:ĐPERSĐMANAGERS; MGRS"
*
* Index Expression
* ------ ----------
AIndex_Š1Ć = "EMP_INIT; INITIALS"
AIndex_Š2Ć = "EMP_NAME; EMPLOYEE"
AIndex_Š3Ć = "EMP_LINK; INITIALS+DTOS(START)"
AIndex_Š4Ć = "DEPTS ; DEPT_NO"
AIndex_Š5Ć = "POSITION; POS_NO"
AIndex_Š6Ć = "MGRS ; MGR_INIT"
*
* Logical
* Table Required files
* -------- --------------
ARelat_Š1Ć = "EMPLOYEE; EMPLOYEE,EMP_DEPT,DEPTS,POSITION,MANAGERS"
*
return .T.
baze.podataka.335max.headroom,
Po Booth-u i Lief-u...
* Function: SHARED()
* Purpose: Open a list of tables in shared mode
* Syntax: <logical> = Shared( cTable(s) )
* Arguments: cTable - Name of logical table(s) to open
* Returns: .T. - If files were opened ok,
* .F. - if the files could not be opened
*
*********************************************************
FUNCTION Shared
PARAMETERS cTab1,cTab2,cTab3,cTab4,cTab5,cTab6,cTab7,cTab8,cTab9,cTab10
PRIVATE all_ok,x
PRIVATE aFlist_Š PARAMETERS() Ć
FOR X = 1 TO PARAMETERS()
TMP = "CTAB"+ALLTRIM(STR(X,2))
aFLIST_ŠXĆ = &TMP
NEXT
all_ok = OPENLIST(.F.,čAFLIST_)
return all_ok
*****************************
FUNCTION OPENLIST
PARAMETERS isExcl,FilesToDo
PRIVATE x,y,z
PRIVATE tmp,cFile
PRIVATE all_ok
IF isExcl
SET EXCLUSIVE ON
ELSE
SET EXCLUSIVE OFF
ENDIF
SET EXACT OFF
FOR X = 1 TO ALEN(FILESTODO)
Y = ASCAN(ARELAT_,FILESTODOŠXĆ) && Look for this table
IF Y = 0 && File name does not exist
CLOSE DATABASES && in our database, so we return
RETURN .F. && FALSE
ENDIF
tmp = ARELAT_ŠYĆ && Extract the file information
Y = AT(";",tmp)
tmp = SUBSTR(tmp,Y+1)+"," && Get required files
Z = AT(",",tmp)
DO WHILE Z > 0
cFile = ALLTRIM(SUBSTR(tmp,1,Z-1)) && Extract each file name
all_ok = OPENFILE(cFile) && and attempt to open it
IF NOT all_ok && File could not be opened
CLOSE DATABASES && so we close any open files
RETURN .F. && and return FALSE
ENDIF
IF z < LEN(tmp)
tmp = SUBSTR(tmp,Z+1)
z = AT(",",tmp)
ELSE
z = 0
ENDIF
ENDDO
IF NOT all_ok
CLOSE DATABASES
RETURN .F.
ENDIF
NEXT
RETURN .T.
*********************************************************
FUNCTION OpenFile
PARAMETER cFileName
PRIVATE y,z,tmp
PRIVATE cDBFname,cIndx
PRIVATE all_ok
PRIVATE cPath
cPath = ""
all_ok = .T.
y = ASCAN( aFiles_,cFileName )
ON ERROR DO OPENERR WITH cFilename,cDBFName
IF y > 0
tmp = aFiles_ŠyĆ
y = AT(";",tmp)
tmp = SUBSTR(tmp,y+1)
y = AT(";",tmp)
cDBFname = SUBSTR(tmp,1,y-1)
z = RAT("Đ",cDBFname)
if z > 0
cPath = substr(cDBFName,1,z)
endif
tmp = alltrim(SUBSTR(tmp,y+1))+","
IF NOT USED( cFileName )
USE &cDBFName IN 0 ALIAS &cFileName
IF USED( cFileName ) && File was opened ok
*
* DEAL WITH THE INDEX FILES
*
SELECT &cFileName
Z = AT(",",tmp)
DO WHILE Z > 0
cIndx = cPath+ALLTRIM(SUBSTR(tmp,1,Z-1))
SET INDEX TO &cIndx ADDITIVE
IF NOT all_ok
** RECREATE THE INDEX FILE
zz = ASCAN(AIndex_,ALLTRIM(SUBSTR(tmp,1,Z-1)) )
IF zz > 0
temp2 = aIndex_ŠzzĆ
zz = AT(";",temp2)
temp2 = ALLTRIM(SUBSTR(temp2,zz+1))
INDEX ON &temp2 TO &cIndx
all_ok = .T.
SET INDEX TO &cIndx ADDITIVE
ELSE
CLOSE DATABASES
RETURN .F.
ENDIF
ENDIF
IF z < LEN(tmp)
tmp = ALLTRIM(SUBSTR(tmp,Z+1))
Z = AT(",",tmp)
ELSE
Z = 0
ENDIF
ENDDO
SET ORDER TO 1
ENDIF
ENDIF
ELSE
RETURN .F.
ENDIF
ON ERROR
RETURN USED( cFileName )
******************************************************************************
FUNCTION OPENERR
PARAMETER cAlias,cDBF
PRIVATE nError
PRIVATE cMessage
nError = ERROR()
cMsg = MESSAGE()
DO CASE
**
** These errors handle missing or corrupt index files
**
CASE nError = 1 .or. nError = 114 .or. nError = 19
all_ok = .F.
ENDCASE
RETURN
******************************************************************************
baze.podataka.336max.headroom,
FP_INT86() f-ja (plus raznorazne, u temi ranije obrađene f-je korisne
Fox-u pod Novell-om), i to u tri oblika: C, FLL i PLB. Molim dobre
duše koje se identifikuju sa C-magovima :) da pogledaju ovaj source.
blnet.arjbaze.podataka.337max.headroom,
Ko se latio korišćenja svih resursa Novell-a iz Fox-a, eto mu prilike
da se raduje...
FoxPro
Functions to access Netware's Bindery (1)
*
* Function: N_ScanBindery()
* Purpose: Scans the bindery for a given object type
* Syntax: nCount = N_scanBindery( nType,čaObjects )
* Arguments: nType - Type of objects to be returned
* aObjects - Array of objects of the
* indicated type
*
* Returns: nCount - How many objects were found
*
* Notes: This function is used to get a list of all
* objects in a bindery type. For example,
* type 4 is the servers, so N_ScanBindery(4)
* would return all servers within the bindery.
*
*********************************************************
function N_ScanBindery
PARAMETERS nType,aObjects
PRIVATE cBuffer,cRequest,nCount,cList
PRIVATE x,y,z
nCount = 0
cBuffer = SPACE(57)
cRequest = CHR( 55)+CHR(255)+CHR(255)+;
CHR(255)+CHR(255)+;
CHR(0)+CHR(nType)+;
Lstring("*",48)
cList = ""
DO WHILE NetWare( 227,cRequest,čcBuffer ) == 0 AND ;
LEN(TRIM(cBuffer)) > 0
************************************************
** Extract the object name and save in array **
************************************************
nCount = nCount +1
cList = cList +CleanStr(SUBSTR(cBuffer,7,48))+";"
**
** Update the send buffer to get next member
**
cRequest = SUBSTR(cRequest,1,1)+SUBSTR(cBuffer,1,4)+;
SUBSTR(cRequest,6)
ENDDO
IF nCount > 0
DIMENSION aObjectsŠnCountĆ
z = 1
FOR x = 1 TO nCount
y = AT(";",cList,x)
aObjectsŠxĆ = SUBSTR(cList,z,y-z)
z = y+1
NEXT
ENDIF
RETURN nCount
**********************************************************
baze.podataka.338max.headroom,
FoxPro
Functions to access Netware's Bindery (2)
* Function: N_BindLevel()
* Purpose: Get workstations access level to the bindery
* Syntax: xReturn = N_BindLevel( cOption )
* Arguments: cOption = R -Read security
* W -Write security
* U -User id number
*
*********************************************************
function N_BindLevel
PARAMETERS cWhich
PRIVATE cBuffer,cRequest
PRIVATE xAnswer,y
IF PARAMETERS() = 0
cWhich = "U"
ENDIF
cBuffer = SPACE(5)
cRequest = CHR(70)
xAnswer = -1
IF Netware(227,cRequest,čcBuffer) == 0
DO CASE
CASE cWhich = "R"
y = ASC(cBuffer)%16
xAnswer = SUBSTR("ALOSN",y+1,1)
CASE cWhich = "W"
y = INT(ASC(cBuffer)/16)
xAnswer = SUBSTR("ALOSN",y+1,1)
OTHERWISE
xAnswer = Long2Fox(SUBSTR(cBuffer,2,4))
ENDCASE
ENDIF
RETURN xAnswer
baze.podataka.339max.headroom,
FoxPro
Functions to access Netware's Bindery (3)
**********************************************************
*
* Function: N_ObjectName()
* Purpose: Returns object's name from a bindery object
* Syntax: cName = N_ObjectName( nId )
* Arguments: nId - Bindery object id
* Returns: cName - The object's name in the bindery
*
* Notes:
*
*********************************************************
function N_ObjectName
parameter nId
PRIVATE cBuffer,cRequest
PRIVATE cName
cBuffer = SPACE(54)
cRequest = CHR(54)+Fox2Long(nId)
cName = ""
IF Netware(227,cRequest,čcBuffer) == 0
cName = CleanStr( SUBSTR(cBuffer,7) )
ENDIF
RETURN cName
**********************************************************
baze.podataka.340max.headroom,
FoxPro
Functions to access Netware's Bindery (4)
* Function: N_ObjectId()
* Purpose: Returns the object id for a given object
* Syntax: nIdCode = N_ObjectId( <cObject>,<nObjType> )
* Arguments: cObject - Object name
* nObjType - Type of object
*
* Returns: nIdCode - Bindery id number
*
* Notes: Every object in the bindery has a unique
* number to identify it. This function can be
* used to determine the number for any object.
*
**********************************************************
function N_ObjectId
PARAMETERS cObject,nObjType
PRIVATE cBuffer,nId,cRequest
cBuffer = SPACE(54) && Set up Receive Buffer
nId = 0
cRequest = CHR(53)+CHR(0)+CHR(nObjType)+;
Lstring(cObject,48)
if Netware(227, cRequest, čcBuffer) == 0
nId = Long2Fox(SUBSTR(cBuffer,1,4)) && Extract id
endif
RETURN nId
*********************************************************
baze.podataka.341max.headroom,
FoxPro
Functions to access Netware's Bindery (5)
* Function: N_WhoAmI()
* Purpose: Get workstation's user id
* Syntax: cUser = N_WhoAmI()
* Arguments: <NONE>
* Returns: cUser - Object name for current connection
*
* Notes: This function is used to determine the
* bindery name for the current connection.
* You could use this function to determine
* a user's id code for logging purposes.
*
*********************************************************
function N_WhoAmI
PRIVATE nId,cUser
nId = N_BindLevel("U")
cUser = ""
if !empty(nId)
cUser = N_ObjectName(nId)
endif
RETURN cUser
**********************************************************
baze.podataka.342max.headroom,
FoxPro
Functions to access Netware's Bindery (6)
* Function: N_Properties()
* Purpose: Scans the bindery object for properties
* Syntax: nCount = N_Properties(cObject,nType,;
* aProperties )
* Arguments: cObject - Object to determine properties
* nType - Type of object being checked
* aProperties - List of object's properties
*
* Returns: nCount - Number of properties associated
* with this object.
*
* Notes: This function is used to determine what
* properties are associated with this object.
* You can also use the N_PropVal() function to
* determine the value of the properties.
*
**********************************************************
function N_Properties
PARAMETERS cObject, nType,aProperties
PRIVATE cBuffer,cRequest,nCount,cList
PRIVATE x,y,z
cBuffer = SPACE(24)
cRequest = CHR(60)+;
CHR(0)+CHR(nType)+;
Lstring(cObject,48)+;
CHR(255)+CHR(255)+CHR(255)+CHR(255)+;
Lstring("*",15)
nCount = 0
cList = ""
DO WHILE Netware( 227, cRequest, čcBuffer) = 0
nCount = nCount +1
cList = cList +CleanStr(LEFT(cBuffer,16))+";"
****************************************************
** replace sequence number with last one received **
****************************************************
cRequest = STUFF(cRequest, 53, 4, SUBSTR(cBuffer,19,4))
ENDDO
IF nCount > 0
DIMENSION aPropertiesŠnCountĆ
z = 1
FOR x = 1 TO nCount
y = AT(";",cList,x)
aPropertiessŠxĆ = SUBSTR(cList,z,y-z)
z = y+1
NEXT
ENDIF
RETURN nCount
**********************************************************
baze.podataka.343max.headroom,
FoxPro
Functions to access Netware's Bindery (7)
* Function: N_PropVal()
* Purpose: Return value of a specified property
* Syntax: xValue := N_PropVal( cObject,;
* ntype,;
* cProperty,;
* lClean )
*
* Arguments: cObject - Object to be queried
* nType - Type of object being queried
* cProperty - Property value to extract
* lClean - Should the return value be
* NULL stripped?
*
* Returns: xValue - varies depending upon the
* object and property
*
* Notes: This function is used to determine the value
* for a property from an another object. For
* example, you can use this function to
* determine the full name of a bindery object.
*
**********************************************************
function N_PropVal
PARAMETERS cObject,nType,cProperty,lClean,aList
PRIVATE cBuffer,xReturn,nSegment,nPos,cName,nObjtype
PRIVATE cId,cRequest,cList,isList
PRIVATE x,y,z
cBuffer = SPACE(130)
xReturn = ""
nSegment = 1
isList = .F.
cRequest = CHR(61)+;
CHR(0)+CHR(nType)+;
Lstring(cObject,48)+;
CHR(nSegment)+;
Lstring(UPPER(cProperty),16)
IF type("lClean") <> "L"
lClean = .T.
ENDIF
DO WHILE Netware(227, cRequest, čcBuffer) == 0
IF ASC(SUBSTR(cBuffer,130,1)) >0
IF nSegment == 1
cList = ""
isList = .T.
xReturn = 0
ENDIF
nPos = 1
DO WHILE nPos < 128
cId = Long2Fox(SUBSTR(cBuffer,nPos,4)) && Read bindery ID
IF cId == 0 && Check for end of segment
exit
ENDIF
cName = N_ObjectName(cId) && Lookup Name & Type
cList = cList + cName+";" && and put in Return Array
xReturn = xReturn +1
nPos = nPos + 4 && then point to next ID
ENDDO
ELSE
IF nSegment == 1
xReturn = ""
ENDIF
xReturn = xReturn + left(cBuffer, 128)
ENDIF
nSegment = nSegment +1
cRequest = STUFF(cRequest,53,1,CHR(nSegment))
ENDDO
DO CASE
CASE isList
IF xReturn > 0
DIMENSION aListŠxReturnĆ
z = 1
FOR x = 1 TO xReturn
y = AT(";",cList,x)
aListŠxĆ = SUBSTR(cList,z,y-z)
z = y+1
NEXT
ENDIF
CASE lClean and type("xReturn")="C"
xReturn = CleanStr(xReturn)
ENDCASE
RETURN (xReturn)
**********************************************************
baze.podataka.344max.headroom,
FoxPro
Functions to access Netware's Bindery (8)
* Function: N_FullName()
* Purpose: Get the users full name
* Syntax: <cFullName> := N_FullName( cUser )
*
* Arguments: cUser - User bindery name
*
* Returns: cFullName - Full name of this user
*
* Notes: This function returns the user's
* identification string, usually their name.
*
*
**********************************************************
function N_FullName
PARAMETER cUser
IF PARAMETERS()=0
cUser = N_WhoAmI()
ENDIF
RETURN N_PropVal(cUser,1,"IDENTIFICATION",.T.)
*************************************
baze.podataka.345max.headroom,
FoxPro
Functions to access Netware's Bindery (9)
* Function: N_AcctExpire()
* Purpose: Get a the date this account expires
* Syntax: <dExpire> := N_AcctExpire( cUser )
*
* Arguments: cUser - User bindery name
*
* Returns: dExpire - Expiration date of user's account
*
* Notes: This function returns the user's expiration
* date, which can be used for scheduling purposes
* to prevent future activities from being
* scheduled past the user's access date.
*
* Example: LOCAL dExpire := N_AcctExpire( N_WhoAmI() )
*
***********************************************************************
function N_AcctExpire
PARAMETER cUser
PRIVATE cString,yy,mm,dd
IF PARAMETERS()=0
cUser = N_WhoAmI()
ENDIF
cString = N_PropVal(cUser,1,"LOGIN_CONTROL",.T.)
yy = 1900 + ASC(SUBSTR(cString,1,1))
mm = ASC(SUBSTR(cString,2,1))
dd = ASC(SUBSTR(cString,3,1))
RETURN IIF(mm=0,CTOD(" / / "),CTOD(str(mm,2)+;
"/"+STR(dd,2)+"/"+STR(yy,4)))
**********************************
baze.podataka.346max.headroom,
FoxPro
Functions to access Netware's Bindery (10)
* Function: N_Balance()
* Purpose: Get the current account balance for a user
* Syntax: <nBalance> := N_Balance( cUser )
*
* Arguments: cUser - User bindery name
*
* Returns: nBalance - User's balance if accounting is
* installed
*
* Notes: This function returns the current balance for
* the specified user. If accounting is not
* installed, zero will be returned. You can use
* this function to restrict certain program
* operations to users with sufficient funds.
*
* Example: LOCAL nBalance := N_Balance( N_WhoAmI() )
*
**********************************************************
function N_Balance
PARAMETER cUser
PRIVATE cAmt
IF PARAMETERS()=0
cUser = N_WhoAmI()
ENDIF
cAmt = N_PropVal(cUser,1,"ACCOUNT_BALANCE",.F.)
RETURN Long2Fox(SUBSTR(cAmt,1,4))
**********************************
baze.podataka.347max.headroom,
FoxPro
Functions to access Netware's Bindery (11)
* Function: N_CredLimit()
* Purpose: Get the current credit limit for a user
* Syntax: <nCredLimit> := N_CredLimit( cUser )
*
* Arguments: cUser - User bindery name
*
* Returns: nBalance - User's credit limit if accounting is installed
*
* Notes: This function returns the current credit limit for the
* specified user. If accounting is not installed, zero
* will be returned. You can use this function to restrict
* certain program operations to user with sufficient funds.
*
*
**********************************************************
function N_CredLimit
PARAMETER cUser
PRIVATE cAmt
IF PARAMETERS()=0
cUser = N_WhoAmI()
ENDIF
cAmt = N_PropVal(cUser,1,"ACCOUNT_BALANCE",.F.)
RETURN Long2Fox(SUBSTR(cAmt,5,4))
**********************************************************
baze.podataka.348max.headroom,
FoxPro
Functions to access Netware's Bindery (12)
* Function: N_IsMember()
* Purpose: Check for group membership
* Syntax: <logical> := N_IsMember( cObject,cGroup )
*
* Arguments: cObject - Object to be tested
* cGroup - Group to test
*
* Returns: TRUE if object is a member, FALSE otherwise
*
* Notes: This function is used to see if an object is
* a member of a group. It can be used to
* restrict menu choices to only members of a
* department.
*
**********************************************************
function N_IsMember
PARAMETERS cObject,cGroup
PRIVATE cRequest
cRequest = CHR(67)+;
CHR(0)+CHR(1)+;
Lstring(cObject,48)+;
Lstring("GROUPS_I'M_IN",16)+;
CHR(0)+CHR(2)+;
Lstring(cGroup,48)
RETURN Netware(227,cRequest,"") == 0
**********************************************************
baze.podataka.349max.headroom,
FoxPro
Functions to access Netware's Bindery (13)
* Function: N_IsManager()
* Purpose: Check if user is manager of a group
* Syntax: <logical> := N_IsManager( cObject,cGroup )
*
* Arguments: cObject - Object to be tested
* cGroup - Group to test
*
* Returns: TRUE if object is a manager, FALSE otherwise
*
* Notes: This function is used to see if an object is
* a manager of a group. It can be used to
* restrict menu choices to only managers of a
* department.
*
**********************************************************
function N_IsManager
PARAMETERS cObject,cGroup
PRIVATE cRequest
cRequest = CHR(67)+;
CHR(0)+CHR(2)+;
Lstring(cGroup,48)+;
Lstring("OBJ_SUPERVISORS",16)+;
CHR(0)+CHR(1)+;
Lstring(cObject,48)
RETURN Netware(227,cRequest,"") == 0
**********************************************************
baze.podataka.350max.headroom,
FoxPro
Functions to access Netware's Bindery (14)
* Function: N_IsInSet()
* Purpose: See if one object is with another's set
* property
* Syntax: <logical> = N_IsInSet( cObject1,nType1,;
* cObject2,nType2,cProperty)
*
* Arguments: cObject1 -Object to be tested for ownership
* nType1 -Type of owner object
* cObject2 -Object to be tested for membership
* nType2 -Type of member object
* cProperty -Set property to test
*
* Returns: TRUE if in group, FALSE otherwise
*
* Notes: This function is used to determine if one
* object is a member of the specified property
* for another object. For example, you can
* use this function to determine if a user
* should be allowed to perform a menu option.
*
**********************************************************
function N_IsInSet
PARAMETER cObject1,nType1,cObject2,nType2,cProperty
PRIVATE cRequest
cRequest = CHR(67)+;
CHR(0)+CHR(nType1)+;
Lstring(cObject1,48)+;
Lstring(cProperty,16)+;
CHR(0)+CHR(nType2)+;
Lstring(cObject2,48)
RETURN Netware(227,cRequest,"") == 0
**********************************************************
baze.podataka.351max.headroom,
FoxPro
Functions to access Netware's Bindery (15)
* Function: N_IsOperator( cUser, cServer )
* Purpose: See if the user has operator rights to the
* server
* Syntax: <logical> := N_IsOperator( cUser,cServer )
* Arguments: cUser - User Id to test
* cServer - Server to check
*
* Returns: TRUE if user has rights, FALSE otherwise
*
* Notes: This function is used to see if the user id
* has operator rights on a server. You could
* use this function to control access into
* parts of your FoxPro application.
*
*
**********************************************************
function N_IsOperator
PARAMETERS cUser,cServer
PRIVATE x
X = PARAMETERS()
IF X < 1
cUser = N_WhoAmI()
ENDIF
IF X < 2
DIMENSION arr_(1)
=N_ScanBindery(4,čarr_)
cServer = arr_Š1Ć
ENDIF
RETURN N_IsInSet( cServer,4,cUser,1,"OPERATORS" )
**********************************************************
baze.podataka.352max.headroom,
FoxPro
Functions to access Netware's Bindery (16)
* Function: N_DefExpire()
* Purpose: See the default expiration date for new
* user-ids
* Syntax: <dExpire> := N_DefExpire()
* Arguments: NONE
*
* Returns: An date value or an empty date if a
* problem occurs
*
* Notes: This function is used to see what date the
* user id could expire on. You might use this
* date to limit future scheduling to before
* the expiration date.
*
*
**********************************************************
function N_DefExpire
PRIVATE cString,yy,mm,dd
**
cString = N_PropVal("SUPERVISOR",1,"USER_DEFAULTS",.F.)
yy = 1900 + ASC(SUBSTR(cString,1,1))
mm = ASC(SUBSTR(cString,2,1))
dd = ASC(SUBSTR(cString,3,1))
RETURN IIF(mm=0,CTOD(" / / "),;
CTOD(STR(mm,2)+"/"+STR(dd,2)+"/"+STR(yy,4)))
**********************************************************
baze.podataka.353max.headroom,
FoxPro
Functions to access Netware's Bindery (17)
* Function: N_AddObject()
* Purpose: Adds an object into the bindery
* Syntax: <logical> := N_AddObject(cObject,;
* nType,;
* cFlag,;
* cRead,;
* cWrite )
* Arguments: cObject - Object to be added to the bindery
* nType - Type of object being added
* cFlag - Static/Dynamic
* cRead - Read security
* cWrite - Write security
*
* Returns: TRUE if added, FALSE otherwise
*
* Notes: This function is used to add a new object into the
* bindery. You must specify the object name, type,
* flag and security for any item added.
*
**********************************
function N_AddObject
PARAMETERS cObject, nType, cFlag, cRead, cWrite
PRIVATE cRequest,nRead,nWrite
cRequest = chr(50)
IF PARAMETERS() < 4
cFlag = "S"
ENDIF
IF PARAMETERS() < 5
cRead = "O"
ENDIF
IF PARAMETERS() < 6
cWrite = "O"
ENDIF
nWrite = AT(cWrite,"ALOSN")-1
nRead = AT(cRead ,"ALOSN")-1
cRequest = cRequest + CHR(IIF(cFlag="D", 1, 0))+;
CHR((nWrite * 16) + nRead)+;
CHR(0)+CHR(nType) +;
Lstring(cObject,48)
RETURN Netware(227,cRequest,"") == 0
**********************************************************
baze.podataka.354max.headroom,
FoxPro
Functions to access Netware's Bindery (18)
* Function: N_DelObject()
* Purpose: Removes an object from the bindery
* Syntax: <logical> := N_DelObject( cOject,nType )
*
* Arguments: cObject - Object to be remove from bindery
* nType - Type of object being removed
*
* Returns: TRUE if removed, FALSE otherwise
*
* Notes: This function is used to remove a bindery
* object. Keep in mind that Netware's security
* will probably restrict you from removing any
* objects unless the id has supervisory rights.
*
**********************************************************
function N_DelObject
PARAMETERS cObject, nType
PRIVATE cRequest
cRequest = CHR(51)+;
CHR(0)+CHR(nType)+;
Lstring(cObject,48)
RETURN Netware(227,cRequest,"") == 0
**********************************************************
baze.podataka.355max.headroom,
FoxPro
Functions to access Netware's Bindery (19)
* Function: N_RenObject()
* Purpose: Renames a bindery object
* Syntax: <logical> := N_RenObject( cOld,nType,cNew )
*
* Arguments: cOld - Original name of the object
* nType - Type of object being renamed
* cNew - New name of the bindery object
*
* Returns: TRUE if changed, FALSE otherwise
*
* Notes: This function is used to rename an object
* in the bindery.
*
**********************************************************
function N_RenObject
PARAMETERS cOld, nType, cNew
PRIVATE cRequest
cRequest = CHR(52)+;
CHR(0)+CHR(nType)+;
Lstring(cOld,48)+;
Lstring(cNew,48)
RETURN Netware(227,cRequest,"") == 0
**********************************************************
baze.podataka.356max.headroom,
FoxPro
Functions to access Netware's Bindery (20)
* Function: N_AddProperty()
* Purpose: Adds a property to a bindery object
* Syntax: <logical> = N_AddProperty( cObject,;
* nType,;
* cProperty,;
* cFlag,;
* cItemSet,;
* cRead,;
* cWrite )
*
* Arguments: cObject - Object to add the property to
* nType - Type of object
* cProperty - Set property to add to object
* cFlag - Property flag, Static or Dynamic
* cItemSet - (I)tem or (S)et property
* cRead - Property read security
* cWrite - Property write security
*
* Returns: TRUE if added, FALSE otherwise
*
* Notes: This function is used to add a property to an
* existing bindery object. For example, you can
* use this function to add a fax number property
* to a user bindery object. Keep in mind this
* function only adds the property, it does not
* assign a value to it.
*
**********************************************************
function N_AddProperty
PARAMETERS cObject,nType,cProperty,cFlag,cItemSet,cRead,cWrite
PRIVATE cRequest,nRead,nWrite
cRequest = CHR(57)+;
CHR(0)+CHR(nType)+;
Lstring(cObject,48)
IF PARAMETERS() < 4
cFlag = "S"
ENDIF
IF PARAMETERS() < 5
cItemSet = "I"
ENDIF
IF PARAMETERS() < 6
cRead = "O"
ENDIF
IF PARAMETERS() < 7
cWrite = "O"
ENDIF
nWrite = AT(cWrite,"ALOSN")-1
nRead = AT(cRead ,"ALOSN")-1
cRequest = cRequest +CHR(IIF(cFlag="D", 1, 0)+;
IIF(cItemSet="S",2,0))+;
CHR((nWrite*16)+nRead)+;
Lstring(UPPER(cProperty),16)
RETURN Netware(227,cRequest,"") == 0
**********************************************************
CONF JOIN PC.PROG.4
CONF REPLY baze.podataka
baze.podataka.357max.headroom,
FoxPro
Functions to access Netware's Bindery (22)
* Function: N_ChgValue()
* Purpose: Changes a property's value
* Syntax: <logical> := N_ChgValue( cObject,nType,;
* cProperty,xValue )
*
* Arguments: cObject - Object name to be updated
* nType - Type of object being updated
* cProperty - Property to change
* xValue - New value for the property
*
* Returns: TRUE if property value was changed,
* FALSE otherwise
*
* Notes: This function is used to change the value
* for a given property. For example, after
* adding a property called FAX_NUMBER to a
* user object, you would use this function
* to write the person's fax number in.
*
**********************************************************
function N_ChgValue
PARAMETERS cObject, nType, cProperty, xValue
PRIVATE cRequest
cRequest = CHR(62)+;
CHR(0)+CHR(nType)+;
Lstring(cObject,48)+;
CHR(1)+CHR(255)+;
Lstring(UPPER(cProperty),16)+;
PADR(xValue,128,CHR(0))
RETURN Netware(227,cRequest,"") == 0
**********************************************************
baze.podataka.358max.headroom,
FoxPro
Functions to access Netware's Bindery (23)
* Function: N_Add2Set()
* Purpose: Adds an object to a set
* Syntax: <logical> := N_Add2Set( cOwner,nOwnType,;
* cObject,nType,cProperty )
*
* Arguments: cOwner - Bindery object that owns the set
* nOwnType - Owner's object type
* cObject - Object to be added to owner set
* nType - Type of object being added
* cProperty - Set property to add cObject to
*
* Returns: TRUE if added, FALSE otherwise
*
* Notes: This function is used to add an object to a
* group owned by another object. For example,
* you can use this function to place a user
* bindery object into a group.
*
**********************************************************
function N_Add2Set
PARAMETERS cOwner, nOwnType, cObject, nType, cProperty
PRIVATE cRequest
cRequest = CHR(65)+;
CHR(0)+CHR(nOwnType)+;
Lstring(cOwner,48)+;
Lstring(UPPER(cProperty),16)+;
CHR(0)+CHR(nType)+;
Lstring(cObject,48)
RETURN Netware(227,cRequest,"") == 0
**********************************************************
baze.podataka.359max.headroom,
FoxPro
Functions to access Netware's Bindery (24)
* Function: N_DelFromSet()
* Purpose: Removes an object from a set
* Syntax: <logical> = N_DelFromSet( cOwner,nOwnType,;
* cObject,nType,cProperty )
*
* Arguments: cOwner - Bindery object that owns the set
* nOwnType - Owner's object type
* cObject - Object to be removed to owner's
* set
* nType - Type of object being removed
* cProperty - Set property to remove cObject
* from
*
* Returns: TRUE if removed, FALSE otherwise
*
* Notes: This function is used to remove an object
* from a group owned by another object.
*
**********************************************************
function N_DelFromSet
PARAMETERS cOwner, nOwnType, cObject, nType, cProperty
PRIVATE cRequest
cRequest = CHR(66)+;
CHR(0)+CHR(nOwnType)+;
Lstring(cOwner,48)+;
Lstring(UPPER(cProperty),16)+;
CHR(0)+CHR(nType)+;
Lstring(cObject,48)
RETURN Netware(227,cRequest,"") == 0
baze.podataka.360max.headroom,
FoxPro
Functions to access Netware's Bindery (25)
* Function: N_Members()
* Purpose: Get members of a group
* Syntax: <nCount> := N_Members( cObject,čALIST )
*
* Arguments: cGroup - Group to test
* aList - List of users
*
* Returns: Number of users found within the group
*
* Notes: This function is used to determine the number
* of members in a group. It also returns a list
* list of members.
*
**********************************************************
function N_Members
PARAMETERS cGroup,aList
PRIVATE nCount
if PARAMETERS() < 2
return 0
endif
nCount= N_PropVal(cGroup,2,"GROUP_MEMBERS",.F.,čALIST)
RETURN nCount
baze.podataka.361max.headroom,
FoxPro
Functions to access Netware's Bindery (26)
* Function: N_Managers()
* Purpose: Get managers of a group
* Syntax: <nCount> := N_Managers( cObject,čALIST )
*
* Arguments: cGroup - Group to test
* aList - List of managers
*
* Returns: Number of managers found within the group
*
* Notes: This function is used to determine the number
* of managers in a group. It also returns a list
* list of managers.
*
**********************************************************
function N_Managers
PARAMETERS cGroup,aList
PRIVATE nCount
if PARAMETERS() < 2
return 0
endif
nCount= N_PropVal(cGroup,2,"OBJ_SUPERVISORS",.F.,čALIST)
RETURN nCount
baze.podataka.362max.headroom,
FoxPro
Functions to access Netware's Bindery (27)
* Function: N_Qdir()
* Purpose: Get the name of the print queue's directory
* Syntax: <cDir> = N_Qdir( nQueueId )
*
* Arguments: nQueueId -Bindery object id of queue
*
* Returns: cDir - Directory where files are stored
*
* Notes: This function is used to determine the name
* of the directory where the print queues files
* are stored until they are printed.
*
**********************************************************
function N_Qdir
PARAMETER nId
PRIVATE cDir
cDir = N_PropVal( nId,3,"Q_DIRECTORY",.T. )
RETURN cDir
baze.podataka.363max.headroom,
FoxPro
Functions to access Netware's Bindery (28)
* Function: N_QOperators()
* Purpose: Get a list of queue operators
* Syntax: <nCount> = N_QOperators( nQueueId,čaList )
*
* Arguments: nQueueId -Bindery object id of queue
* aList -Array passed by reference
*
* Returns: nCount -Number of queue operators
*
* Notes: This function is used to determine the user
* ids of the print queues operators.
*
**********************************************************
function N_QOperators
PARAMETER nId,aList
PRIVATE nCount
nCount = N_PropVal( nId,3,"Q_DIRECTORY",.T.,čALIST )
RETURN nCount
baze.podataka.364max.headroom,
FoxPro
Functions to access Netware's Bindery (29)
* Function: N_NetAddr()
* Purpose: Returns the file server's network address
* Syntax: <nAddr> := N_NetAddr()
* Arguments: cServer
*
* Returns: 0 or the specified servers network
* address
*
**********************************************************
function N_NetAddr
PARAMETERS cServer
PRIVATE cString
IF PARAMETERS() < 1
DIMENSION arr_(1)
=N_ScanBindery(4,čarr_)
cServer = arr_Š1Ć
ENDIF
cString = N_PropVal(cServer,4,"NET_ADDRESS",.F.)
RETURN cString
**********************************************************
baze.podataka.365max.headroom,
FoxPro
Functions to access Netware's Bindery (30)
**********************************************************
* Function: Netware() *
* Purpose: Shell for call Netware's API *
**********************************************************
function Netware
PARAMETERS nService,cRequest,cReply
DIMENSION aRegsŠ10Ć
PRIVATE nReturn
nReturn = -1
aRegsŠ 1Ć = nService * 256
aRegsŠ 5Ć = .T.
aRegsŠ 6Ć = .F.
aRegsŠ 8Ć = CHR(LEN(cRequest))+CHR(0) + cRequest
aRegsŠ 9Ć = CHR(LEN(cReply))+CHR(0) + cReply
IF fp_int86( 33, čaRegs )
nReturn = aRegsŠ1Ć % 256
IF nReturn < 0
nReturn = nReturn +256
ENDIF
ENDIF
cReply = SUBSTR(aRegsŠ9Ć,3)
RETURN nReturn
**********************************************************
Eto i poslednje funkcijice. Gigantsko izvinjenje onima koje ovako
nešto ne zanima, ali bih lično dao i poslednji nerv nervirajući se
zbog većeg broja poruka slične sadržine :) Uskoro sledi i rasprava
vezana za pomenute f-je, te sam ih zato i dao odvojeno, a ne u obliku
fajla (kako bi predložili zli jezici ;), edabi se pozivao na broj
poruke pri detaljisanju.
baze.podataka.366max.headroom,
-> #321, gaston> P.S. Bolje naka max.headroom javno objavi broj
> ziro-racuna, verovatno nisam jedini koji zeli da konkretno
> zahvali ...
Hvala na pivu, ali predlažem kokakolu :)
Naravno, tek kad nam otvore temu ;)
baze.podataka.367max.headroom,
-> #322, goxx> Da li bi ti to bila pouzdana informacija o postojanju
> CDX-a? Šta kad ručno izbrišeš CDX, a u DBF-u ostane
> indikator?
U tom slučaju Fox napomene da je došlo do oštećenja/brisanja CDX
fajla, i negde (verovatno u strukturi DBF-a) ukine tu informaciju. Pa
kad sledeći put otvoriš pomenuti DBF ne javlja se nikakva greška,
jerbo su indeksi (CDX) nestali :) A mene brine to ukidanje
informacije, jerbo je greška samim tim jednokratna.
Poruka dela: OBAVEZNO startovati programče koje kontroliše strukture
baza i pripadajuće indekse pri svakom podizanju aplikacije, a sve po
undapred definisanom šablonu. Ako je CDX oštećen, obrisati ga i nanovo
otvoriti bazu pa rekreirati - u svakom drugom slučaju ostaste bez
otvorene baze :)
baze.podataka.368max.headroom,
-> #327, bulaja> Ne upisuje! :)
Bre :), pa zašto onda Fox daje poruku "Structural CDX file reference
removed"?
I još nešto:
1. kreiraš CDX fajl
2. CLOSE DATA
3. zatim ga obrišeš (na kvarno - !DEL *.CDX) i otvoriš bazu
4. Fox kaže "CDX-a nema"
5. ti kažeš "Ignore" i fleg je ukinut
6. CLOSE DATA
7. sada lepo napraviš jedan Undelete tog CDX fajla
8. otvoriš bazu
9. uočiš da nigde nema definicija indeksa (a CDX-a ima - recovered)
10. cvrc! :)
baze.podataka.369max.headroom,
FoxPro
Functions to access Netware's Bindery (21)
* Function: N_DelProperty()
* Purpose: Removes a property from a bindery object
* Syntax: <logical> := N_DelProperty( cObject,nType,;
* cProperty )
*
* Arguments: cObject - Object to be updated
* nType - Type of object being updated
* cProperty - Property to remove from object
*
* Returns: TRUE if removed, FALSE otherwise
*
* Notes: This function is used to remove a property
* from a bindery object. For example, you can
* use this function to remove the FAX_NUMBER
* property from a user-id object
*
**********************************************************
function N_DelProperty
PARAMETERS cObject, nType, cProperty
PRIVATE cRequest
cRequest = CHR(58)+ ;
CHR(0)+CHR(nType)+;
Lstring(cObject,48)+;
Lstring(UPPER(cProperty),16)
RETURN Netware(227,cRequest,"") == 0
**********************************************************
baze.podataka.370dr.grba,
-> #331, misa.m>> ACCESS: If you're looking for a superb Windows development tool,
>> look no further.
Tek sam zagnjurio u Access. Alat je nešto daleko nadmoćnije od svega
što sam dosada video na DOS ili Win platformama, naravno uz ogradu da
nisam video sve (((:
Ali da ždere resurse mašine - ždere. Na 486 DX2 VLB sa 8 MB RAM je tek
podnošljivo. Na 386/40 sa 4 MB RAM ne prestaje da drlja po disku. Istina:
specifikacija je izričita da Access 2.0 zahteva 6 MB RAM za sebe. Ako
hoćete udobnu razvojnu mašinu za Access, stavite u nju 16 MB RAM i
optimizujte parametre rada diska.
I šta činiti, pitanje je sad? Ostati na XT socijali ili ići dalje?
Moj izbor je ovo drugo.
baze.podataka.371djelovic,
-> #368, max.headroom> > Ne upisuje! :)
>
> Bre :), pa zašto onda Fox daje poruku "Structural CDX file reference
> removed"?
Bre! :) Zašto jednostavno ne napravite dve baze, jednu sa indeksima i jednu
bez, pa uradite compare? Tako ćete najbrže otkriti u kom zecu leži grm.
baze.podataka.372nkbog,
-> #321, gaston> U vrlo lepoj knjizici "CA-Clipper 5.2 i mrezno programiranje" od
> J.D.Booth i G.Lief daju se strukture DBF , NDX, CDX i dr.,
U knjižici pod imenom "Update" iz FoxPro-a 2.6 se nalaze sve strukture fajlova
(uključujući i Report, Screen itd), ali tamo nema pomena o identifikatoru
o postojanju .CDX.
Ipak on POSTOJI: na offsetu 0x1C u .DBF se nalazi 01 ako postoji, a 00 ako
ne postoji.
Kad smo kod struktura: .MNX datoteke imaju polje za MESSAGE kojega nema u
dijalozima u Menu Builderu. Kada se podesi ručno (USE kukulele.MNX, pa
BROWSE) GENMENU napravi ispravan menu (sa porukama u na dnu ekrana).
NB.
p.s. Jel' neko uspeo da skreše veličinu .FRX datoteka - t.j. da izbaci
one stvari koje trebaju za Windowse.
baze.podataka.373nkbog,
-> #325, ndragan>> to izbeci (ON ERROR, ON KEY ili nesto slicno).
> Ovo vuče na neki bag iz 2.5, koji se javljao na strelici ulevo na brauzu
> na numeričkom polju. Nisam imao slučaj, mada sam čuo, a prema
> dokumentaciji treba da je ispravljeno u 2.6.
Mea culpa (glupa?): na serveru smo imali i 2.5 i 2.6, a na tim računarima
je bilo mapiranje na katalog 2.5, a ne 2.6... U 2.6 nema tog problema.
NB.
baze.podataka.374djorzor,
Ja sam možda malo glup, ali ...
Kako da u Paradox-u ili Access-u napravim Query
koji vraća samo one record-e koji su u duplikatu?
Na primer, imam spisak imena i adresa i hoću da vidim
koje su unete više od jedanput.
baze.podataka.375zelkop,
-> #374, djorzorValjda je najjednostavnije da se indeksira, pa se vizuelno
vide duplikati. Ako se postavi i key na indeksiranoj bazi,
trebalo bi da se automatski formira izveštaj tipa
"key violation".
baze.podataka.376max.headroom,
Za sve one koji se bave Fox-om pod Novell-om, evo
zanimljivog materijala za proučavanje. Slede opisi
funkcija navedenih u fajlu NETPRINT.ARJ - a tiču
se mrežnog printera. Sve po Booth-u i Lief-u...
Function: N_STARTCAP()
Purpose: To allow capture of local printers
from within a FoxPro 2.5 program
Syntax: <logical> = N_STARTCAP( Š<nPrinter>Ć )
Arguments: nPrinter - Optional print to capture
Returns: TRUE is successful, FALSE otherwise
Notes: This function is used to start a capture to the
specified printer.
---------------------------------------------------------------------
Function: N_FLUSHCAP()
Purpose: To force the network to print the
current capture file.
Syntax: <nJob> = N_FLUSHCAP( Š<nPrinter>Ć )
Arguments: nPrinter - Optional captured printer to flush
Returns: Job number for print queue handling printing, or
zero if a problem occurs.
Notes: This function is used to send a capture file to
the network printer. The capture will not be
stopped and all subsequent output will be
redirected as well.
---------------------------------------------------------------------
Function: N_CLOSECAP()
Purpose: To close the capture and return control
to the local printer
Syntax: <nJob> = N_CLOSECAP( Š<nPrinter>Ć )
Arguments: nPrinter - Optional captured printer to close
Returns: Job number for print queue handling printing, or
zero if a problem occurs.
Notes: This function is used to close a capture being
run on a printer. The output will be set to the
network printer.
---------------------------------------------------------------------
Function: N_CANCELCAP()
Purpose: To cancel the capture and return control
to the local printer. The file is not printed.
Syntax: <logical> = N_CANCELCAP( Š<nPrinter>Ć )
Arguments: nPrinter - Optional captured printer to cancel
Returns: TRUE if canceled, FALSE otherwise
Notes: This function is used to cancel a capture being
run on a printer. No output will be set to the
network printer, it will all be discarded if the
function returns TRUE.
---------------------------------------------------------------------
Function: N_CAPFLAGS()
Purpose: To set the network capture flags
Syntax: <logical> = N_CapFlags( aOldFlags Š,<aNewFlags>Ć )
Arguments: aOldFlags - Current capture flags
aNewFlags - Optional array of new flags to set
Notes: This function is used to set the capture flags
for the default printer. The array consists of
twelve elements as defined below:
1 Logical Should banners be printed?
2 Char Text of the banner
3 Numeric Which local printer is captured?
4 Numeric Which network printer is serving it?
5 Numeric Bindery print queue object id
6 Numeric Number of copies to print
7 Numeric Form number
8 Char Name of the form to load in printer
9 Numeric Job number
10 Numeric Maximum lines down
11 Numeric Maximum characters across
12 Numeric Timeout value in seconds
---------------------------------------------------------------------
Function: N_QJOBLIST()
Purpose: Get the list of jobs within the queue
Syntax: <nCount> = N_QjobList(nQueue,čaJobs)
---------------------------------------------------------------------
Function: N_QPOSITION()
Purpose: Queries/Changes a job's print position
Syntax: <logical> = N_QPOSITION(nQueue,nJob,nPosition)
---------------------------------------------------------------------
Function: N_QREMOVE()
Purpose: Remove a job from the print queue
Syntax: <logical> = N_QREMOVE(nQueue,nJob)
---------------------------------------------------------------------
Function: Q_INSTALLED()
Purpose: To check installed state of PRINT.EXE
Returns: lInstalled - TRUE if installed, FALSE otherwise
---------------------------------------------------------------------
Function: Q_ADD.PRG
Purpose: To add a file to the print queue
Syntax: Q_add( cFilename )
Parameter: cFilename
Returns: lSuccess - TRUE if file added, FALSE otherwise
---------------------------------------------------------------------
Function: Q_REMOVE()
Purpose: To remove a file from the print queue
Syntax: Q_remove( cFilename )
Parameter: cFilename
Returns: lSuccess - TRUE if removed, FALSE otherwise
---------------------------------------------------------------------
Program: Q_CANCEL.PRG
Purpose: To cancel all jobs in the print queue
Syntax: Q_cancel()
Parameter: NONE
Returns: lSuccess - TRUE if all jobs were canceled
FALSE otherwise
---------------------------------------------------------------------
Function: P_WHERE()
Purpose: Selects where to print a report
Returns: TRUE if printer select,
FALSE if the escape key pressed
---------------------------------------------------------------------
Function: P_START()
Purpose: Sets the environment up to print
---------------------------------------------------------------------
Function: P_CANCEL()
Purpose: Check to see if ESCAPE was pressed
Returns: FALSE to continue printing
TRUE if the escape key pressed
---------------------------------------------------------------------
Function: P_END()
Purpose: Finishes the report and prints it
netprint.arjbaze.podataka.377max.headroom,
* Fox & Novell (1)
*
* Program: SYSINFO.PRG
* Function: N_Login()
* Purpose: Attempt to log in to a server
* Syntax: <logical> = N_Login(cUser,cPassword)
**********************************
function N_login
PARAMETERS cUser,cPassword
PRIVATE cRequest,cReply
cRequest = CHR(14)+;
FOX2LONG(1)+;
LSTRING(UPPER(cUser),48)
IF LEN(TRIM(cPassword)) > 0
cRequest = cRequest + LSTRING(UPPER(cPassword),16)
ENDIF
cReply = SPACE(2)
return ( Netware( 227, cRequest, čcReply ) = 0 )
baze.podataka.378max.headroom,
* Fox & Novell (2)
*
* Function: N_Logout()
* Purpose: Attempt to log out from the server
* Syntax: <logical> := N_Logout()
**********************************
function N_Logout
PRIVATE is_gone
DIMENSION aRegs(10)
STORE 0 TO aRegs
aRegsŠ1Ć = 215 * 256
is_gone = FP_Int86(33,čaRegs)
RETURN is_gone
baze.podataka.379max.headroom,
* Fox & Novell (3)
*
* Function: N_ConInfo()
* Purpose: Get array of connection information
* Syntax: <logical> = N_ConInfo(cUser,čaInfo)
**********************************
function N_ConInfo
PARAMETERS cUser,aInfo
PRIVATE cRequest,cReply,dLogDate,cLogTime,is_ok
DIMENSION aRegs(10),aWhere(1)
STORE 0 TO aRegs
is_ok = .F.
IF N_FINDSTAT(cUser,čaWhere) > 0
cRequest = CHR(22)+CHR( aWhere(1) )
cReply = SPACE(63)
IF Netware(227,cRequest,čcReply) = 0
DIMENSION aInfo(5)
SET LIBRARY TO BLNET ADDITIVE
aInfo(1) = LONG2FOX(SUBSTR(cReply,1,4))
aInfo(2) = INT2FOX(SUBSTR(cReply,5,2))
aInfo(3) = CLEANSTR(SUBSTR(cReply,7,48))
dLogDate = CTOD( STR(ASC(SUBSTR(cReply,56,1)),2)+"/"+;
STR(ASC(SUBSTR(cReply,57,1)),2)+"/"+;
STR(ASC(SUBSTR(cReply,55,1)),2) )
aInfo(4) = dLogDate
cLogTime = STR(ASC(SUBSTR(cReply,58,1)),2)+":"+;
STR(ASC(SUBSTR(cReply,59,1)),2)+":"+;
STR(ASC(SUBSTR(cReply,60,1)),2)
aInfo(5) = cLogTime
is_ok = .T.
ENDIF
ENDIF
RETURN is_ok
baze.podataka.380max.headroom,
* Fox & Novell (4)
*
* Function: N_FindStat()
* Purpose: Get a list of stations for a user
* Syntax: <nCount> = N_FindStat( cUser,čaList )
**********************************
function N_FindStat
PARAMETERS cUser, aStations
PRIVATE cReply,cRequest,nCount,x
cReply = SPACE(103) && Reply buffer
cRequest = CHR(21)+;
FOX2INT(1)+;
LSTRING(cUser,47)
nCount = 0
IF NetWare( 227,cRequest,čcReply ) = 0
nCount = ASC(SUBSTR(cReply,1,1))
IF nCount > 0
DIMENSION aStations(nCount)
FOR x = 1 TO nCount
aStations(x) = ASC(SUBSTR(cReply,x+1,1))
NEXT
ENDIF
ENDIF
RETURN nCount
baze.podataka.381max.headroom,
* Fox & Novell (5)
*
* Function: N_ShellVer()
* Purpose: Retrieves network shell information
* Syntax: cVersion = N_ShellVer()
**********************************
function N_ShellVer
PRIVATE x,cVersion
DIMENSION aRegsŠ10Ć
STORE 0 TO aRegs
cVersion = ""
aRegs(1) = 234 * 256
IF FP_Int86(33,čaRegs)
IF aRegs(1) >= 0
cVersion = ALLTRIM(STR(INT(aRegs(2)/256)))+"."+;
ALLTRIM(STR(INT(aRegs(2)%256)))+;
CHR(65+(aRegs(3)%256))
IF SUBSTR(cVersion,1,1)>="3"
x = aRegs(3)/256
IF x > 0
cVersion = cVersion + IIF(x=1,"e","x")
ENDIF
ENDIF
ENDIF
ENDIF
RETURN cVersion
baze.podataka.382max.headroom,
* Fox & Novell (6)
*
* Function: N_ConsPriv()
* Purpose: Determines if user has console privileges
* Syntax: <logical> := N_ConsPriv()
**********************************
function N_ConsPriv
PRIVATE cReply,cRequest,is_ok
is_ok = .F.
cReply = SPACE(2)
cRequest = CHR(200)
IF Netware(227,cRequest,čcReply) = 0
is_ok = .T.
ENDIF
RETURN is_ok
baze.podataka.383max.headroom,
* Fox & Novell (7)
*
* Function: N_ServLogin()
* Purpose: Get/set block for server logins allowed
* Syntax: <logical> := N_ServLogin( ŠlSettingĆ )
**********************************
function N_ServLogin
PARAMETER lSetting
PRIVATE is_allowed,cReply,pcount
pcount = PARAMETERS()
is_allowed = .T.
cReply = space(1)
IF NetWare(227,CHR(205),čcReply) = 0
is_allowed = ASC(cReply)>0
IF pcount > 0
cReply = SPACE(2)
=NetWare( 227, CHR(IIF(lSetting,204,203)),čcReply )
ENDIF
ENDIF
RETURN is_allowed
baze.podataka.384max.headroom,
* Fox & Novell (8)
*
* Function: FsDateTime()
* Purpose: Get the file server date and time
* Syntax: <array> := FSDateTime()
**********************************
function FsDateTime
PARAMETERS aInfo
DIMENSION aRegs(10)
PRIVATE cReply,dDate,cTime,is_ok
STORE 0 TO aRegs
is_ok = .F.
cReply = SPACE(7)
aRegs(1) = 231 * 256
aRegs(8) = cReply
aRegs(4) = .T.
IF FP_int86( 33, čaRegs )
dDate = CTOD( STR(ASC(SUBSTR(aRegs(8),2,1)),2)+"/"+;
STR(ASC(SUBSTR(aRegs(8),3,1)),2)+"/"+;
STR(ASC(SUBSTR(aRegs(8),1,1)),2) )
cTime = STR(ASC(SUBSTR(aRegs(8),4,1)),2)+":"+;
STR(ASC(SUBSTR(aRegs(8),5,1)),2)+":"+;
STR(ASC(SUBSTR(aRegs(8),6,1)),2)
aInfo(1) = dDate
aInfo(2) = cTime
is_ok = .T.
ENDIF
RETURN is_ok
baze.podataka.385max.headroom,
* Fox & Novell (9)
*
* Function: N_WhoBlame()
* Purpose: Get the file-server installation array
* Syntax: N_WhoBlame( čarray )
**********************************
function N_WhoBlame
PARAMETERS aInfo
PRIVATE cRequest,cReply,x,jj,is_ok
cRequest = CHR(201)
cReply = SPACE(512)
is_ok = .F.
IF Netware( 227, cRequest, čcReply ) = 0
DIMENSION aInfo(4)
FOR jj = 1 TO 4
x = AT(CHR(0),cReply)
IF x > 0
IF jj = 3
aInfoŠjjĆ = CTOD(SUBSTR(cReply,1,x-1))
ELSE
aInfoŠjjĆ = SUBSTR(cReply,1,x-1)
ENDIF
cReply = SUBSTR(cReply,x+1)
ENDIF
NEXT
is_ok = .T.
ENDIF
RETURN is_ok
baze.podataka.386max.headroom,
* Fox & Novell (10)
*
* Function: N_MiscInfo()
* Purpose: Get an array of miscellaneous server information
* Syntax: N_MiscInfo(čarray)
**********************************
function N_MiscInfo
PARAMETERS aInfo
PRIVATE cRequest,cReply,is_ok
cRequest = CHR(17)
cReply = SPACE(130)
is_ok = .F.
IF Netware( 227, cRequest, čcReply ) = 0
DIMENSION aInfo(17)
SET LIBRARY TO BLNET ADDITIVE
aInfoŠ 1Ć = CLEANSTR(SUBSTR(cReply,1,48))
aInfoŠ 2Ć = ASC(SUBSTR(cReply,49,1))
aInfoŠ 3Ć = ASC(SUBSTR(cReply,50,1))
aInfoŠ 4Ć = INT2FOX(SUBSTR(cReply,51,2))
aInfoŠ 5Ć = INT2FOX(SUBSTR(cReply,53,2))
aInfoŠ 6Ć = INT2FOX(SUBSTR(cReply,55,2))
aInfoŠ 7Ć = ASC(SUBSTR(cReply,57,1))
aInfoŠ 8Ć = ASC(SUBSTR(cReply,58,1))
aInfoŠ 9Ć = ASC(SUBSTR(cReply,59,1))
aInfoŠ10Ć = INT2FOX(SUBSTR(cReply,60,2))
aInfoŠ11Ć = ASC(SUBSTR(cReply,62,1))
aInfoŠ12Ć = ASC(SUBSTR(cReply,63,1))
aInfoŠ13Ć = ASC(SUBSTR(cReply,64,1))
aInfoŠ14Ć = ASC(SUBSTR(cReply,65,1))
aInfoŠ15Ć = ASC(SUBSTR(cReply,66,1))
aInfoŠ16Ć = ASC(SUBSTR(cReply,67,1))
aInfoŠ17Ć = ASC(SUBSTR(cReply,68,1))
is_ok = .T.
ENDIF
RETURN is_ok
baze.podataka.387max.headroom,
* Fox & Novell (11)
*
* Function: N_Down()
* Purpose: Brings down the file server
* Syntax: N_Down( lForceDown )
**********************************
function Down
PARAMETER lForceDown
PRIVATE cRequest,cReply
cRequest = CHR(211)+CHR(IIF(lForceDown,1,0))
cReply = SPACE(2)
return NetWare(227,cRequest,čcReply)
baze.podataka.388max.headroom,
* Fox & Novell (12)
*
* Function: N_ClearCon()
* Purpose: Clear an individual connection
* Syntax: N_ClearCon( nConnect )
**********************************
function N_ClearCon
PARAMETER nConnect
PRIVATE cRequest,cReply
cRequest = CHR(210)+CHR(nConnect)
cReply = SPACE(2)
return NetWare(227,cRequest,čcReply)
baze.podataka.389max.headroom,
* Fox & Novell (13)
*
* Function: N_SetDate()
* Purpose: Sets the server's date and time
* Syntax: N_SetDate( dDate,cTime )
**********************************
function N_SetDate
PARAMETERS dDate,cTime
PRIVATE cRequest,cReply
cRequest = CHR(202)+;
CHR(YEAR(dDate)-1900)+;
CHR(MONTH(dDate))+;
CHR(DAY(dDate))+;
CHR(VAL(SUBSTR(cTime,1,2)))+;
CHR(VAL(SUBSTR(cTime,4,2)))+;
CHR(VAL(SUBSTR(cTime,7,2)))
cReply = SPACE(2)
return NetWare(227,cRequest,čcReply)
baze.podataka.390max.headroom,
───────────────────────────────────────────────
PHDBASE 2.0 LAST-MINUTE NOTES AND INFORMATION
SHAREWARE VERSION
Last Updated October 1991
Korenthal Associates, Inc.
───────────────────────────────────────────────
This file contains last-minute notes and instructions on installing
and using the shareware version of PhDbase 2.0.
We welcome all disk vendors and BBS sysops who wish to distribute the
PhDbase utility, and invite them to refer to VENDOR.DOC and SYSOP.DOC
for complete information relating to them. Individuals who wish to
share the PhDbase utility with their friends and colleagues, or to
upload PhDbase to their favorite BBS's, are also welcome; please see
LICENSE.DOC for details. Sample descriptions of PhDbase suitable for
BBS file listings and vendor catalogs are available in DESCRIBE.DOC.
Please note that there are several separate products called the
PhDbase Developer's Editions which are *NOT* shareware and may
*NOT* be freely distributed. See below for additional information.
Information on registering PhDbase and other KA products can be found
in REGISTER.DOC and PRODUCTS.DOC.
─────────────
Introduction:
─────────────
PhDbase ("Phonetic Database") is a FoxPro 2 add-on utility that finds
names based upon the way they sound, rather than the way they're
spelled. Because PhDbase becomes part of the FoxPro system menu, it's
available for use whenever FoxPro's other menu options are available.
And because it's so easy to use, you can put PhDbase's searching power
to work right away!
PhDbase has two ways of finding names. Quick Search finds names when
they appear at the beginning of a search field (such as "amerikin" in
"American Express"). A typical Quick Search for a misspelled personal
or company name will often return a list of most likely selections in
a 100,000 record database in less than five seconds.
Full Search finds names when they appear anywhere in a search field
(such as "pyureena" in "Ralston Purina"), but it takes longer. How
much longer depends upon the number of records that PhDbase has to
scan. If you can create a FoxPro index on one or more fields in the
database (such as STATE), and provide some information about the
contents of this field in the record you're looking for (such as STATE
= "NY"), even a Full Search in a large database can be performed
fairly rapidly.
Last-Minute Information Page 1 of 4
PhDbase 2.0 README.DOC
─────────────────────────────────
The PhDbase Developer's Editions:
─────────────────────────────────
In addition to the PhDbase utility, there are the PhDbase Developer's
Editions, which allow you to incorporate PhDbase technology into your
own database applications. Through a set of simple function calls
such as PHDFIND, PHDTEST, and PHDFUZZY, you'll be able to closely
integrate PhDbase's powerful search capabilities into your own exist-
ing or new applications using whatever user interface code you prefer.
The PhDbase Developer's Editions are separate products available from
Korenthal Associates. Currently, Developer's Editions are available
for FoxPro 2.0, Clipper Summer '87/5.0, and dBase III Plus/IV, with
other platforms coming soon. Please see PRODUCTS.DOC for information
about ordering the PhDbase Developer's Edition.
───────────────────────────
Printing the Documentation:
───────────────────────────
You may print the PhDbase User's Guide directly by typing:
C>copy phdbase.doc prn
If you have a LaserJet or DeskJet, a better way to print the
documentation files is by using Korenthal Associates' popular laser
printing utility 4Print. 4Print saves paper by printing two or three
fully readable pages of text sideways across the page. By printing on
both sides, 4Print can yield four, six, or even more pages of text on
each sheet! As of version 4.1, 4Print includes a booklet-printing
utility called 4Book which is ideal for printing the PhDbase and other
shareware documentation.
─────────────
Installation:
─────────────
If you are installing PhDbase from a floppy disk, change directories
to your FoxPro directory. Place the PhDbase distribution disk in
drive A: or B: and run the installation program:
C>cd Đfoxpro2
C>a:install OR C>b:install
Alternatively, you may install PhDbase without changing to your FoxPro
directory by specifying the FoxPro path on the install command line.
Note that you *MUST* include the trailing backslash!!! For example:
C>a:install c:Đfoxpro2Đ
Last-Minute Information Page 2 of 4
PhDbase 2.0 README.DOC
If you are installing a version of PhDbase that was compressed for
electronic distribution, you should uncompress all the files into a
temporary directory, make that the current directory, and then run
install, specifying the FoxPro directory (with the trailing back-
slash!) on the install command line (see above). Then you can delete
the files from the temporary directory.
The install program will place the files PHDBASE.APP, PHDBASE.SET,
PHDBASE.HLP, PHDBASE.FPT, and PHSAMPLE.DBF in your FoxPro directory.
In addition, the program will create a subdirectory within your FoxPro
directory called PHDBASE (i.e. C:ĐFOXPRO2ĐPHDBASEĐ) in which it will
store the PhDbase documentation files.
─────────────────────
PhDbase is Shareware:
─────────────────────
The PhDbase utility (not the Developer's Edition) is being marketed as
shareware. Shareware gives users an opportunity to evaluate a program
before buying it. If you like PhDbase and wish to continue using it
beyond a 30-day trial period, you must order the registered version.
You'll receive the full retail package including typeset manual.
Please see the text file REGISTER.DOC for more information about the
benefits of becoming a registered user.
For information about shareware and the Association of Shareware
Professionals (ASP), please see the text file SHR-WARE.DOC.
───────────────────────────
Uploading PhDbase to BBS's:
───────────────────────────
We encourage you to give copies of the shareware version of the
PhDbase utility to your friends and colleagues, and to upload it to
any BBS's that you use. When uploading PhDbase, please use the file
name PHD200.ZIP. For sample descriptions of PhDbase suitable for BBS
file listings, please see DESCRIBE.DOC.
Please note that there are several separate products called the
PhDbase Developer's Editions which are *NOT* shareware and may
*NOT* be freely distributed.
──────────
Thank you!
──────────
The latest versions of all Korenthal Associates shareware products can
always be found in our support forum on CompuServe, PCVENB Section 3,
as well as on The Consultant BBS at 1-718-837-3236. Please feel free
Last-Minute Information Page 3 of 4
PhDbase 2.0 README.DOC
phdbase.arjbaze.podataka.391max.headroom,
AD HOC FOXRPT WRITER MODULE
Ad Hoc FOXRPT Writer requires very little from the user
beyond pointing at a desired action and hitting the ENTER key.
It was designed this way from the start.
Reports and mail label definitions created with FOXRPT Writer
can be saved, edited, and rerun at will. All output can be
sent to the printer, screen, or to a disk file. Custom indexes
can be built from within FOXRPT for your report and label runs.
Theses index files can be created with conditional expressions
through the use of a very powerful online Query builder.
( ** VERY IMPORTANT ** ) FOXPRO 2.0 COMPATIBILITY
FOXRPT Writer is completely compatible with Foxpro 2.0
DBF and FPT files. The present version is ONLY COMPATIBLE WITH
Foxpro 2.0 COMPACT .IDX and COMPACT structural .CDX files!
You can create these index files with Foxpro 2.0 with the following
syntax:
.IDX - INDEX ON <field> TO <index file name> COMPACT
.CDX - INDEX ON <field> TAG <tag name> COMPACT
FOXRPT Writer creates these COMPACT indexes by DEFAULT with its
Index Builder module!
The LOG_USEIDX field in the configuration database FOXRPT.DBF will
determine whether FOXRPT.EXE will use COMPACT .IDX or COMPACT structural
.CDX index files. IF LOG_USEIDX is set to .T. COMPACT .IDX indexes are
used. IF LOG_USEIDX is set to .F. COMPACT structural indexes are used.
Report definitions created while using COMPACT .IDX files will have the
"RPI" extension. Report definitions created using COMPACT structural
indexes will have the "RPC" extension. FOXRPT automatically displays the
correct report definitions for selection. FOXRPT will also correctly
diplay either .IDX files or structural index file TAG information during
the index selection phase of report creation. Both types of indexes for
the same files may reside in the same directory. Both types of report
definitions may reside or be created in the same directory. You only
have to remember one thing:
USE ONLY COMPACT INDEXES WITH THIS PROGRAM!
USE ONLY COMPACT INDEXES WITH THIS PROGRAM!
USE ONLY COMPACT INDEXES WITH THIS PROGRAM!
ENVIRONMENT VARIABLE
FOXRPT Writer is written in Clipper 5.01. Since Clipper will
use expanded memory for indexing purposes it is standard practice to
include the following statment in your AUTOEXEC.BAT file if you should
experience corrupt indexes:
SET CLIPPER=E:0
(or) SET CLIPPER=//E:0
Unlikely index corruption of this sort can occur with incompatible
expanded memory managers. This should alleviate any problems with
expanded memory you might encounter.
*-------------------------------------------------------------------*
MAIN MENU
*-------------------------------------------------------------------*
CREATING A REPORT DEFINITION FOR THE FIRST TIME
Ad Hoc Report Writer creates three distinct types of reports.
A single file report uses just one primary file. A relational report
type one uses both a primary and secondary file. There is one record
in the secondary file for each primary record. A relational report
type two uses both a primary and secondary file. There are multiple
secondary records for each primary record. Your data detemines which
type of report you will need to create.
Creating a report is essentially the same process for all report
types. First, the report type is chosen and then report parameters
are entered. You can control things like the left margin, spaces
between printed fields on the report, page width, page length, etc.
The only parameter that may be confusing to the you is the subtotal
parameter.
Say, for example, you have a file of customer purchases like
ORDER.DBF. It is indexed on customer number and you are trying to
total the purchases for each customer and want a grand total of all
purchases. If you choose the subtotal option on the report parameter
screen Ad Hoc Report Writer will print and sum all of the purchases
for customer 100, display a subtotal, space, and then begin printing
and summing the purchases by customer 200 and so forth. Create a
single file report for ORDER.DBF with the subtotal option. Total the
QTY and SELL fields for practice. The subtotal option's use will then
become clear.
You choose your primary and secondary files from a scolling list.
You choose the fields you wish to include in the report from scrolling
lists. Nothing could be easier! Just remember the following:
1. A MAXIUM OF 27 FIELDS FROM EACH FILE MAY BE USED IN THE REPORT.
2. THREE CALCULATED FIELDS MAY BE DEFINED PER FILE.
3. MEMO FIELD PROCESSING IS LIMITED TO ONE MEMO FIELD IN A SINGLE FILE
REPORT.
4. FIELDS APPEAR ON THE PRINTED REPORT IN THE ORDER IN WHICH THEY WERE
SELECTED.
5. IF YOU DO NOT ENTER A COLUMN HEADING FOR A FIELD THE FIELD NAME WILL
BE USED AS A COLUMN HEADING ON THE REPORT.
6. IF YOU ARE USING TOTALS, SUBTOTALS, AND/OR CALCULATED FIELDS EXPECT
YOUR REPORT TO BE WIDER THAN THE WIDTH OF THE SELECTED FIELDS ALONE.
EXTRA SPACE IS ALLOCATED TO A FIELD BEING TOTALLED AND TO A CALC
FIELD BEYOND THAT WHICH IS DISPLAYED BY THE FIELD SELECTION SCREEN.
7. WHEN CREATING RELATIONAL REPORTS OR WHEN SELECTING THE SUBTOTAL
OPTION BE CERTAIN TO SELECT KEY FIELD OF PRIMARY FILE AS FIRST
PRIMARY FIELD SELECTED! (** Very Important **)
8. PRIMARY & SECONDARY FILE KEYS MUST BE COMPATIBLE WHEN CREATING
RELATIONAL REPORTS. (** Very Important **)
9. ALL OUTPUT CAN BE STOPPED WITH THE ESC KEY IF YOU DESIRE.
EXECUTING A REPORT DEFINITION
Simply select the report definition from the scrolling list by
striking enter. You will have an opportunity to edit the report
parameters you entered when you created it. You can also edit or
create a query for the report and save it under the same or differ-
ent name. Output for all reports can go to the printer, screen, or
to a disk file.
*-------------------------------------------------------------------*
MAIL LABELS
*-------------------------------------------------------------------*
CREATING A MAIL LABEL DEFINITION FOR THE FIRST TIME
Ad Hoc Report Writer permits the creation of standard, large,
or cheshire format mailing labels. Simply take the Mailing Label
Print option from the Main Menu. You will be asked to choose a
primary file and primary file index. Next you will be given the
opportunity to query the primary file if you desire. In this manner
you can select to filter out certain zipcodes or cities according to
your preferences and needs.
You will then enter the label module. Choose the create option from
within the label module. Assign the label file a unique and meaningful
name. Select the modify contents option. Press F2 to choose field names
for each line of the label you wish to create. BE SURE TO PLACE THE
CURSOR AT THE BEGINNING OF THE LINE TO WHICH YOU ARE APPENDING FIELD
NAMES! Follow the prompts and press F10 when you are done. Be sure to
choose the proper format and dimensions from within the dimensions
selection.
By experimenting with the other options you'll find that you can
tag select records and print only them if you choose. You can now print
your mail labels and recall the new label definition you've just created
whenever you wish. Just remember the following:
1. Be certain to choose the proper format and dimension from within
the dimension option. You can make adjustments to the default
sizes as you wish. Maximum label size is 24 X 60.
2. Create index files keyed on the fields by which you want to order
your label printout. If you want labels to be printed in zipcode
order then be sure to create an index file keyed on zipcode etc.
3. Make use of the test pattern and correct your alignment before
beginning a large label run. (** Very Important **)
4. Make use of the query builder to select or filter your primary
file when printing labels if you don't wish to create a label for
every record in your file.
5. You can pause printer output with ALT-C if your label run jams in
the printer. It's not the most sophisticated way to do so, but
it certainly works. ESCAPE will ABORT a label printout.
6. A sample label definition (MAIL.LBL) is provided on your diskette.
You can experiment with changes and printing by selecting it. First
you select the Process Mailing Labels option from the Main Menu.
Then select MAIL.DBF and MAIL.IDX as your primary file and index.
7. The copies parameter will determine how many labels for each record
are printed.
8. The blank lines parameter will control the printing of blank lines
in your label definition. Blank lines can be useful for spacers
when printing large labels.
9. If you build a new label or edit an existing one and utilize the
automatic field name selector, be sure to place the cursor at the
BEGINNING of the line you are appending field names to! Experiment
with this and you'll see why!
CREATE A NEW INDEX FILE
( ** VERY IMPORTANT ** )
FOXRPT Writer is compatible with Foxpro 2.0 .IDX COMPACT INDEXES ONLY!
Simply select this option from the Main Menu. Select a primary file.
Then select the field(s) you wish to index on. If you wish to enter a
conditional expression for your new index you may do so at this time with
the use of the powerful online query builder. If you build a query such
as LAST # "ADAMS" .AND. AMOUNT # 500 your new index will only contain
records that meet these criteria. The last step in creating a new index
is giving the new index file a name. That's all! The FOXRPT Writer
does the rest!
( ** VERY IMPORTANT ** )
1. FOXRPT converts numeric and date fields to character values when
you build an index with them. FOXRPT ensures the proper ordering of
values in this manner. Character indexes are completely compatible and
need not be rebuilt. This conversion of numeric & date fields to string
values is standard practice and enables you to build compound keys with
mixed data types. These indexes are not backwards compatible with Foxpro,
but it is a simple procedure to rebuild an index file using Foxpro if you
must for reasons of compatiblity with other programs which access your data
files.
CHANGE THE DIRECTORY
This option enables you to select any directory on your disk
in which you you might have database files. FOXRPT will ask you
which directory you'd like to enter. Enter the name. If you make
a spelling error FOXRPT will report that it is not possible to
enter the directory you keyed in.
** END OF FILE ***
foxrpt.arjbaze.podataka.392max.headroom,
E X E - Q - T E R D O C U M E N T A T I O N
Welcome to Exe-Q-Ter, Exe-Krypter, & Exe-Q-Ter Install. The purpose of
Exe-Q-Ter and the accompanying files is to allow all users and developers of
FoxBase+, FoxPro 1.02, and FoxPro 2.0 the alternative of creating DOS
executable files for their respective FoxBase/FoxPro versions, with the added
capability of password and/or password/encryption protection for their
applications, databases, and memo fields. It is not the intention of Exe-Q-Ter
to imply, either directly or indirectly, that non-registered users of
FoxBase/FoxPro Runtime or FoxPro 2.0 Distribution Kit, should dismiss the laws
of copyright and trademark regulations concerning the distribution of
FoxBase/FoxPro applications. On the contrary, you should know that it is
UNLAWFUL to distribute FoxBase/FoxPro applications unless you are in fact a
registered owner of either the Runtime or Distribution Kit. You may contact
Fox Software, Inc. or a legitimate distributor of Fox products to obtain either
of the above. Any known infringement of the above will be reported to Fox
Software at once.
exeqter.arjbaze.podataka.393max.headroom,
TSR (ali nije TSR ;) clock u Fox-u. Obratiti padžnju i na onaj
drugi .BIN fajl, pored TPCCLOCK.BIN...
SYNTAX: LOAD TPCCLOCK
MEMVAR = "PARAM"
CALL TPCCLOCK WITH MEMVAR
NOTE: These are the valid parameters for use with TPCCLOCK.BIN
MEMVAR = "O" && TURN THE CLOCK ON
MEMVAR = "F" && TURN THE CLOCK OFF
MEMVAR = "/F0" && 24 HOUR DISPLAY
MEMVAR = "/F1" && 12 HOUR DISPLAY
MEMVAR = "/č X,Y" && DISPLAY CLOCK AT ROW,COL
WARNING: This version of TPCClock.BIN requires all params be entered
in UPPER case. When I get more time I will fix this.
WARNING: You MUST be sure to turn the clock OFF before exiting your
database program!! Failing to do this WILL result in
hanging your system. (I suggest using "ON ERROR" to turn
the clock off in case of an error, before "QUIT"ing.)
tpcclo.arjbaze.podataka.394oki.,
-> #392, max.headroom>> executable files for their respective FoxBase/FoxPro versions, with the
>> added capability of password and/or password/encryption protection
>> for their applications, databases, and memo fields. It is not the
>> intention of Exe-Q-Ter
Simpatičan program, al' beskoristan. Program napravi mali(?) EXE fajl
koji startuje FOX i odgovarajuću aplikaciju. Glavni fazon je da omogućuje
da se aplikacija kriptuje pa je zaštićena od eventualnih izmena. Međutim,
zaštita je nikakva. Evo kako se razbija. Startujete WIN i zatim odete u
DOS. Tu startujte program i kada počne izvršavanje programa vratite se u
win i sa fajl menadžerom iskopirajte aplikaciju na neko drugo mesto.
Kopirana aplikacija je enkriptovana. Dakle, zaštita ne služi, skoro,
ničemu. Ovo se može poturiti nekome ko ne zna ili nema WIN (ili sličan
multitasking) ;). Ovo me je baš razočaralo. :(
Pozdrav, 3OPAH.
baze.podataka.395bulaja,
-> #394, oki.│Startujete WIN i zatim odete u DOS. Tu startujte program i kada počne
│izvršavanje programa vratite se u win i sa fajl menadžerom iskopirajte
│aplikaciju na neko drugo mesto.
└───
Može i jednostavnije (ako sam dobro shvatio princip rada programa) -
kada se apilkacija startuje, samo resetovati računar i posle toga bi
trebalo na disku da ostane nekripotovana kopija programa :).
baze.podataka.396ndragan,
-> #333, gaston/ napraviti procedura za proveru postojanja CDX fajla iz hedera DBF
/ fajla. U
Nalazi se na 28. bajtu (brojeći od nultog) u hederu .dbf fajla:
0 nema cdx
1 ima cdx.
29. bajt sadrži šifru kodne stranice za koju je baza prijavljena. Zasad
sam provalio da je 100 (tj 0x064) za 852 i 0x0c8 za 1250 (tj windows
ee).
Gnjavio sam se sa tim dobrih pola sata :)
/ - proverio bi ispravnost strukture DBF fajla, memo i CDX fajla
U poslednjoj verziji svog (generatora) programa za indeksiranje
forsirano upisujem nulu na 28 bajt, zatim brišem .cdx te tek onda
otvaram bazu (ovog puta se ne buni što nema .cdx, jer mu već piše da ga
nikad nije ni imao :) i indeksiram.
Ako me ne pusti da otvorim bazu za lele, i/o tj fopen(baza,12) vrati -1,
zaključujem da je neko već otvorio i samo javim da nema ništa od
indeksiranja ovog puta.
baze.podataka.397ndragan,
-> #372, nkbog/ p.s. Jel' neko uspeo da skreše veličinu .FRX datoteka - t.j. da izbaci
Mislim da on interno proverava da li ima dovoljan broj polja (ne
proverava baš celu strukturu), pa ako petljaš sa strukturom, probaj da
bar pretvoriš neka memo polja u c(1), mada nisam siguran da će i tako
raditi.
Inače, mislim da možeš ladno da izbrišeš slogove gde Platform # "DOS", a
i da izmisliš neke slogove sa levom platformom - on samo čita one koje
hoće, a ostale ni ne gleda. Wizardi upravo prave neke svoje slogove -
pogledaj šta piše u platformi.
baze.podataka.398ndragan,
-> #334, max.headroom/ AFiles_Š1Ć = "EMPLOYEE; F:ĐAPPĐEMPLOYEE ; EMP_INIT,EMP_NAME"
=======
Ovo mi se baš nešto ne sviđa - navođenje konjkretnih direktorija baš
nije zdrava praksa. Preseliš se na drugi disk, drugu mrežu... i sve to
treba menjati.
baze.podataka.399oki.,
-> #395, bulaja>> Može i jednostavnije (ako sam dobro shvatio princip rada programa) -
>> kada se apilkacija startuje, samo resetovati računar i posle toga bi
Da, al' cini mi se da je ovako elegantnije, da ne bi neke datoteke ostale
otvorene i sl.).
Pozdrav, 3OPAH.
baze.podataka.400max.headroom,
-> #398, ndragan> Ovo mi se baš nešto ne sviđa - navođenje konjkretnih
> direktorija baš nije zdrava praksa. Preseliš se na drugi
> disk, drugu mrežu... i sve to treba menjati.
Slažem se - ali to beše "po Booth-u i Lief-u", a oni važe za tipove
koji drže silne seminare po USA (u pitanju je FoxPro, naravo) :)
Ma razume se, poenta njihove literature je: poseti ti lepo naš kurs
Fox-a, pa onda izvodi zaključke. Fušerski, ali pretpostavljam da ima
efekta.
baze.podataka.401bulaja,
U priloženoj datoteci su informacije o Xbase/2 - CA-Clipper
kompatibilnom (bar tako kažu) kompajleru za OS/2. Tekst je
na nemačkom tako da ja uglavnom ništa ne razumem :), pa bi
neko ko zna nemački a interesuje ga ova problematika mogao
lepo da pročita tekst i prepriča nam šta ima unutra :).
xbase2.zipbaze.podataka.402misa.m,
Jedno pitanje za Fox4Win.
Da li je i kako moguće otvori DDE kanal ka drugoj
fox ili bilo kojoj windows aplikaciji koja je startovana
na drugoj mašini (u W4WG)? DDE lepo radi na lokalnoj
mašini ali mi nikako ne uspeva da inicijalizujem vezu
ka aplikaciji na drugoj mašini.
Rekao bih da MSHerc upravo koristi DDE.
baze.podataka.403ikordic,
RE: dBase V for Windows
Par komentara u vezi teksta dejanr-a o dBase V paketu. Naime, neki delovi
teksta su ličili na otkrivanje tople vode. Ako izuzememo grafičku okolinu i
Win-related kerefeke, deo opisanih "noviteta" je postojao i u dBase IV, koji
je kod nas prošao potpuno nezapaženo. žak i sam autor teksta kaže "... to je
razlika između 27.12.'85. kada je izašao dBase III+ i 2.8.'94. kada je
izašao dBase V", kao da međuverzija nije ni postojala! Posle mene i potop
... ;)
Dalje, nisam baš siguran da je iznenađenje što DB5 radi brže od Clipper-a.
Testiranje je vršeno na 486 mašini sa puno memorije, čije performanse DB5
koristi do maksimuma, a siroti mali hrčak, pardon Clipper, ne. Pod ovim
uslovima, mislim da je za sablažnjavanje ako je efekat suprotan.
Zatim, da li je sasvim sigurno da ne postoji Run-Time distribucioni paket?
Ovo je postojalo za dBase IV, postoji i za konkurekciju (Fox), ne vidim što
ovo ne bi izbačili na gladno tržište. Koliko se sećam, odmah posle promocije
poslednje verzije (IV) u cenovnicima su se paralelno pojavili i dBase IV i
dBase IV Prof. Edition sa Run-Time modulom.
Takođe smatram propustom što u tekstu nije obavljen neki osvrt na neposrednu
konkurenciju (Fox, Access, možda i Pdx), uzevši u obzir zastupljenost, kao i
činjenicu da je bilo prepisivanja sa obe strane.
baze.podataka.404mdrazic,
-> #400, max.headroom>> Ovo mi se baš nešto ne sviđa - navođenje konjkretnih
>> direktorija baš nije zdrava praksa. Preseliš se na drugi
>> disk, drugu mrežu... i sve to treba menjati.
>
> Slažem se - ali to beše "po Booth-u i Lief-u", a oni važe za tipove
> koji drže silne seminare po USA (u pitanju je FoxPro, naravo) :)
Vrlo zadovoljavajuće rešenje po pitanju promene diska je da NE navodiš
naziv diska veš samo path (npr. ĐappĐbazeĐ ). Tada sve u aplikaciji
mora biti na jednom disku na kojem se trenutno nalaziš, što i nije
neko ograničenje, ali te spasava problema oko raznih particija i
mrežnih naziva diskova. Takođe 'koreni' direktorijum za tvoju
aplikaciju ( ĐappĐ ) možeš definisati preko dos environmenta ili
nekog konfiguracionog fajla, pa da izbegneš i probleme oko raznih
mapiranja u mreži.
Milan
baze.podataka.405max.headroom,
Evo jedne zanimljive poruke sa SETNet-a - tiče se relacionih
baza podataka posmatranih sa teorijskog stanovišta. Ako vam se
poruka učini interesantnom, skinite i vezani fajl (SETNET.ARJ),
u kome ćete naći deo rasprave o navedenoj problematici.
--------------------------------- ■ NET.Base
#767
Datum: 28-08-94 22:52
Od: Goran Turudich
Za: Predrag Supurovic
Odgovor: Relacione baze podataka
#780 ->
...<Text Cut>...
Pocecu sa osnovama. Trebalo bi prvo da uskladimo terminologiju, da bi
se bolje razumeli.
DEF1:
Relacija R duzine n je (matematicka definicija) skup uredjenih n-torki
R(a1, a2, a3,...,an) gde su a1, a2, ... , an clanovi skupova A1, A2, ... ,
An respektivno. Relacija R je podskup dekartovog proizvoda ovih skupova
(A1*A2*...*An). Clanovi a1, a2, ... , an se nazivaju "atributi", a
skupovi A1, A2, ... , An su "domeni". Relacija ima osobinu da u njoj ne
postoje dve iste n-torke! Dakle, da bi se n-torke razlikovale, u relaciji
mora postojati atribut ili kombinacija atributa koja ce igrati ulogu
jedinstvenog identifikatora. Ovaj identifikator se zove primarni kljuc.
NPR: relacija STUDENT je sledeceg oblika:
STUDENT (BRINDEKSA#, IME, DATUMRODJENJA, ADRESA, SIFRASMERA, ...)
Atribut BROJINDEKSA# ima znak "#" na svom kraju da bi se oznacilo da je
on primarni kljuc relacije (nepisano pravilo).
DEF2:
Primarni kljuc (primary key) je atribut (prost ili slozen) koji u
relaciji R ima osobine:
1. Jedinstvenosti - vrednost ovog atributa se pojavljuje samo u jednoj
n-torki relacije R.
2. Neredundantnosti - nijedan deo kljuca ne moze da se izostavi, a da se
ne izgubi osobina jedinstvenosti. NPR: slozeni atribut BRINDEKSA, IME
nije kljuc relacije, jer se IME moze izostaviti, a atribut BRINDEKSA ce
ipak imati osobinu jedinstvenosti. Dakle, primarni kljuc relacije je
minimalna kombinacija atributa koja ima osobinu jedinstvenosti.
U relaciji R moze postojati vise atributa koji imaju navedene osobine i
svi oni su "kandidati za kljuc". Posto u relaciji moze postojati samo
jedan primarni kljuc, onda se od njih bira jedan atribut koji ce biti
primarni kljuc, a ostali kandidati za kljuc se nazivaju "alternativni
kljucevi".
U prethodno pomenutoj relaciji STUDENT, primarni kljuc je atribut
BROJINDEKSA# jer on jedinstveno odredjuje n-toku relacije (ne postoje dva
studenta sa istim brojem indeksa).
DEF2:
Spoljni kljuc (foreign key) je atribut (prost ili slozen) koji u
relaciji R nije primarni kljuc, ali je primarni kljuc u nekoj drugoj
relaciji u modelu. Spoljni kljucevi sluze za povezivanje relacija!
NPR, u relaciji STUDENT, atribut SIFRASMERA nije primarni kljuc, ali
jeste u relaciji SMER: SMER (SIFRASMERA#, NAZIVSMERA, ...). Ovaj atribut u
relaciji STUDENT, znaci, igra ulogu spoljnog kljuca, preko koga se
povezuju relacije STUDENT i SMER (zbog, npr, kreiranja izvestaja o
studentima i smerovima na kojima studiraju).
Cesto se gore pomenuti pojmovi i drugacije nazivaju. Cesto se, npr,
umesto RELACIJA kaze TABELA, jer se svaka relacija moze predstaviti
tabelom. Ali, treba paziti - svaka relacija je tabela, ali svaka tabela ne
mora biti relacija! Takodje, cesto se umesto ATRIBUT kaze POLJE, a umesto
N-TORKA RELACIJE - RED TABELE ili ZAPIS (zbog analogije relacije i
datoteke u konvencionalnoj obradi podataka).
Relaciona baza podataka je skup vremenski promenljivih relacija
(tabela), i ne moze se poistovecivati sa jednom datotekom u
konvencionalnoj obradi podataka. Dakle, ako neko napise aplikaciju za
citanje i azuriranje telefonskog imenika on NIJE napisao bazu podataka,
vec aplikaciju sa svojom privatnom datotekom u koju se podaci smestaju.
Osim toga, baze podataka se NE PISU vec kreiraju, unistavaju, pretrazuju,
azuriraju, a pisu se aplikacije za pretrazivanje, kreiranje, azuriranje
baze podataka.
---------------------End of Message
setnet.arjbaze.podataka.406max.headroom,
Evo skupa interesantnih BIN fajlova, sve raznorazne funkcijice za
rad sa svim i svačim (modemom, na primer). Sledi lista prisutnih:
BIOSDATE ........... Page 35
CAPSOFF ............ Page 66
CAPSON ............. Page 69
CAPSSTAT ........... Page 60
CDROMDRV ........... Page 98
CDROMVER ........... Page 99
COM1200 ............ Page 74
COM2400 ............ Page 75
COM300 ............. Page 73
COM4800 ............ Page 76
COM9600 ............ Page 77
COMBID ............. Page 83
COMDR .............. Page 79
COMFE .............. Page 82
COMOE .............. Page 80
COMPE .............. Page 81
COMSTAT ............ Page 78
COMTHR ............. Page 84
COMTOE ............. Page 86
COMTSR ............. Page 85
CONVMEM ............ Page 36
CREATDIR ........... Page 23
CURSCOL ............ Page 100
CURSOR ............. Page 102
CURSROW ............ Page 101
DAYWEEK ............ Page 103
DOSVERS ............ Page 24
DRIVERDY ........... Page 25
EXTMEM ............. Page 37
GAMEADAP ........... Page 38
GETATTR ............ Page 27
GETDRIVE ........... Page 26
GETVERFY ........... Page 28
INSSTAT ............ Page 61
LEFTSHFT ........... Page 62
LPTINIT ............ Page 87
LPTSTAT ............ Page 88
MATHCOPR ........... Page 39
MCA ................ Page 40
MODMCTS ............ Page 93
MODMDCTS ........... Page 89
MODMDDSR ........... Page 90
MODMDRLS ........... Page 92
MODMDSR ............ Page 94
MODMRI ............. Page 95
MODMRLS ............ Page 96
MODMTER ............ Page 91
MOUSECTR ........... Page 104
MOUSEDRV ........... Page 105
MOUSEHID ........... Page 106
MOUSELFT ........... Page 107
MOUSELNG ........... Page 108
MOUSERHT ........... Page 109
MOUSESHW ........... Page 110
MOUSETYP ........... Page 111
MOUSEVER ........... Page 112
NODRIVES ........... Page 41
NUMCHAR ............ Page 113
NUMOFF ............. Page 67
NUMON .............. Page 70
NUMSTAT ............ Page 63
PARALLEL ........... Page 55
PC ................. Page 43
PCAT ............... Page 45
PCBUS .............. Page 42
PCCONV ............. Page 48
PCJR ............... Page 46
PCXT ............... Page 44
PCXT286 ............ Page 47
PRNTSCRN ........... Page 114
PS2M30 ............. Page 49
PS2M50 ............. Page 50
PS2M55 ............. Page 51
PS2M60 ............. Page 52
PS2M70 ............. Page 53
PS2M80 ............. Page 54
REALTIME ........... Page 56
REMOVDIR ........... Page 29
RGHTSHFT ........... Page 64
SCRLOFF ............ Page 68
SCRLON ............. Page 71
SCRLSTAT ........... Page 65
SCRNSIZE ........... Page 57
SERIAL ............. Page 58
SETATTR ............ Page 32
SETDIR ............. Page 30
SETDRIVE ........... Page 31
SETVERFY ........... Page 33
XMSDRV ............. Page 115
foxlib.arjbaze.podataka.407dejanr,
-> #403, ikordic>> Ako izuzememo grafičku okolinu i Win-related kerefeke, deo opisanih
>> "noviteta" je postojao i u dBase IV, koji je kod nas prošao potpuno
>> nezapaženo. žak i sam autor teksta kaže "... to je razlika između
>> 27.12.'85. kada je izašao dBase III+ i 2.8.'94. kada je izašao dBase
>> V", kao da međuverzija nije ni postojala! Posle mene i potop ... ;)
To je razlika između domaćeg prikaza i nekog prikaza koji bi bio preveden
iz stranog časopisa. Program se poredi sa nečim što je ovde dobro poznato,
primetićeš da je dBASE IV pominjan tamo gde je to bilo relevantno (npr.
specifikacije, dužine polja, imena polja itd). Glavnina poređenja je sa
baterijom dBASE III+/Clipper koja je ovde apsolutno preovlađujuća.
>> Dalje, nisam baš siguran da je iznenađenje što DB5 radi brže od Clipper-a.
>> Testiranje je vršeno na 486 mašini sa puno memorije, čije performanse DB5
>> koristi do maksimuma, a siroti mali hrčak, pardon Clipper, ne. Pod ovim
>> uslovima, mislim da je za sablažnjavanje ako je efekat suprotan.
Pa, to je otprilike i rečeno u tekstu - ubrzanje potiče od internog keširanja.
Međutim, uvek je iznenađenje (bar za mene) kada neki DOS program radi sporije
od "odgovarajućeg" Windows programa. Daj Bože da se taj trend promeni.
>> Zatim, da li je sasvim sigurno da ne postoji Run-Time distribucioni
>> paket? Ovo je postojalo za dBase IV, postoji i za konkurekciju (Fox),
>> ne vidim što ovo ne bi izbačili na gladno tržište.
U trenutku pisanja teksta nije postojao. U dokumentaciji se nigde ne
referencija. U PC Magazine-u od ne-znam-kog oktobra, u kome se reklamira
dBASE 5.0, ne reklamira se run time paket. PC Magazine od 1. novembra još
nisam video (mada bi trebalo da je izašao).
>> Takođe smatram propustom što u tekstu nije obavljen neki osvrt na
>> neposrednu konkurenciju (Fox, Access, možda i Pdx), uzevši u obzir
>> zastupljenost, kao i činjenicu da je bilo prepisivanja sa obe strane.
Uporedni test je ozbiljna stvar. "Računari" će verovatno u sledećem broju
objaviti prikaz paketa Access 2.0, u onim sledećim FoxPro-a 2.6 (mada tu,
izgleda, nema nekih spektakularnih noviteta), za Paradox ćemo videti, a
posle toga je moguć neki uporedni test.
baze.podataka.408eotek,
-> #401, bulaja> U prilozenoj datoteci su informacije o Xbase/2 - CA-Clipper
> kompatibilnom (bar tako kazu) kompajleru za OS/2. Tekst je
sadrzaj: dva fajla, od toga jedan upitnik za potencijalne
beta-testere i drugi "White Paper" koji objasnjava projekt.
Radi se, dakle, o projektu koji je u toku, sa ciljem da se
izradi kompajler koji bi na nivou koda bio 100 % kompatibilan sa
Clipper 5.01, a trebao bi da sadrzi sve mogucnosti 32 bitnog
okruzenja, objekte itd. Projekt je zapoceo sa radom avgusta 1994,
prema tome, po meni - sacekati i videti.
Beta testeri bi dobili posebne popuste prilikom nabavke
kompajlera (kada bude gotov), a beta program bi se realizovao
preko CompuServe, forum OSUGER.
baze.podataka.409ndragan,
-> #393, max.headroom/ SYNTAX: LOAD TPCCLOCK
Ubiše čoveka u pojam. Kad je ovo pisao, kanda još nije bilo onog
set hours to 12 (24)
set clock to x,y
set clock on (off)
u samom foksu. Al' sad kad ima, ne znam čemu ovo.
baze.podataka.410isimic,
Ima li neko literaturu za FoxPro 2.6 Library Construction Kit? Ili, kako
se od C programa prave biblioteke za FoxPro 2.6?
Pozdrav!
baze.podataka.411oki.,
-> #409, ndragan>> u samom foksu. Al' sad kad ima, ne znam čemu ovo.
Valjda je za stari Fox (Base)?
baze.podataka.412dpredovic,
Već dosta dugo se bakćem sa clipperom, i kada sam nedavno pogledao fox,
neke stvari mi ne leže baš najbolje...
U mojoj koncepciji pod clipperom osnovni način prikazivanja podataka je
browse, koji je maximalno fleksibilan, služi i za pregled, unos,
brisanje, pretraživanje, menjanje ordera, etc. etc.
Ono što sam video u foxu je sve samo ne fleksibilno, ali pretpostavljam
da postoje fore i fazoni da se ta krutost malo zaobiđe.
Kao 1. - jel postoji neki način da ugasim kursor u browsu (hoću da mi
služi samo za pregled). SET CURSOR OFF se pravi mnogo pametan, pa se
pali i gasi kako se njemu dopada...
Kao 2. - jel postoji još neki način da osvežim browse iz on key... kada
promenim nesto u redosledu baze, a da to nije:
ON KEY LABEL <somekey> DO someproc
internal=.T.
DO WHILE internal
internal=.F.
BROWSE ...
ENDDO
PROC someproc
internal=.T.
...
something_nasty_to_do_with_base_ordering
...
KEYBOARD "CTRL+END"
RETURN
Padalo mi je napamet neko zezanje sa refresh, ali nisam uspeo da izvedem
nista mnogo pametno...
baze.podataka.413misa.m,
-> #410, isimic>> Ima li neko literaturu za FoxPro 2.6 Library Construction Kit?
Imam za 2.5 i koliko znam iste su.
baze.podataka.414max.headroom,
-> #409, ndragan> Ubiše čoveka u pojam. Kad je ovo pisao, kanda još nije
> bilo onog
>
> set hours to 12 (24)
Becveze. Sada sam tek ukapirao šta sam spustio. Nije bitno, ovih dana
imam dosta sitnih programčića na raspolaganju, pa me stigne haos pri
bacanju nepotrebnog i UL-u kakvo-takvog softvera. Izvinjenje onima
koji su skidali, a svaka čas' onima kojima je ovo koristilo :)
Nego, jedan blesavi problem u Fox-u for Win:
Hteo bih da svako GET polje uokvirim sa još jednim okvirom, dakle, oko
onog koji je kreiran sa SET READBORDER. Dobija se interesantan efekat
dubine, ako parove naspramnih stranica obojite sa
RGB(256,256,256,256,256,256) i RGB(128,128,128,128,128,128)
Elem, šta je suština - htedoh da napravim f-ju koja će ovo raditi, s
tim da kao parametre zadam x-koord, y-koord. i dužinu GET polja, pa bi
program izgledao ovako:
x = SPACE(20)
č 10,5 GET x
=OKVIR(10,5,20)
Ali... Pošto je sve relativno u odnosu na font koji se koristi (moj
slučaj: Arial, 8 pts), meni treba nekakva vrsta ofseta kojim ću
množiti tamo-neke-koordinate i tako dobijati "od-do" vrednosti za
linije tog mog okvira. Zna li neko ofsete (vertikalne i horizontalne)?
(ja dobih 0.8 kao horiz. offset, ali to nije dovoljno precizno - fale
još dve decimale :)