Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler: "Ungültiger Varianttyp" - nur unter Windows 2000 (https://www.delphipraxis.net/88752-fehler-ungueltiger-varianttyp-nur-unter-windows-2000-a.html)

shmia 21. Mär 2007 09:04

Re: Fehler: "Ungültiger Varianttyp" - nur unter Wi
 
Jetzt aber: :???:
Delphi-Quellcode:
procedure PasteCurrent(DS: TDataset);
var z : Integer;
begin
  DS.Append;
  for z:=0 to VarArrayHighBound(aField,1) do
  begin
    case DS.fields[z].DataType of
      ftString, ftFixedChar, ftWideString:
        if varType(aField[z]) = varNull then
          DS.fields[z].Clear
        else
          DS.fields[z].AsString := aField[z];
    else
      DS.fields[z].Value:=aField[z];
    end;
  end;
  DS.Post;
end;

uwi1961 21. Mär 2007 09:10

Re: Fehler: "Ungültiger Varianttyp" - nur unter Wi
 
:thumb: JA so passt es wunderbar .... besten Dank

inzwischen hatte ich auch diese Lösung gefunden:
Delphi-Quellcode:
procedure PasteCurrent(DS: TDataset);
var z : Integer;
begin
  DS.Append;
  for z:=0 to VarArrayHighBound(aField,1) do
  begin
    case DS.Fields[z].DataType of ftString, ftFixedChar, ftWideString:
      if aField[z]<>NULL then DS.Fields[z].AsString := aField[z];
    else // kein Stringfeld
      DS.Fields[z].Value:=aField[z];
    end; //case
  end; // Schleife
  DS.Post;
end;
klappt auch...

Gruß Uwe

Sidorion 21. Mär 2007 10:24

Re: Fehler: "Ungültiger Varianttyp" - nur unter Wi
 
Das Problem ist durch einen Fehler im Delphi-Compiler erklärbar. Duch den Zugriff auf aField[z] wird eine Variantenprüfung durchgeführt. Bei dieser Prüfung wird zuerst geprüft, ob die Variante ein Array ist. Diese Prüfung ist dummerweise bei varString auch wahr. Das heisst, wenn in deinem array aField[z] ein String drinsteht, versucht er, den Variant aField[z] als array interpretiert zuzuweisen und diesen Variantentyp will das dataset natürlich nicht. Interessanterweise ist dieses Phänomen betriebsystemabhängig, und zwar nicht zur compile- sondern zur Laufzeit.
Ich hatte ein ähnliches Problem mit einem Variantrenarray als Übergabeparameter und weiteren Defaultparametern. Lies sich unter NT4 problemlos ausführen, unter win200 krachte es, egal, auf welchem System die Quelle compiliert wurde.

uwi1961 21. Mär 2007 13:23

Re: Fehler: "Ungültiger Varianttyp" - nur unter Wi
 
Zitat:

Das Problem ist durch einen Fehler im Delphi-Compiler erklärbar. Duch den Zugriff auf aField[z] wird eine Variantenprüfung durchgeführt. Bei dieser Prüfung wird zuerst geprüft, ob die Variante ein Array ist. Diese Prüfung ist dummerweise bei varString auch wahr. Das heisst, wenn in deinem array aField[z] ein String drinsteht, versucht er, den Variant aField[z] als array interpretiert zuzuweisen und diesen Variantentyp will das dataset natürlich nicht. Interessanterweise ist dieses Phänomen betriebsystemabhängig, und zwar nicht zur compile- sondern zur Laufzeit.
Ich hatte ein ähnliches Problem mit einem Variantrenarray als Übergabeparameter und weiteren Defaultparametern. Lies sich unter NT4 problemlos ausführen, unter win200 krachte es, egal, auf welchem System die Quelle compiliert wurde.
Danke Sidorion,

jetzt kann ich mir dieses Phänomen wenigstens halbwegs erklären...


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:18 Uhr.
Seite 2 von 2     12   

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