AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Fehler: "Ungültiger Varianttyp" - nur unter Windows 2000
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler: "Ungültiger Varianttyp" - nur unter Windows 2000

Ein Thema von uwi1961 · begonnen am 20. Mär 2007 · letzter Beitrag vom 21. Mär 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von uwi1961
uwi1961

Registriert seit: 27. Apr 2005
Ort: Jena
71 Beiträge
 
Delphi 7 Professional
 
#1

Fehler: "Ungültiger Varianttyp" - nur unter Window

  Alt 20. Mär 2007, 14:21
Beim Nutzen der Procedure PasteCurrent() (nach vorherigem Aufruf von CopyCurrent)
kommt unter Windows 2000 die Fehlermeldung "Ungültiger Varianttyp", unter Windows XP funktioniert
die Funktion...
Was ist falsch

Delphi-Quellcode:
var
  aField : Variant;
  Feldzahl : Integer;

implementation

procedure CopyCurrent();
var z : Integer;
begin
  DM.T_PC_copy_.Edit;
  Feldzahl := DM.T_PC_copy_.FieldCount;
  aField:= VarArrayCreate([0,Feldzahl-1],VarVariant);
  for z:=0 to (Feldzahl-1) do aField[z]:=DM.T_PC_copy_.fields[z].Value;
end;

procedure PasteCurrent();
var z : Integer;
begin
  DM.T_PC_deleted_.Append;
  for z:=0 to (Feldzahl-1) do
  begin
    // Feldinhalte einfügen //
    DM.T_PC_deleted_.fields[z].Value:=aField[z];
  end;
  DM.T_PC_deleted_.Post;
end;
Niemand interessiert sich dafür, wie etwas funktioniert, solange es funktioniert... (aus Matrix 2)
  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: Fehler: "Ungültiger Varianttyp" - nur unter Wi

  Alt 20. Mär 2007, 14:25
Und wir sollen uns jetzt zusammenreimen was DM, T_PC_copy_, usw alles für Datentypen sind.

Bitte etwas mehr infos was die Funktion machen soll, was die (globalen) Variablen bedeuten usw.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von uwi1961
uwi1961

Registriert seit: 27. Apr 2005
Ort: Jena
71 Beiträge
 
Delphi 7 Professional
 
#3

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

  Alt 20. Mär 2007, 14:30


Also:
DM ist das Datenmodul...
DM.T_PC_Copy soll die Datenbank sein, von der ein Datensatz kopiert werden soll
CopyCurrent() soll den Feldinhalt des aktuellen Datensatzes der Quelle in das VarArray kopieren,
mit PasteCurrent() soll das ganze dann in die Tabelle PC_deleted
(Als Sicherungskopie nach dem Löschen)

Gruß Uwe
Niemand interessiert sich dafür, wie etwas funktioniert, solange es funktioniert... (aus Matrix 2)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

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

  Alt 20. Mär 2007, 14:59
Deine Funktionen sind leider nicht generell einsetzbar, was auch das Testen erschwert bzw. unmöglich macht.
Das Dataset sollte auf jeden Fall als Parameter übergeben werden.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von uwi1961
uwi1961

Registriert seit: 27. Apr 2005
Ort: Jena
71 Beiträge
 
Delphi 7 Professional
 
#5

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

  Alt 20. Mär 2007, 15:18
Hallo shmia,

habs nun so:

Delphi-Quellcode:
procedure PasteCurrent(DS: TDataset);
var z : Integer;
begin
  DS.Append;
  for z:=0 to (Feldzahl-1) do
  begin
    DS.fields[z].Value:=aField[z];
  end;
  DS.Post;
end;
Aufruf mit:
Delphi-Quellcode:
      
        try
        PasteCurrent(DM.T_PC_deleted_);
      except
        on E:Exception do
        begin
          E.Message:='Kopierfehler (paste)...'+#13#10+E.Message;
          Raise;
        end;
      end;
Gleiches Ergebnis: unter w2k der genannte Fehler, unter wxp kein Problem...

Edit1: Hab das ganze mal in ein Testprojekt ausgelagert und komplett identische Tabellen genommen -> Ergebnis bleibt
P.S. mySQL5 - Zugriff über myDAC

Gruß Uwe
Niemand interessiert sich dafür, wie etwas funktioniert, solange es funktioniert... (aus Matrix 2)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

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

  Alt 20. Mär 2007, 15:57
