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
DBF Feldnamen ändern
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 153
- Registriert: Do, 06. Apr 2006 10:51
- Danksagung erhalten: 3 Mal
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: DBF Feldnamen ändern
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.
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
Hubert
- Koverhage
- 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
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
Klaus
-
- Rekursionen-Architekt
- Beiträge: 153
- Registriert: Do, 06. Apr 2006 10:51
- Danksagung erhalten: 3 Mal
Re: DBF Feldnamen ändern [Gelöst]
Hallo Klaus,
vielen Dank für eine Funktion.
Werde es gleich mal ausprobieren. --> Funktioniert Super Nocmals vielen Dank !
Grüße Peter
vielen Dank für eine Funktion.
Werde es gleich mal ausprobieren. --> Funktioniert Super Nocmals vielen Dank !
Grüße Peter
Gruss Peter