home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Boston 2
/
boston-2.iso
/
DOS
/
DEUTSCH
/
SONSTIGE
/
KFZWERK
/
KFZUTL.SC
< prev
next >
Wrap
Text File
|
1993-12-01
|
16KB
|
791 lines
; Kfzutl
AppLib = "Kfzutl"
Createlib AppLib
proc HelpKey()
Help
Echo Normal
while (HelpMode() <> "None")
KeyPress getchar()
endwhile
Echo Off
endproc
WriteLib AppLib HelpKey
Release Procs HelpKey
proc ToggleForm(formToggle, frm, QEdit)
if (formToggle) then
if (inFormView) then
FormKey
if (QEdit) then
; die zu editierende Tabelle muss die erste auf der Arbeitsfläche sein
FirstShow
endif
else
PickForm frm
endif
inFormView = (not inFormView) ; Wert der Variablen InFormView ändern
else
Beep
endif
endproc
WriteLib AppLib ToggleForm
Release Procs ToggleForm
; Prozedur, die einen Wert vom Typ dt akzeptiert.
; Vorgabewert ist dv. Der Anwenderprompt ist prmpt.
; Der Wert wird in Zeile l akzeptiert.
proc EnterVal(prmpt, dt, dv, l)
private x, t
Style Attribute SysColor(0) ; prmpt ausgeben
@ 0, 0 ?? prmpt
Style Attribute SysColor(2)
if (l = 1) then
@ 1, 0
endif
x = "" ; akzeptiert einen Wert vom Anwender
t = type(dv)
Cursor Normal
if (t = dt or (t = "N" and (dt = "$" or dt = "S"))) then
Accept dt Default dv To x
else
Accept dt To x
endif
EscEnter = not retval
Cursor Off
Style Attribute SysColor(0) ; löscht den Prompt und die Eingabe vom Bildschirm
@ 0, 0
Clear
return x
endproc
WriteLib AppLib EnterVal
Release Procs EnterVal
proc QueryDoIt()
Private Qord
Message "Abfrage wird durchgeführt"
Qord = QueryOrder() ; aktuelle Abfrage-Ordnung speichern
SetQueryOrder TableOrder ; Tabellen-Ordnung zuweisen
Do_It! ; Abfrage ausführen für die Operation
if (Qord = "TableOrder") then ; auf frühere Ordnung zurücksetzen
SetQueryOrder TableOrder
else
SetQueryOrder ImageOrder
endif
msg = window()
tbl = table()
ClearAll
Clear
if (ApplicErrorRetVal) then ; Strukturen passen nicht?
return FALSE
endif
if (msg <> "") then
Message msg
Sleep 2000
Clear
endif
if (tbl <> "Antwort") then
return FALSE
endif
return TRUE
endproc
WriteLib AppLib QueryDoIt
Release Procs QueryDoIt
proc ReportTable(rptTbl, sourceTbl, rpt, dest, destFile)
; nach leerer Tabelle suchen, keinen Report ausgeben, wenn sie leer ist
if (isempty(rptTbl)) then
Message "Es gibt keine Records für den Report"
Sleep 3000
return FALSE
endif
if (upper(sourceTbl) <> upper(rptTbl)) then
; nur kopieren, wenn es nicht dieselbe Tabelle ist
CopyReport sourceTbl rpt rptTbl rpt
; Strukturen passen nicht?
if (ApplicErrorRetVal) then
return FALSE
endif
endif
Menu {Report} {Druck}
Select rptTbl
if (ApplicErrorRetVal) then ; Tabelle existiert nicht?
Menu Esc
return FALSE
endif
if (menuchoice() = "") then
Menu Esc
Message rptTbl, " Tabelle ist paßwortgeschützt"
return FALSE ; fragte nach Paßwort
endif
Select rpt ; Report existiert nicht?
if (ApplicErrorRetVal) then
Menu Esc
return FALSE
endif
switch
case dest = "Printer":
Message "Überprüfen, ob der Drucker bereit ist..."
retval = printerstatus()
if (not retval) then
Message "Schalten Sie bitte den Drucker ein. Drücken Sie anschließend eine Taste."
retval = getchar()
retval = printerstatus()
endif
if (not retval) then
Message "Drucker nicht bereit. Reportausgabe abgebrochen."
Menu Esc
else
Message "Report wird am Drucker ausgegeben..."
{Drucker}
endif
case dest = "Screen":
{Bildschirm}
case dest = "File":
Message "Report wird in die Datei " + destFile + " ausgegeben..."
{Textdatei}
Select destFile
if (menuchoice() = "Abbruch") then
{Ersetzen}
endif
endswitch
Clear
Menu Esc
return not ApplicErrorRetVal
endproc
WriteLib AppLib ReportTable
Release Procs ReportTable
; Prozedur benennt Tabelle um und verwendet angegebenen Präfix
proc RenamePre(oldName, pre, n, putMsg)
private name
while (TRUE)
name = pre + strval(n)
if (not istable(name)) then
Rename oldName name
if (putMsg) then
Message oldName, " Tabelle umbenannt in ", name,
"; mit beliebiger Taste fortfahren"
Beep Beep
c = getchar()
endif
return n + 1
endif
n = n + 1
endwhile
endproc
WriteLib AppLib RenamePre
Release Procs RenamePre
; Prozedur benennt alle Tabellen AltPrä* in NeuPrä## um
proc RenameSet(oldPre, newPre)
private oldName, i, n
oldName = oldPre
n = 1
for i from 1
if (not istable(oldName)) then
QuitLoop
endif
n = RenamePre(oldName, newPre, n, TRUE)
oldName = oldPre + strval(i)
endfor
endproc
WriteLib AppLib RenameSet
Release Procs RenameSet
proc SaveList(tblPre)
private i, renTbls, x
Array renTbls[10] ; maximale Anzahl von Tabellen zum umbenennen
ClearAll
Edit "LISTE"
CtrlHome ; zum ersten Feld mit den Namen der umzubenennenden Tabellen
Right
i = 0
scan for [] <> "" ; alle Eingabe/Indfehl-Tabellen umbenennen
i = i + 1 ; Array-Index hochzählen
renTbls[i] = [] ; Namen der umzubenennenden Tabelle sichern
[] = tblPre + strval(i - 1) ; neuen Namen in Tabelle ersetzen
endscan
Do_It!
ClearAll
for x from 1 to i
i = RenamePre(renTbls[x], tblPre, x, FALSE)
endfor
Menu {Dienste} {Umstrukturieren} {Liste} ; Hinzufügen des "Formular"-Feldes zur Tabelle
End
Down "Form" Right "A2"
Do_It!
ClearAll
endproc
WriteLib AppLib SaveList
Release Procs SaveList
proc CreateList(tbl, tblPre, sourceTbl)
private i, newTbl, srcTbl
ClearAll
i = RenamePre(tbl, tblPre, 1, FALSE) ; Eingabe/Indfehl-Tabelle umbenennen
newTbl = tblPre + strval(i - 1)
srcTbl = Directory() + sourceTbl
Create "LISTE" upper(tbl) + " Tabelle" : "A" + strval(len(newTbl)),
"BASE-Tabelle" : "A" + strval(len(srcTbl)),
"Form" : "A2"
View "LISTE" ; Tabellennamen in Liste-Tabelle eintragen
EditKey
Right
[] = newTbl
Right
[] = srcTbl
Do_It!
ClearAll
endproc
WriteLib AppLib CreateList
Release Procs CreateList
proc PrintList(frm, listPre)
private ans
; sagt dem benutzer, welches Formular verwendet wurde,
; damit er mit Dienste/FormZu die umbenannten Tabellen
; zu den Originalen kopieren kann
View "LISTE"
EditKey
CtrlEnd
[] = frm
Do_It!
CtrlHome
RenamePre("LISTE", listPre, 1, FALSE)
Echo Normal
Echo Off
ShowMenu "Reportdruck" : "Kurzreport ausgeben von der Tabelle",
"Fortfahren" : "Fortfahren, ohne einen Kurzreport zu drucken"
To ans
if (ans = "Reportdruck") then
ApplicErrorRetVal = FALSE
InstantReport
if (ApplicErrorRetVal) then
Message "Bitte Drucker einschalten; anschließend eine beliebige Taste drücken"
c = getchar()
ApplicErrorRetVal = FALSE
InstantReport
if (ApplicErrorRetVal) then
Message "Kurzreport abbrechen"
Sleep 2000
endif
endif
endif
endproc
WriteLib AppLib PrintList
Release Procs PrintList
; diese Prozedur benennt die Tabelle INDFEHL um, falls sie vor
; Dateneingabe oder nach Edit oder Dateneingabe existiert
proc KECheck(beforeDE, renEntry, sourceTbl, frm)
private renList, tblPre, listPre, oldList, tmp, tbl, ans
if (beforeDE) then
ClearAll
listPre = "KL"
oldList = "LISTE"
RenameSet("EINGABE", "EN") ; alle Eingabe-Tabellen umbenennen
RenameSet("IndFehl", "KV") ; alle Indfehl-Tabellen umbenennen
if (istable("LISTE")) then
RenamePre("LISTE", listPre, 1, TRUE)
endif
else
if (renEntry) then
; kompletten Pfad der neuen Tabellennamen halten, weil in
; der Liste-Tabelle ebenfalls der volle Pfad steht
tbl = "EINGABE"
tblPre = Directory() + "EN"
listPre = "EL"
oldList = "Sichern"
else
; kompletten Pfad der neuen Tabellennamen halten, weil in
; der Liste-Tabelle ebenfalls der volle Pfad steht
tbl = "IndFehl"
tblPre = Directory() + "KV"
listPre = "KL"
oldList = "Indfehl-Liste"
endif
if (nimages() > 0 and table() = "LISTE") then
SaveList(tblPre)
PrintList(frm, listPre)
else
if (istable(tbl)) then
CreateList(tbl, tblPre, sourceTbl)
PrintList(frm, listPre)
endif
endif
endif
ClearAll
Clear
endproc
WriteLib AppLib KECheck
Release Procs KECheck
proc EdFldView(prompt1, prompt2)
private s
while (TRUE)
FieldView
Wait Field
Prompt prompt1, prompt2
Until "F2", "Enter", "CtrlBackspace", "F1"
switch
case retval = "F1":
HelpKey()
otherwise:
if (retval = "CtrlBackspace") then
CtrlBackspace
endif
QuitLoop
endswitch
endwhile
endproc
WriteLib AppLib EdFldView
Release Procs EdFldView
proc EntryDoIt(sourceTbl, frm)
Message "Neue Records eintragen"
Do_It!
; Indfehl/Eingabe-tabellen sichern
KECheck(FALSE, ApplicErrorRetVal, sourceTbl, frm)
ApplicErrorRetVal = FALSE ; auf FALSE setzen, wenn Fehler aufgetreten ist
ClearAll
if (istable("EINGABE")) then ; sicherstellen, dass Eingabe-Tabelle nach Beendigung gelöscht wird
Delete "EINGABE"
endif
Clear
endproc
WriteLib AppLib EntryDoIt
Release Procs EntryDoIt
proc EntryCancel()
private ans
ShowMenu "Nein": "Dateneingabe nicht abbrechen.",
"Ja" : "Dateneingabe abbrechen."
To ans
if (ans = "Ja") then
Message "Dateneingabe abbrechen"
Sleep 2000
CancelEdit
ClearAll
Clear
return TRUE
endif
return FALSE
endproc
WriteLib AppLib EntryCancel
Release Procs EntryCancel
proc EntryTable(sourceTbl, mapTbl, frm, formToggle)
private inFormView, inMultiForm, prmpt1, prmpt2
KECheck(TRUE, TRUE, sourceTbl, frm)
Menu {Dienste}
if (mapTbl = "") then ; Einzeltabellen-Dateneingabe
{Dateneingabe}
Select sourceTbl
else ; Multitabellen-Dateneingabe
{Multieingabe} {Eingabe}
Select sourceTbl
Select mapTbl
endif
if (ApplicErrorRetVal) then
Menu Esc
return FALSE
endif
if (menuchoice() <> "Error") then
Menu Esc
Message sourceTbl, " Tabelle ist paßwortgeschützt"
Sleep 2000
return FALSE
endif
if (frm = "") then
inFormView = FALSE
inMultiForm = FALSE
else
RequiredCheck Off
PickForm frm
RequiredCheck On
if (ApplicErrorRetVal) then ; Verwendung vom Formular sicherstellen
CancelEdit
ClearAll
return FALSE
endif
inMultiForm = IsMultiForm(sourceTbl, frm)
inFormView = TRUE
endif
prmpt = "[F2] - Dateneingabe abschließen, [Esc] - Abbrechen, [Ctrl][U] - Widerrufen"
while (TRUE)
Wait Table
Prompt prmpt
Until "F7", "FieldView", "F35", "F2", "Esc", "F1", "F3", "F4"
switch
case retval = "F7":
ToggleForm(formToggle, frm, FALSE)
case retval = "FieldView" or retval = "F35":
EdFldView(prmpt, "")
case retval = "F1":
HelpKey()
case retval = "Esc":
if (EntryCancel()) then
return FALSE
endif
case retval = "F3":
if (inMultiForm and inFormView) then
UpImage
else
Beep
endif
case retval = "F4":
if (inMultiForm and inFormView) then
DownImage
else
Beep
endif
otherwise:
EntryDoIt(sourceTbl, frm)
return TRUE
endswitch
endwhile
endproc
WriteLib AppLib EntryTable
Release Procs EntryTable
proc EditCancel(useDelTable)
private ans
ShowMenu "Nein": "Editieren nicht abbrechen." ,
"Ja" : "Editieren abbrechen."
To ans
if (ans = "Ja") then
Message "Editieren abbrechen"
Sleep 2000
CancelEdit
if (useDelTable) then
Delete "ENTFERNT"
endif
ClearAll
Clear
return TRUE
endif
return FALSE
endproc
WriteLib AppLib EditCancel
Release Procs EditCancel
; führt Ok! für eine Einzeltabellen-Sitzung aus
proc SEditDoIt()
Do_It!
ClearAll
Clear
endproc
WriteLib AppLib SEditDoIt
Release Procs SEditDoIt
proc SEditDelIns()
Del
endproc
WriteLib AppLib SEditDelIns
Release Procs SEditDelIns
proc EditTable(edTbl, sourceTbl, mapTbl, frm, formToggle,
doitProc, delProc, prmpt2, update, useDelTable, QEdit)
private inFormView, inMultiForm, edImage, delImage
if (frm <> "" and upper(edTbl) <> upper(sourceTbl)) then
; nur kopieren, wenn Form. gebraucht wird und die Tabellen nicht gleich sind
Menu {Tools} {Kopie} {NurFamilie}
Select sourceTbl
Select edTbl
{Ersetzen}
; Strukturen passen nicht?
if (ApplicErrorRetVal) then
return FALSE
endif
endif
Edit edTbl
if (ApplicErrorRetVal) then
return FALSE
endif
if (useDelTable) then
edImage = imageno()
RequiredCheck Off
MoveTo "ENTFERNT"
delImage = imageno()
MoveTo edImage
RequiredCheck On
endif
if (frm = "") then
inFormView = FALSE
inMultiForm = FALSE
else
RequiredCheck Off
PickForm frm
RequiredCheck On
if (ApplicErrorRetVal) then ; Verwendung vom Formular sicherstellen
CancelEdit
ClearAll
return FALSE
endif
inMultiForm = IsMultiForm(sourceTbl, frm)
inFormView = TRUE
endif
if (update) then
ImageRights Update
endif
if (useDelTable) then
if (formToggle or frm = "") then
FirstShow
endif
endif
prmpt1 = "[F2] - Editieren abschließen, [Esc] - Abbrechen, [Ctrl][U] - Widerrufen"
while (TRUE)
Wait Table
Prompt prmpt1, prmpt2
Until "Del", "F7", "FieldView", "F35", "F2", "Esc", "F1", "F3", "F4"
switch
case retval = "Del":
if (delProc = "") then
Message "Kann Record nicht löschen"
Sleep 2000
else
ExecProc delProc
endif
case retval = "F7":
ToggleForm(formToggle, frm, QEdit)
case retval = "FieldView" or retval = "F35":
EdFldView (prmpt1, prmpt2)
case retval = "F1":
HelpKey()
case retval = "F2":
ExecProc doitProc ; einige Doit-Prozeduren benötigen initialisierte globale Variable
return TRUE
case retval = "Esc":
if (EditCancel(useDelTable)) then
return FALSE
endif
case retval = "F3":
if (inMultiForm and inFormView) then
UpImage
else
Beep
endif
case retval = "F4":
if (inMultiForm and inFormView) then
DownImage
else
Beep
endif
endswitch
endwhile
endproc
WriteLib AppLib EditTable
Release Procs EditTable
proc ApplicErrorProc()
private err, ErrorProc, eMsg, msg, b
err = ErrorCode()
ApplicErrorRetVal = TRUE
if ((err = 3 or err = 4) and sysmode() = "Dateneingabe") then
Menu {Sichern} ; in Eingabe-Tabelle(n) speichern
else
eMsg = ErrorMessage()
if (not match(eMsg, "..Laufzeitfehler: ..", b, msg)) then
if (not match(eMsg, "..Syntaxfehler: ..", b, msg)) then
msg = eMsg
endif
endif
Message msg
Sleep 2000
endif
return 1 ; Skip-Befehl, der Fehler verursacht
endproc
WriteLib AppLib ApplicErrorProc
Release Procs ApplicErrorProc