Zitat von uwi1961:
Gleiches Ergebnis: unter w2k der genannte Fehler, unter wxp kein Problem...

Edit1: Hab das ganze mal in ein Testprojekt ausgelagert und komplett identische Tabellen genommen -> Ergebnis bleibt
P.S. mySQL5 - Zugriff über myDAC
Ein Testprojekt ist schon mal ein gute Idee.
Ich würde nun die Anzahl der Felder und besonders die Anzahl der Feldtypen reduzieren, um das Problemfeld aufzuspüren.
Ich würde die Funktion noch so optimieren:
Delphi-Quellcode:
procedure PasteCurrent(DS: TDataset);
var z : Integer;
begin
  DS.Append;
  for z:=0 to VarArrayHighBound(aField, 1)-1 do
  begin
    // folgene Case-Anweisung soll beim Debuggen helfen
    case z of
       8, 10, 11: ; // diese Felder werden nicht kopiert; sie bleiben NULL
    else
       DS.fields[z].Value:=aField[z];
    end;
  end;
  DS.Post;
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von uwi1961
uwi1961

Registriert seit: 27. Apr 2005
Ort: Jena
71 Beiträge
 
Delphi 7 Professional
 
#7

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

  Alt 20. Mär 2007, 16:04
Hallo Shmia,

das Problem tritt immer auf, wenn es sich um den Datentyp Char(..) oder VarChar(..) handelt und das Feld nicht leer ist ...
Was tun?

Gruß Uwe
Niemand interessiert sich dafür, wie etwas funktioniert, solange es funktioniert... (aus Matrix 2)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

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

  Alt 20. Mär 2007, 16:31
Zitat von uwi1961:
das Problem tritt immer auf, wenn es sich um den Datentyp Char(..) oder VarChar(..) handelt und das Feld nicht leer ist ...
AHA, das ist doch schon mal was.
Der Varianttyp varString (= $0100) ist ja nur innerhalb von Delphi zulässig.
Ausserhalb von Delphi, also müssen alle Strings innerhalb eines Variants den Typ
varOleStr (= $0008) haben.
Das ist der kleine Unterschied zwischen Variant und OleVariant.

Versuch mal das:
Delphi-Quellcode:
procedure PasteCurrent(DS: TDataset);
var z : Integer;
begin
  DS.Append;
  for z:=0 to VarArrayHighBound(aField, 1)-1 do
  begin
    case DS.fields[z].DataType of
       ftString, ftFixedChar, ftWideString:
         DS.fields[z].AsString := aField[z];
    else
       DS.fields[z].Value:=aField[z];
  end;
  DS.Post;
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von uwi1961
uwi1961

Registriert seit: 27. Apr 2005
Ort: Jena
71 Beiträge
 
Delphi 7 Professional
 
#9

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

  Alt 20. Mär 2007, 19:07
Hallo Shmia,

habe die Procedur leicht abgewandelt... so funktioniert es jetzt auch unter Windows 2000.
bei: for z:=0 to VarArrayHighBound(aField,1)-1 hat er das letzte Feld vergessen
einmal "end" hat gefehlt...

Nochmals vielen Dank und liebe Grüße
Uwe

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:
        DS.fields[z].AsString := aField[z];
    else
      DS.fields[z].Value:=aField[z];
    end;
  end;
  DS.Post;
end;
Niemand interessiert sich dafür, wie etwas funktioniert, solange es funktioniert... (aus Matrix 2)
  Mit Zitat antworten Zitat
Benutzerbild von uwi1961
uwi1961

Registriert seit: 27. Apr 2005
Ort: Jena
71 Beiträge
 
Delphi 7 Professional
 
#10

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

  Alt 21. Mär 2007, 08:35
Das wars doch noch nicht ganz...

Wenn in einem String-Feld noch nie was drin stand (NULL), dann kommt "Variante des Typs (NULL) konnte nicht in Typ (String) konvertiert werden."

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 DS.Fields[z].Value=NULL then DS.Fields[z].Value:='' <-- dann alle Stringfelder leer !
      DS.Fields[z].AsString := aField[z];
    else // kein Stringfeld
      DS.Fields[z].Value:=aField[z];
    end; //case
  end; // Schleife
  DS.Post;
end;
Was mach ich hier denn wieder falsch?
Niemand interessiert sich dafür, wie etwas funktioniert, solange es funktioniert... (aus Matrix 2)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:43 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