DBF Feldnamen ändern

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

DBF Feldnamen ändern

Beitrag von Peter Schweizer »

Hallo xbase gemeinde,

ich stehe vor der Frage, wie ich in einer bestehende DBF Datei den Namen eines Feldes ändern kann ?

Es soll also lediglich z.B. der Feldname "Beleg" in "BelegNr" geändert werden.

(Die große Lösung: eine neue Structur anlegen und Satz für Satz übernehmen ist mir bekannt.)

mfg Peter
Gruss Peter
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: DBF Feldnamen ändern

Beitrag von brandelh »

Tatsächlich sieht weder Clipper noch Xbase eine einfache Umbenennung vor, aber man kann mit low level Dateioperationen die Position des FELDNAMENS ermitteln und den Tauschen.
Gemacht habe ich das noch nicht ... es sollte aber auch gehen die DBF in den Speicher zu laden, nach dem Feldnamen zu suchen und sicherheitshalber zu prüfen ob es mehrere Vorkommen gibt. AT() kann für den ersten Buchstaben genutzt werden, dann 10 Zeichen (für Standard DBF ...) ...

KEINESFALLS dies mit MEMOREAD() oder MEMOWRITE() machen !!!
FOPEN() etc. oder Funktionen aus der Wissensbasis oder XbToolsIII (File2String oder so ...) gehen.
Gruß
Hubert
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DBF Feldnamen ändern

Beitrag von Koverhage »

Hubert meint so etwas wie das hier

Code: Alles auswählen

*+
*+    Procedure RenameFields()
*+
procedure RenameFields( TableName, FieldList )

local i
local n
local FieldIndex
local FieldCount
local Buffer
local Table      := fopen( TableName, O_READWRITE )

if ( Table >= 0 )
   fseek( Table, 0 )

   // 1024 chars will suffice for 63 fields in dbf
   Buffer     := space( 1024 )
   n          := fread( Table, @Buffer, 1024 )
   FieldCount := len( FieldList )

   if ( FieldCount > 0 )
      for i := 1 to FieldCount
         FieldIndex := at( upper( trim( FieldList[ i, 1 ] ) ), Buffer )

         if ( FieldIndex > 0 )
            Buffer := stuff( Buffer, FieldIndex, 10, ;
                             padr( trim( FieldList[ i, 2 ] ), 10, chr( 0 ) ) )
         endif
      next

      fseek( Table, 0 )
      fwrite( Table, Buffer, n )
   endif
   fclose( Table )
endif
return
Gruß
Klaus
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: DBF Feldnamen ändern [Gelöst]

Beitrag von Peter Schweizer »

Hallo Klaus,
vielen Dank für eine Funktion.
Werde es gleich mal ausprobieren. --> Funktioniert Super Nocmals vielen Dank !

Grüße Peter
Gruss Peter
Antworten