AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Gleiches Programm für 2 Tabellen, eines mit einem zusätzlichen Feld
Thema durchsuchen
Ansicht
Themen-Optionen

Gleiches Programm für 2 Tabellen, eines mit einem zusätzlichen Feld

Ein Thema von PIERREDENNLER · begonnen am 7. Dez 2017 · letzter Beitrag vom 8. Dez 2017
Antwort Antwort
PIERREDENNLER

Registriert seit: 24. Nov 2010
9 Beiträge
 
#1

Gleiches Programm für 2 Tabellen, eines mit einem zusätzlichen Feld

  Alt 7. Dez 2017, 18:26
Datenbank: DBF • Version: ? • Zugriff über: TTABLE
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.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#2

AW: Gleiches Programm für 2 Tabellen, eines mit einem zusätzlichen Feld

  Alt 7. Dez 2017, 19:44
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:
type
  TForm1 = class(TForm)
...
  public
    fID : TField;
    fRootUrl : TField;
    fPostUrl : TField;
...
dann kann man Table ein BeforeClose-Ereignis zuordnen:
Delphi-Quellcode:
procedure TForm1.TableBeforeClose(DataSet: TDataSet);
begin
  fID := Nil;
  fRootUrl := Nil;
  fPostUrl := Nil;
...
und ein AfterOpen-Ereignis:
Delphi-Quellcode:
procedure TForm1.TableAfterOpen(DataSet: TDataSet);
begin
  fID := Table.FindField('ID');
  fRootUrl := Table.FindField('RootUrl');
  fPostUrl := Table.FindField('PostUrl');
...
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:
Delphi-Quellcode:
if Assigned(fID) then begin
  ShowMessage(fID.AsString);
end;
  Mit Zitat antworten Zitat
PIERREDENNLER

Registriert seit: 24. Nov 2010
9 Beiträge
 
#3

AW: Gleiches Programm für 2 Tabellen, eines mit einem zusätzlichen Feld

  Alt 8. Dez 2017, 11:04
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
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#4

AW: Gleiches Programm für 2 Tabellen, eines mit einem zusätzlichen Feld

  Alt 8. Dez 2017, 13:18
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:

Tabelle1TITRE := TStringField(Tabelle1.FindField('TITRE'));

Und im BeforeClose dann halt:

Tabelle1TITRE := Nil;

Bei der Benutzung dürfte es dann bei
Delphi-Quellcode:
if Assigned(Tabelle1TITRE) then begin
  ShowMessage(Tabelle1TITRE.AsString);
end;
bleiben.

Funktioniert das?
  Mit Zitat antworten Zitat
PIERREDENNLER

Registriert seit: 24. Nov 2010
9 Beiträge
 
#5

AW: Gleiches Programm für 2 Tabellen, eines mit einem zusätzlichen Feld

  Alt 8. Dez 2017, 13:51
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz