Robert W.B. Linn´s Software, Beispielprojekte und Tipps zu TurboDB, TurboDB VCP, TurboDB Studio, Visual Data Publisher
   
Updates mit Strukturänderung durchführen
Alle Einträge  Stichworte  Alle Tipps und Tricks  Download Tipps und Tricks (html, hlp, rtf) 
..Info
..für alle, die beim Kunden Projekte laufen haben und Updates mit Strukturänderung
..durchführen wollen:
..Diese Routine geht davon aus, daß im Unterverzeichnis eine komplette Kopie aller
..Dateien liegen. Ob das Update durchgeführt wird, entscheidet die Existenz einer Datei
..namens UPDATE.INI
..Update.ini beinhaltet in der 2. Zeile die Revisionsnummer des Updates
..Aufbau UPDATE.INI
..[Update]
..Rev=1
..Update.ini wird noach dem Update umbenannt.
..Importiert werden alle Felder, auch die Memofelder, auch kaputte Quelldateien mit
..Laufende_Nummer=0 werden dabei korrigiert.
..viel Spaß H. Götz

..Modul für Tabelle EINSATZ
..01.12.1999
..procedure Daten_einlesen
..falls die Quelldatei Laufende_Nummer=0 enthält muß 
..mit einer vereinfachten Importroutine gearbeitet werden
..ob die Importroutine korrekt arbeitet, wenn man nur über dieRecord-Nummer 
..geht anstelle der Lfd weiß ich derzeit nicht sicher.
..Bei einfacheren Strukturen sicherlich, bei komplexen Verknüpfungenmuß 
..noch getestet werden
.NB 1
PROCEDURE Datensatz_anhängen(nDat, nDB : REAL)
 VarDef c : STRING
 VarDef j, nF : REAL
 ReadRec( nDat,0)
 j := 1
 REPEAT
  c := Label( nDat,j)
  IF LabelNo( nDB, c)>0
   IF GetType( nDat, j)[1] # "M"
    SetField( nDat, j, GetField( nDB, LabelNo( nDB,c)))
   END
  END
  j := j+1
 UNTIL j > MaxLabel(nDat)
 nF := FileSize( nDat)+1
 WriteRec( nDat, nF)
 ReadRec( nDat, nF)
 j := 1
 REPEAT
  c := Label( nDat,j)
  IF LabelNo( nDB, c)>0
   IF GetType( nDat, j)[1] = "M"
    PrimFile( nDB)
    DO _'CopyMemo('+c+' ,"RAMTEXT")'
    PrimFile( nDat)
    DO _'ReadMemo( '+c+',"RAMTEXT",1)'
    PrimFile( nDB)
   END
  END
  j := j+1
 UNTIL j > MaxLabel(nDat)
ENDPROC

