![]() |
Datenbank: DBF • Version: ? • Zugriff über: TTABLE
Gleiches Programm für 2 Tabellen, eines mit einem zusätzlichen Feld
Hallo,
Freizeitprogrammierer in Delphi 7 Ich musste ein zusätzliches Feld zu einer lokalen .dbf-Table hinzufügen. Nach einigen Änderungen und insbesondere dem Hinzufügen eines siebte DataFiels zur TTable-Komponente (mit dem FieldDefs-Kollektionseditor beim Design) funktioniert alles korrekt. Außer dass ich wünschte, ich könnte auch mit diesem Programm meine alten Table ausnutzen. Beim Start meines Programms habe ich einen Test hinzugefügt, um die Anzahl der Felder zu ermitteln und somit die eine oder andere Version der Table laden zu können. Aber nachdem wie kann ich es tun? Ich hatte gedacht, das hinzugefügte Feld zu neutralisieren (Table1.Fields [6] .Visible: = False;) oder zu aktualisieren (Table1.Fields [6] .Visible: = True;), aber die Datensätze sind dann für die alten Datenbanken unsichtbar. Oder gibt es andere Lösungen? Wer kann mir helfen, danke im Voraus. |
AW: Gleiches Programm für 2 Tabellen, eines mit einem zusätzlichen Feld
Vor dem Table.Open ein Table.Fields.Clear.
Die Feldliste wird automatisch beim Öffnen der Tabelle befüllt. Die Definition der Felder mit dem FieldDefs-Kollektionseditor ist nur erforderlich, wenn man die Tabelle mit Table.CreateTable erstellen will. Hat man Felder im Quelltext definiert, z. B.:
Delphi-Quellcode:
dann kann man Table ein BeforeClose-Ereignis zuordnen:
type
TForm1 = class(TForm) ... public fID : TField; fRootUrl : TField; fPostUrl : TField; ...
Delphi-Quellcode:
und ein AfterOpen-Ereignis:
procedure TForm1.TableBeforeClose(DataSet: TDataSet);
begin fID := Nil; fRootUrl := Nil; fPostUrl := Nil; ...
Delphi-Quellcode:
Greift man nun im Programm irgendwo auf so ein Feld zu, weiß aber nicht, ob man es überhaupt zur Verfügung hat (hier also bei der alten Tabelle), könnte man das in etwa so machen:
procedure TForm1.TableAfterOpen(DataSet: TDataSet);
begin fID := Table.FindField('ID'); fRootUrl := Table.FindField('RootUrl'); fPostUrl := Table.FindField('PostUrl'); ...
Delphi-Quellcode:
if Assigned(fID) then begin
ShowMessage(fID.AsString); end; |
AW: Gleiches Programm für 2 Tabellen, eines mit einem zusätzlichen Feld
Hallo,
Deine Antwort ist sehr interessant, kleines Problem hätte ich doch : mein gesamtes Programm schreiben müssen, weil ich folgendes benutzt habe: Tabelle1TITRE: TStringField; .... Tabelle 1INFO: TMemoField; Tabelle1ICONE: TBlobField; - Table2TITRE: TStringField; ... Tabelle2INFO: TMemoField; Tabelle 2ICONE: TBlobField; und jetzt in mehr Tabelle1MAJDATE: TDateField; Tabelle2MAJDATE: TDateField; Und sogar Verfahren wie Prozedur TF_SAISIE.Table1LOGICIELChange (Sender: TField); Aber warum nicht, wenn es die einzige Lösung ist. Ich dachte auch über eine andere Lösung des Typs nach: nachdem ich die Anzahl der Felder getestet habe, um das fehlende Feld hinzuzufügen, dann öffne ich es normal (das teste ich gerade) danke |
AW: Gleiches Programm für 2 Tabellen, eines mit einem zusätzlichen Feld
Jetzt hänge ich mich mal weit aus dem Fenster (weil ungetestet und nur geraten):
Bleib' bitte mal bei meinem vorherigen Ansatz und ändere das AfterOpen dahingehend ab:
Delphi-Quellcode:
Tabelle1TITRE := TStringField(Tabelle1.FindField('TITRE'));
Und im BeforeClose dann halt:
Delphi-Quellcode:
Tabelle1TITRE := Nil;
Bei der Benutzung dürfte es dann bei
Delphi-Quellcode:
bleiben.
if Assigned(Tabelle1TITRE) then begin
ShowMessage(Tabelle1TITRE.AsString); end; Funktioniert das? |
AW: Gleiches Programm für 2 Tabellen, eines mit einem zusätzlichen Feld
Hallo,
Ich löste mein Problem, als ich die Anzahl der Felder prüfte, fügte ich einfach das fehlende Feld hinzu. Danke für alles. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz