home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 March
/
Chip_1998-03_cd.bin
/
tema
/
MINICAD
/
MC7DEMO
/
MINICAD.1
/
UPDATDBW.MPC
< prev
next >
Wrap
Text File
|
1997-04-30
|
6KB
|
192 lines
PROCEDURE Update_DB_with_WKS;
{Revised 6/1/96}
LABEL 1,2,3,4,5;
CONST
{DATA LABEL OBJECT NAMES}
kWorksheetName='Edit This!';
kDLinkRec ='Links';
kDLinkID ='Linked to';
kDLinkFldName ='Item';
kRec ='Instruments';
{***** OTHER LOCAL CONSTANTS *****}
kNameString = 'Name';
kMaxArray = 20;
kNameCol = 1;
kFieldRow = 1;
VAR
targetHandle,recHandle,txtHan,wksHan : HANDLE;
worksheetName, str1, str2, str3, str4, str5, str6,str7 : STRING;
cancel, finished, flag, updateLabels, deleteWorksheet : BOOLEAN;
item, x1, x2 : INTEGER;
targetName,fieldValue,fieldName,recName : STRING;
recIndex,numRecs,numRows,numCols,numFieldsUsed : INTEGER;
numFlds,c,i,j,k,r : INTEGER; {** counter variables }
fieldNameList : ARRAY[1..kMaxArray] OF STRING;
PROCEDURE CenterDialog(dX1,dX2 : INTEGER; VAR x1,x2 : INTEGER);
VAR
scrX1,scrY1,scrX2,scrY2,w : INTEGER;
BEGIN
GetScreen(scrX1,scrY1,scrX2,scrY2);
w := dX2 - dX1;
x1 := ((scrX1 + scrX2) DIV 2) - (w DIV 2);
x2 := x1 + w;
END;
PROCEDURE DoUpdate(myHandle : HANDLE);
var
DBRef, myName, myFieldName : STRING;
BEGIN
DBRef := CONCAT('(''',kDLinkRec,'''.''',kDLinkID,''')');
myName := EvalStr(myHandle,DBRef);
DBRef := CONCAT('(''',kDLinkRec,'''.''',kDLinkFldName,''')');
myFieldName := EvalStr(myHandle,DBRef);
DBRef := CONCAT('(''',kRec,'''.''',myFieldName,''')');
SetText(myHandle, EvalStr(GetObject(myName), DBRef));
END;
BEGIN
PUSHATTRS;
{** Aquire valid Worksheet}
wksHan := GETOBJECT(kWorksheetName);
{** Try active worksheet}
IF (wksHan = NIL) THEN wksHan := ActSSheet;
{** Try getting worksheet name from user}
IF (wksHan = NIL) THEN BEGIN
worksheetName := STRDIALOG('Enter the name of the worksheet to be processed.','Worksheet 1');
wksHan := GETOBJECT(worksheetName);
END;
{** If no worksheet then punch out with dialog╔}
IF ((wksHan=NIL) | (GetType(wksHan)<>18)) THEN BEGIN
SYSBEEP;
ALRTDIALOG('I can╒t find a worksheet by that name.');
GOTO 1;
END;
worksheetName := GETNAME(wksHan);
{** Get permission }
SetCursor(ARROWC);
str3 := CONCAT('Update ╘',kRec,'╒ database');
str6 := CONCAT('with information from the worksheet');
str7 := CONCAT('╘',worksheetName,'╒.');
CENTERDIALOG(0,302,x1,x2);
BEGINDIALOG(1,1,x1,165,x2,366);
ADDBUTTON('OK',1,1,228,166,292,189);
ADDBUTTON('Cancel',2,1,146,166,210,189);
ADDFIELD(str3,3,1,19,14,240,32);
ADDFIELD(str6,4,1,19,37,287,37);
ADDFIELD(str7,5,1,19,60,121,78);
ADDBUTTON('Update Data Labels',6,2,11,98,168,116);
ADDBUTTON('Delete worksheet when complete',7,2,11,125,271,143);
ENDDIALOG;
GetDialog(1);
finished := FALSE;
cancel:= FALSE;
SetItem(6,FALSE);
SetItem(7,TRUE);
REPEAT DialogEvent(item);
IF item = 1 THEN finished := TRUE;
IF item = 2 THEN
BEGIN
finished := TRUE;
cancel := TRUE;
END;
IF (item > 5) THEN SetItem(item,NOT(ItemSel(item)));
UNTIL finished;
updateLabels := ItemSel(6);
deleteWorksheet := ItemSel(7);
CLRDIALOG;
IF cancel THEN GOTO 1;
MESSAGE('One moment please╔');
SETCURSOR(WATCHC);
SelectSS(wksHan);
SprdSize(wksHan,numRows,numCols);
{** Check if array limit is big enough}
IF numCols > kMaxArray THEN BEGIN
str5:= CONCAT('Increase CONST kMaxArray to at least ',numCols,'.');
ALRTDIALOG(str5);
GOTO 1;
END;
{** Set up array with names of fields }
numFieldsUsed := 1;
FOR c := 1 TO numCols DO BEGIN
IF c = kNameCol THEN BEGIN
numFieldsUsed := numFieldsUsed - 1;
GOTO 2;
END;
IF cellHasStr(wksHan,kFieldRow,c) THEN str1 := getCellStr(wksHan,kFieldRow,c) ELSE sysBeep;
IF str1 = kNameString THEN GOTO 2;
numFieldsUsed := numFieldsUsed + 1;
fieldNameList[c] := str1;
2:END; { of FOR c := 1 TO numCols loop }
{** Verifying existance of database name╔}
numRecs := NumRecords(NIL);
k := 0;
REPEAT
k := k + 1;
recHandle := (GetRecord( NIL, k ));
recName := GetName(recHandle);
IF recName = kRec THEN BEGIN
recIndex := k;
numFlds := NumFields(recHandle);
k := numRecs;
END;
UNTIL k = numRecs;
IF recName <> kRec THEN BEGIN
str2 := CONCAT('Could not find your ╘',kRec,'╒ database in the list.');
ALRTDIALOG(str2);
GOTO 1;
END;
{** Verify that titles in column kNameCol of worksheet match field names}
FOR i := 1 to numFieldsUsed DO BEGIN
IF (i = kNameCol) THEN GOTO 3;
str1 := fieldNameList[i];
flag := FALSE;
j := 0;
REPEAT
j := j + 1;
IF str1 = GetFldName(recHandle, j) THEN flag := TRUE;
UNTIL (flag) | (j = numFlds);
IF (flag = FALSE) THEN BEGIN
str4 := CONCAT('Not all worksheet column titles match a field in the ╘',kRec,'╒ record format.');
ALRTDIALOG(str4);
GOTO 1;
3:END;
END;
{** Update the database, also update labels if checkbox is checked}
FOR r:= 1 TO numRows DO BEGIN
IF r = kFieldRow THEN GOTO 4;
MESSAGE('Updating database with row ',r,' of ',numRows);
IF CELLHASSTR(wksHan,r,kNameCol) THEN BEGIN
targetName := GETCELLSTR(wksHan,r,kNameCol);
FOR c := 1 TO numCols DO BEGIN
IF c = kNameCol THEN GOTO 5;
IF cellHasStr(wksHan,r,c) THEN fieldValue := getCellStr(wksHan,r,c);
targetHandle := GetObject(targetName);
SetRField(targetHandle,kRec,fieldNameList[c],fieldValue);
5:END;
4:END;
END;
IF updateLabels THEN BEGIN
Message('Updating Data Labels╔');
ForEachObject(DoUpdate,(R IN [kDLinkRec]));
RedrawAll;
END;
IF deleteWorksheet THEN BEGIN
DelObject(wksHan);
DSelectAll;
DeleteObjs; {** To flush the name list. }
END;
1:POPATTRS;
CLRMESSAGE;
END; {of MAIN}
RUN(Update_DB_with_WKS);