AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Record zur Laufzeit auflösen ....

Ein Thema von gbl · begonnen am 21. Jan 2006 · letzter Beitrag vom 21. Jan 2006
Antwort Antwort
gbl

Registriert seit: 21. Aug 2004
18 Beiträge
 
#1

Record zur Laufzeit auflösen ....

  Alt 21. Jan 2006, 14:55
Ich habe hier ein spezielles Problem das sich wie folgt darstellt.

Ich etwickle gerade eine CGI Anwendung(en). Innerhalb dieser Anwendung gibt es viele Punkte an denen Daten in einem File gespeichert werden. Diese Schnittstelle stammt von einem Dritthersteller.

Ich möchte nun eine einzige PROCEDURE verwenden welche alle möglichen Daten übergeben bekommt und dann speichern kann.
Diese Daten werden in einem RECORD verpackt. Dieses RECORD sieht pro Anwendung anders aus.

Beispiel:

Delphi-Quellcode:
TRECORD1 = record
    value1: byte;
    value2: integer;
    value3: string;
  end;

TRECORD2 = record
    value1: string;
    value2: longint;
    value3: TDateTime;
  end;
erreichen möchte ich:

Delphi-Quellcode:
procedure SAVE(daten: DATENTYP?);
begin
  { Dieser Code kann den DATENTYP und dessen Struktur erkennen }
  // Send Parameter to API
end;
hoffe das somit alles klar ist.
______________________________________
cu.
Günter
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Record zur Laufzeit auflösen ....

  Alt 21. Jan 2006, 15:07
Das geht so nicht.

Du könntest folgendes machen: Du definierst dir eine Basisklasse mit einer Load und Save-Methode. Für jeden speziellen Record-Typ leidest Du eine Klasse ab welche alle benötigten Info (evtl. als entsprechender Record-Typ) beinhaltet und die Methoden Load/Save überschreibt.

Jetzt kannst Du natürlich überall in deinem Programm wo du mit entsprechender Referenz auf die Basisklasse arbeitest einfach die Load/Save-Methode aufrufen und es wird immer die passende Load/Save-Methode verwendet.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Mystic
Mystic

Registriert seit: 18. Okt 2003
Ort: Flerzheim
420 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Record zur Laufzeit auflösen ....

  Alt 21. Jan 2006, 15:10
Kann man nicht einfach einen untypisierten Parameter verwenden? Also à la

procedure Save(var Data);
Jan Steffens
Der Fachwortgenerator - 100% Schwachsinn --- Der UPnP Router Manager - Kommentare erwünscht!
  Mit Zitat antworten Zitat
gbl

Registriert seit: 21. Aug 2004
18 Beiträge
 
#4

Re: Record zur Laufzeit auflösen ....

  Alt 21. Jan 2006, 15:32
Zitat:
procedure Save(var Data);
klingt interessant.
Wie könnte ich nun feststellen von welchem Typ Data nun ist?

Ein Durchprobieren würde zu Not auch reichen; wie etwa

Delphi-Quellcode:
if Data=Type of TRECORD1 then ...
if Data=Type of TRECORD2 then ...

PS: ich verwende "absichtlich" keinerlei Klassen.
______________________________________
cu.
Günter
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Record zur Laufzeit auflösen ....

  Alt 21. Jan 2006, 15:47
Zitat von gbl:
PS: ich verwende "absichtlich" keinerlei Klassen.
Und aus genau diesem Grund kannst du nicht nachher herausfinden von welchem Typ dein Parameter ist . Für Records wird diese Info - im Gegensatz zu Klassen - nicht mitgeführt. Deine einzige Chance: Ein 2. Parameter über den du dir den Typ codierst. Nur schön ist das nicht wirklich...
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von Mystic
Mystic

Registriert seit: 18. Okt 2003
Ort: Flerzheim
420 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Record zur Laufzeit auflösen ....

  Alt 21. Jan 2006, 15:50
Wenn die Records unterschiedlich groß sind könntest du auf ihre Größe überprüfen.
Jan Steffens
Der Fachwortgenerator - 100% Schwachsinn --- Der UPnP Router Manager - Kommentare erwünscht!
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Record zur Laufzeit auflösen ....

  Alt 21. Jan 2006, 16:27
Ohne Klassen geht das seehr einfach. Und wie, glaubst du, wurde Quacke 3 entwickelt ?

Also, jeder RECORD müsste IMMER so ANFANGS definiert sein:
Delphi-Quellcode:
type
  basis = packed record
  recID:Cardinal;
  end;

  datatyp1 = packed record
  recID:Cardinal;
  ...
  end;
recID wird dann folgender massen abgefragt:
Delphi-Quellcode:
procedure procname(var mydata);
begin
  case basis(mydata).recID of
  ...
  end;
end;
Wenn recID ein string sein sollte dann bitte mit einer festen Grösse, zb recID:string[20];
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  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 12:34 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