| | TurboDB Studio | TurboDB VCL Delphi | >VDP < | ropApps | Android | Downloads | Links | Suche | Kontakt | Impressum | |
|
Updates mit Strukturänderung durchführen
|
|
..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
|