PROCEDURE Daten_einlesen( nDat : REAL; cDat : STRING)
..01.12.1999 / Götz
 VarDef nF, nDB, nRec, nFI,j,i : REAL
 VarDef aLfd : REAL[5000]
 VarDef c : STRING
 Showwait("Programmupdate wird durchgeführt"+CHR(13)+DBNAME(nDat) +"wird
 zurückgelesen")
 nDB := OpenDB(cDat,"",0,0)
 IF nDB >0
  PrimFile( nDB)
  ACCESS( nDB, IndName( nDB,0))
  ReadRec( nDB, FirstRec( nDB))
  ..falls die Quelldatei Laufende_Nummer=0 enthält muß 
  ..mit einer vereinfachten Importroutine gearbeitet werden
  ..ob die Importroutine nicht korrekt arbeitet, 
  ..wenn man nur über die Record-Nummer geht anstelle der Lfd weiß ich 
  ..derzeit nicht sicher.
  ..Bei einfacheren Strukturen sicherlich, bei komplexen
  ..Verknüpfungen muß noch getestet werden
  IF FileSize( nDB)>0, GetField( nDB, LabelNo( nDB,"Laufende_Nummer"))="0"
   Message("Die Backupdatei erhält einen Eintrag mit
   Laufender_Nummer=0"+CHR(13)+"Die Einträge werdenkorrigiert","Warnhinweis zu
   "+DBNAME(nDB))
   nRec := FirstRec( nDB)
   WHILE nRec >0
    ReadRec( nDB, nRec)
    Datensatz_anhängen(nDat, nDB)
    nRec := NextRec( nDB)
   END
  ELSE
   nRec := FirstRec( nDB)
   i := 0
   WHILE nRec >0
    ReadRec( nDB, nRec)
    aLfd[i] := VAL( GetField( nDB, LabelNo( nDB, "Laufende_Nummer")))
    i := i+1
    nRec := NextRec( nDB)
   END
   aLfd[i] := 0
   i := 0
   WHILE aLfd[i] >0
    ReadRec( nDB, FindRec(nDB, STR( aLfd[i]),IndName( nDB, 0)))
    Datensatz_anhängen(nDat, nDB)
    i := i+1
   END
   CloseDB(nDB)
  END
 ELSE
  Message("kann Datei nicht öffnen",cDat)
 END 
ENDPROC

PROCEDURE Alte_Einträge_löschen( nDat : REAL)
..01.12.1999 / Götz
 Showwait("Alte Einträge werden entfernt")
 ClearDat( nDat )
 WHILE FileSize( nDat )>0
  Delrec( nDat , FirstRec( nDat ))
 END
 SetAuto( nDat ,1)
ENDPROC

procedure Programm_aktuallisieren
..01.12.1999 / Götz
 VarDef nRev, nDatei, nRec, nFI,j : REAL
 VarDef nMaxFile : REAL
 VarDef aLfd : REAL[5000]
 VarDef c : STRING
 nMaxFile := Maxfile
 IF ISFILE("UPDATE.INI")=0
  HALT
  Message("UPDATE.~NI wird zurück in UPDATE.INI umbenannt","Update wird
  fortgesetzt")
  Rename("UPDATE.~NI","UPDATE.INI")
 END
 nFI := Reset("UPDATE.INI")
 c := ReadLn(nFI)
 c := LTRIM(RTRIM( c[5,10] ))
 nRev := VAL(c)
 Close(nFI) 
 Showwait("Ihr Programm wird aktuallisiert"+CHR(13)+"Revision"+STR(nRev))
 nDatei := 1
 REPEAT
  Showwait("Aktuallisiere "+DBNAME( nDatei))
  IF ISFILE(BaseDir+"BACKUP\"+DBNAME(nDatei))=1
   Alte_Einträge_löschen(nDatei)
   Daten_einlesen( nDatei, BaseDir+"BACKUP\"+DBNAME(nDatei))
  END
  nDatei := nDatei+1
 UNTIL nDatei > nMaxFile
 Rename("UPDATE.INI","UPDATE.~NI")
 Hidewait
endproc

  • **

    PROCEDURE Editieren( cField : STRING)
    ..01.12.1999 / Götz
    ..ermöglicht die Bearbeitung des Datenfeldes, welches als cFieldübergeben wird
     ReadRec( FileNr, RecNr(FileNr))
     T-Eingabe := GetField(FileNr, LabelNo( FileNr,cField))
     IF Input(cField)=1
      SetField(FileNr, LabelNo( FileNr,cField),T-Eingabe)
      WriteRec( FileNr, RecNr(FileNr))
      ATTACH
     END
    ENDPROC

    PROCEDURE Neueingabe
    ..01.12.1999 / Götz
     VarDef nRec : REAL
     T-Eingabe := ""
     VarDef cField, cLfd : STRING
     cField := IndDef(FileNr,1)
     cField := cField[1,POS(":",cField) -1]
     ReadRec( FileNr, 0)
     IF Input( cField,"Neueingabe")=1
      SetField( FileNr, LabelNo( FileNr, cField),T-Eingabe)
      IF GetField( FileNr,LabelNo( FileNr, cField))#""
       nRec := FileSize( FileNr)+1
       WriteRec( FileNr, nRec)
       SetSortOrder( IndName( FileNr,1))
       ShowRec( nRec)
      END
     END
    ENDPROC

    PROCEDURE Datensatz_Löschen
    ..01.12.1999 / Götz
    ..Löscht den aktuellen Datensatz nach Rückfrage
    ..als Feldinhalt wird der Inhalt des ersten Feldes aus den ID-Indexangezeigt
     VarDef nRec : REAL
     VarDef cField, cLfd : STRING
     ReadRec( FileNr, RecNr( FileNr))
     nRec := RecNr( FileNr)
     cField := IndDef(FileNr,1)
     cField := cField[1,POS(":",cField) -1]
     cLfd := GetField( FileNr, LabelNo( FileNr, "Laufende_Nummer"))
     IF Message(cField+" : "+GetField(FileNr,LabelNo(FileNr,cField)),"Eintrag wird
      unwiderruflich entfernt!",3)=6
      DelRec( FileNr, FindRec( FileNr,cLfd, IndName( FileNr, 0)))
      SetSortOrder( IndName( FileNr,1))
      ShowRec( nRec)
     END
    ENDPROC


  • Letzte Änderung 25.01.2013 (c) 1999-2013 Robert W.B. Linn, Pinneberg, Germany @53° 38' 60''N 9° 48' 0''E