PCPROG.4

22 Apr 1994 - 05 Jan 1995

Topics

  1. algoritmi (153)
  2. comment (15)
  3. ms.dos (123)
  4. windows (304)
  5. asembler (103)
  6. basic (80)
  7. jezici (196)
  8. pascal (880)
  9. cccc (586)
  10. cpp (157)
  11. clipper (1267)
  12. baze.podataka (525)
  13. razno (529)

Messages - baze.podataka

baze.podataka.312 .marko.,
Ima li ko kakva pozitivna/negativna iskustva sa kursom za ORACLE koji organizuje "Vinca"?
baze.podataka.313 nkbog,
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.314 misa.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.315 ndragan, -> #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.316 ndragan, -> #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.317 ndragan, -> #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.318 max.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.320 nbulatovic, -> #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.321 gaston,
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.322 goxx, -> #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.323 dobrada,
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.324 ndragan, -> #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.325 ndragan, -> #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.326 dr.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.327 bulaja, -> #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.328 ndragan, -> #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.329 max.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.arj
baze.podataka.331 misa.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.333 gaston, -> #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.334 max.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.335 max.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.336 max.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.arj
baze.podataka.337 max.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.338 max.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.339 max.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.340 max.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.341 max.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.342 max.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.343 max.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.344 max.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.345 max.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.346 max.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.347 max.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.348 max.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.349 max.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.350 max.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.351 max.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.352 max.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.353 max.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.354 max.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.355 max.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.356 max.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.357 max.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.358 max.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.359 max.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.360 max.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.361 max.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.362 max.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.363 max.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.364 max.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.365 max.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.366 max.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.367 max.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.368 max.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.369 max.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.370 dr.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.371 djelovic, -> #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.372 nkbog, -> #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.373 nkbog, -> #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.374 djorzor,
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.375 zelkop, -> #374, djorzor
Valjda 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.376 max.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.arj
baze.podataka.377 max.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.378 max.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.379 max.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.380 max.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.381 max.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.382 max.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.383 max.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.384 max.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.385 max.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.386 max.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.387 max.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.388 max.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.389 max.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.390 max.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.arj
baze.podataka.391 max.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.arj
baze.podataka.392 max.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.arj
baze.podataka.393 max.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.arj
baze.podataka.394 oki., -> #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.395 bulaja, -> #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.396 ndragan, -> #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.397 ndragan, -> #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.398 ndragan, -> #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.399 oki., -> #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.400 max.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.401 bulaja,
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.zip
baze.podataka.402 misa.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.403 ikordic,
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.404 mdrazic, -> #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.405 max.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.arj
baze.podataka.406 max.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.arj
baze.podataka.407 dejanr, -> #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.408 eotek, -> #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.409 ndragan, -> #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.410 isimic,
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.411 oki., -> #409, ndragan
>> u samom foksu. Al' sad kad ima, ne znam čemu ovo. Valjda je za stari Fox (Base)?
baze.podataka.412 dpredovic,
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.413 misa.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.414 max.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 :)