![]() |
Re: Arrays, dynamisch-->statisch
Deklarier dein dyn. Array als array of TVarRec, nicht als array of variant. Dann sollt's klappen (bei mir hat's funktioniert). Zum Typ TVarRec (System.pas):
Delphi-Quellcode:
TVarRec = record { do not pack this record; it is compiler-generated }
case Byte of vtInteger: (VInteger: Integer; VType: Byte); vtBoolean: (VBoolean: Boolean); vtChar: (VChar: Char); vtExtended: (VExtended: PExtended); vtString: (VString: PShortString); vtPointer: (VPointer: Pointer); vtPChar: (VPChar: PChar); vtObject: (VObject: TObject); vtClass: (VClass: TClass); vtWideChar: (VWideChar: WideChar); vtPWideChar: (VPWideChar: PWideChar); vtAnsiString: (VAnsiString: Pointer); vtCurrency: (VCurrency: PCurrency); vtVariant: (VVariant: PVariant); vtInterface: (VInterface: Pointer); vtWideString: (VWideString: Pointer); vtInt64: (VInt64: PInt64); end; |
Re: Arrays, dynamisch-->statisch
Das hört sich doch sehr interessant an.
Aber wie füllt man ein TVarRec? Bei einer einfach Zuweisung wie zuvor mit dem Variant Array klappt es nicht:
Delphi-Quellcode:
Wie geht das?
var
findarray : array of TVarRec; ... begin ... for i := 0 to temp do begin findarray[i] := lds.FieldValues[tempStrs.Strings[i]] end; ... end; T |
Re: Arrays, dynamisch-->statisch
in der unit variants gibts allerhand hilfsfunktionen/prozeduren die dir dabei helfen sollten
|
Re: Arrays, dynamisch-->statisch
[Fehler] sqlreplace.pas(895): Inkompatible Typen: 'TVarRec' und 'Variant'
Das kommt bei der normalen Zuweisung ... ich kriegs nicht hin :| T |
Re: Arrays, dynamisch-->statisch
Nächster Fehlschlag:
Mit folgender Änderung lässt es sich kompilieren und ausführen:
Delphi-Quellcode:
Aber dies verursacht zur Laufzeit eine Zugriffsverletzung und zwar schon bei Zuweisung des VType-Feldes. "Zugriffsverletzung bei Adresse blabla in Modul 'delDB.exe'. Schreiben von Adresse 000000004."
...
for i := 0 to temp do begin findArray[i].VType := vtVariant; test := lds.FieldValues[tempStrs.Strings[i]]; findarray[i].VVariant := @test; end; ... Wie funktioniert dieses TVarRec? Nirgends findet man Dokus oder Beispiele :( T |
Re: Arrays, dynamisch-->statisch
Du sagst, das FindKey ein statisches Array braucht? Dann hat es doch definitiv eine feste Länge. Heisst du musst dich daran halten, ob du willst oder nicht. Wie sieht denn die Paramater Beschreibung von FindKey aus?
|
Re: Arrays, dynamisch-->statisch
Angeblich : Variant == TVarData. Also solltest Du dein Array Of TVarData so füllen können:
Delphi-Quellcode:
for i := 0 to temp do
findArray[i] := TVarData (lds.FieldValues[tempStrs.Strings[i]]); |
Re: Arrays, dynamisch-->statisch
Delphi-Quellcode:
so klappte es bei mir.
var
Test : array [0..0] of TVarRec; extendedVal: Extended; begin extendedVal := StrToFloat(Edit1.text); Test[0].VExtended := @extendedVal; Label1.Caption := Format('%8.2f', [extended(Test[0].VExtended^)]); schau dir aber sicherheitshalber noch einmal die dokumentation zu tvarrec an. wenn du was neues weist poste mal bitte. interessiert mich auch das ganze. |
Re: Arrays, dynamisch-->statisch
Hallo Jungs,
ich hab das ganze hier nur mal so grob überflogen. Das mit den statischen Geschichten lässt sich für gewöhnlich mit folgendem Trick übergehen.
Delphi-Quellcode:
type TStaticArray = array[0..16000] of Integer; PStaticArray = ^TStaticArray; procedure Wasauchimmer; var pArr = PStaticArray; begin getMem(pArr, 100*SizeOf(Integer)); // Jetzt Array Füllen // Aufruf dann ungefähr so FindKey(pArr^, ..,..); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 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