Einzelnen Beitrag anzeigen

marfin777

Registriert seit: 23. Jul 2015
5 Beiträge
 
Delphi XE8 Professional
 
#6

AW: Record, der überschrieben wird, bekommt wieder Initialwerte

  Alt 27. Jul 2015, 09:07
So... entschuldigt die verspätete Antwort, aber am Wochenende kam ich zu nix...

Zitat:
Sind denn in der Unit2 die Variablen global deklariert?
- Deklaration ausschließlich in unit2 unter interface.

Zitat:
...Das passiert z.B. dann wenn das Record nicht als var Parameter übergeben wird
- Diese spezielle Prozedur zum Umwandeln, und auch die meisten anderen "Methoden", die den record verändern arbeiten ohne Übergabe- oder Rückgabewerte.

Zitat:
Ich würde eher Klassen daraus machen und DbRecordToDataset als Methode der Klasse implementieren, einfach als Zuweisung, also Assign. Dann kann man das wunderbar in der Klasse kapseln...
- So werd ich's jetzt umbauen! auch wenn ich damit noch nicht ganz nachvollziehen konnte, warum sich der Record, wie beschrieben, verhielt. Am Anfang war's ein übersichtlicher record mit einer handvoll Variablen, aber nach-und-nach kam vom beauftragenden Fachbereich immer mehr dazu.
Mit Klassen und Methoden fühl ich mich eh direkt etwas vertrauter.

Zitat:
Eine Variable mit dem Namen YYYY enthält nicht die übertragenen Werte obwohl XXXX und YYYY die selbe Variable sein sollte?
- Wenn ich dich richtig verstanden habe, hast du mich missverstanden. Die Records werden ausschließlich in Unit2 gebildet und in Unit3 von Record-Typ TRegeln in TDbRegeln umgewandelt.
Delphi-Quellcode:
unit Unit2;

interface
...
  var
    TypNum: String;
    TypSonderZeichen: String;
    TypAlphaNum: String;
    AktRegel: TRegeln; // Record: Aktuelle Regel-Maske
    LtzRegel: TRegeln; // Record: Letzte geladene Regel
    LoadRegel: TDbRegeln; // Record: DbRegel, die geladen wurde
    SafeRegel: TDbRegeln; // Record: DbRegel, die zum speichern überprüft wurde
Ich setzte mich jetzt mal an den Umbau zur class und werde dann hier auch mal noch das (hoffentlich) funktionierende Ergebnis für andere Hilfesuchenden posten.

Bis dahin, danke für die zahlreiche Hilfe!

PS: Ich kenne ja "Neue Frage neuer Thread", aber da es hier erwähnt wurde lass ich's mal hier stehen:
Zitat:
...schreib dir Setter für deine Record Felder und setze dort einen Breakpoint, dann solltest du sehen wer dir da deine Werte zurücksetzt.
- Wie setzte ich das z.B. für AktRegel.ProbenartNr um? Denn dieser ist Initial '0', bekommt aus LoadRegel in Unit3 den Wert aus der DB-Tabellenzeile '10'...AktRegel.ProbenartNr := IntToStr(LoadRegel.Probenart_Nr); ..., was auch mit dem Debugger verfolgbar ist (wenn ich mit der Maus über den Variablennamen gehe), und springt der Debugger zurück zu dem Aufrufer Unit1, ist der Wert AktRegel.ProbenartNr laut Debugger in allen Units wieder '0'.
Markus
  Mit Zitat antworten Zitat