![]() |
AppendRecord-Parameter zusammensetzen
Hallo ihr Delphianer,
Ich arbeite gerade an zwei Units zum Übersetzen einer bestehnden bzw. neuen Anwendung (Unit 1: Speichert alle Formulare und dazugehörige relevante Objekte mit Texteigenschaften wie Caption; Unit 2: Übersetzt nun mit diesen Informationen die Anwendung) Ich arbeite mit DBISAM Database und Table-Objekten, welche ich zur Laufzeit der Unit erzeuge (und freigebe^^). Die Datensätze werden dann per StartTransaction/Commit und AppendRecord zusammengebaut. Ich benötige nun eine Möglichkeit den Parameter, den ich AppendRecord übergeben muss, ähnlich wie einen String zusammenzubauen. der Übergabeparameter ist laut Delphi Hilfe ein array of const - aber was ist das? Array vom "Datentyp const"? O.o Online finde ich zu dem auch öfter den Begriff TVarRec. Ich kann damit noch nicht so richtig was anfangen. Hat jemand eine Möglichkeit, wie ich den Parameter als Variable übergebe und die dann selbst befülle? Folgende Werte werden dabei eingetragen: Integer, Text und null |
AW: AppendRecord-Parameter zusammensetzen
Delphi-Quellcode:
ist ein spezielles Open-Array, wo von Delphi, bei Übergabe, bzw. bei Aufruf der Funktion, "irgendwelche" Typen automatisch in TVarRec umgewandelt werden.
array of const
Für die Übergabe kannst du ein
Delphi-Quellcode:
verwenden
array of TVarRec
und beim Auslesen kannst du die Array-Werte als TVarRec interpretieren. Beachte aber, du bist selber für die Speicherverwaltung zuständig, vorallem für die Freigabe von eventuell reserviertem Speicher. Aber: Warum so umständilch? Verwende parametrisierte SQL-Statements. Also mit Append beginnen, dann die Parameter über FindField einzeln zuweisen und zum Schluß ein Post. |
AW: AppendRecord-Parameter zusammensetzen
Und er sah den Wald vor lauter Bäumen nicht, vielen Dank für diese Denkstütze.
Lösung meiner Frage: - CurrentForm wird in einer Schleife befüllt (Screen.Forms[i]) - GetPropValue ermittelt den Wert einer Komponente + Eigenschaft - UsedLanguages ist ein Array mit den verwendeten Sprachen der Ausgangsanwendung
Delphi-Quellcode:
text := GetPropValue(CurrentForm.FindComponent(SL_Object[j]),SL_Property[k]);
TBL_Lng_Texts.Append; TBL_Lng_Texts.FindField('TXT_ID').AsInteger := prp_count; for l:=0 to High(UsedLanguages) do TBL_Lng_Texts.FindField('TXT_'+UsedLanguages[l]).Clear; TBL_Lng_Texts.FindField('TXT_'+Language).AsString := text; TBL_Lng_Texts.Post; |
AW: AppendRecord-Parameter zusammensetzen
Anstelle von FindField sollte man besser FieldByName verwenden.
FieldByName prüft zusätzlich ob das Feld überhaupt existiert und würde, falls nicht vorhanden, eine lesbare Exception werfen. Bei Verwendung von FindField kann es dagegen zu einer unschönen Access-Violation-Exception kommen. |
AW: AppendRecord-Parameter zusammensetzen
Vor einiger Zeit habe ich mal gelesen (IIRC im Blog von Marco Cantu), dass es auch noch einen gehörigen Schwung Performance bringt, wenn man die Felder einmalig mit FieldByName ermittelt, lokalen TField-Variablen zuweist und dann nur noch die anspricht. Ich habe das noch nicht selbst ausprobiert, aber für mich klingt das recht logisch.
|
AW: AppendRecord-Parameter zusammensetzen
Danke für die Hinweise, ich werde es nachher ausprobieren.
Das mit den lokalen TField-Variablen spar ich mir, da es nur eine Handvoll Durchläufe obiger Schleife geben wird. Aber ich notier mir das mal, klingt interessant. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 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