AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

OleVariant auf Null prüfen?

Ein Thema von Angel4585 · begonnen am 21. Mai 2008 · letzter Beitrag vom 29. Okt 2010
Antwort Antwort
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

OleVariant auf Null prüfen?

  Alt 21. Mai 2008, 07:26
Hallo,

kann mir jemand sagen wir ich ein OleVariant auf Null prüfe?

Mit nil geht das nicht, inkompatible Typen

Danke schonmal

Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: OleVariant auf Null prüfen?

  Alt 21. Mai 2008, 07:38
Hab jetzt nicht nachgesehen, aber AFAIR geht das mit VarIsNull (ohne Gewähr).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: OleVariant auf Null prüfen?

  Alt 21. Mai 2008, 07:43
Hast du Variants eingebunden?
Markus Kinzler
  Mit Zitat antworten Zitat
PfWSkip

Registriert seit: 14. Okt 2009
Ort: Coruscant - Orange-Bezirk
6 Beiträge
 
Delphi 7 Professional
 
#4

AW: OleVariant auf Null prüfen?

  Alt 26. Okt 2010, 15:00
moin,

ich habe dasselbe problem seit 2st! einem olevariant wird etwas zugewiesen, von dem man nicht sicher sein kann, dass es existiert. also muss ich den olevariant darauf überprüfen, ob er nun gesetzt wurde oder nicht.

@mkinzler: die unit variants ist definitiv eingebunden!

probiert habe ich folgende möglichkeiten:

Delphi-Quellcode:
aNode := WebBrowser1.OleObject.Document.all.tags('table').Item(0);


if aNode <> nil then ...

if aNode <> null then ...

if Assigned(aNode) then ...

if string(aNode) <> 'then ...

if str(aNode) <> 'then ...

if VarToStr(aNode) <> 'then ...

tmpstr := aNode;
if tmpstr <> 'then ...

if not VarIsNull(aNode) then ...

if not VarIsEmpty(aNode) then ...

if VarType(aNode) = varDispatch then ...

...
ich bekomme entweder eine Zugriffsverletzung, Inkompatible Typen oder ungültige Typumwandlung...
warum nicht gleich alle 3 fehler gleichzeitig? die ganze familie beisammen... hab ja sonst nichts worüber man sich ärgern könnte...

Bin am verzweifeln, hoffe auf hilfe

Geändert von PfWSkip (26. Okt 2010 um 15:04 Uhr)
  Mit Zitat antworten Zitat
shmia

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

AW: OleVariant auf Null prüfen?

  Alt 26. Okt 2010, 16:09
Also um zu Prüfen ob ein Variant = Null ist verwendet man die Funktion VarIsNull() aus der Unit Variants.

Du hast aber noch ein ganz anderes Problem.
Du greifst ohne Prüfung auf Document zu:
aNode := WebBrowser1.OleObject.Document.all.tags('table').Item(0); Wenn kein Document geladen ist, dann ist Document = nil und die Zugriffsverletzung vorprogrammiert!
Daher:
Delphi-Quellcode:
var
  document : OleVariant;
begin
  if not Assigned(WebBrowser1.Document) then
    raise Exception.Create('kein HTML-Dokument geladen');
  document := WebBrowser1.Document;
  aNode := document.all.tags('table').Item(0);
Dann gehts aber noch weiter.
Du greifst mit Gottvertrauen auf ein Element zu, dass mit 'table' getagged ist.
Und wenn es das nicht gibt? Dann macht's auch "Platsch".
Delphi-Quellcode:
function VarIsDispatchObject(const v : Variant): Boolean; // Hilfsfunktion
var
   vt : Integer;
begin
   vt := VarType(v) and not varByRef;
   Result := (vt = varDispatch);
end;
.....

var
  document, table : OleVariant;
begin
  if not Assigned(WebBrowser1.Document) then
    raise Exception.Create('kein HTML-Dokument geladen');
  document := WebBrowser1.Document;
  table := document.all.tags('table');
  if not VarIsDispatchObject(table) then
    raise Exception.Create('kein "table"-Element im Dokument enthalten');
  aNode := table.Item[0];
Andreas
  Mit Zitat antworten Zitat
PfWSkip

Registriert seit: 14. Okt 2009
Ort: Coruscant - Orange-Bezirk
6 Beiträge
 
Delphi 7 Professional
 
#6

AW: OleVariant auf Null prüfen?

  Alt 27. Okt 2010, 09:17
*kopfklatsch*
Erstmal danke für die Antwort und die Mühe
Stimmt natürlich, ich muss die Objekte erstmal abfragen, bevor ich weitermache. Ich beschäftige mich mit dem TWebBrowser und dem ganzen Krams auch erst seit gestern.
Allerdings liefert deine Funktion "VarIsDispatchObject" immer True zurück, egal ob 'table' jetzt existiert oder nicht. Somit kann ich alle weiteren Abfragen innerhalb von document wieder knicken.

Das assign auf webbrowser1.document funktioniert ist ja klar, ist ja auch kein olevariant

Das Problem (olevariant = nil ?!?) besteht also weiterhin
  Mit Zitat antworten Zitat
shmia

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

AW: OleVariant auf Null prüfen?

  Alt 27. Okt 2010, 13:14
Zitat von PfWSkip;1058059Allerdings liefert deine Funktion "VarIsDispatchObject" [B:
immer[/B] True zurück, egal ob 'table' jetzt existiert oder nicht
Das ist aber nicht schlimm.
Anscheinend wird hier eine leere Collection vom Typ IHTMLElementCollection zurückgeliefert.
Anstatt zu prüfen, ob ein Objekt (genauer gesagt ein Dispatch-Interfacezeiger) zurückkommt,
prüft man ob die Collection leer ist:
Delphi-Quellcode:
table := document.all.tags('table');
if table.length = 0 then
  raise Exception.Create('kein "table"-Element im Dokument enthalten');
aNode := table.Item[0];
Andreas
  Mit Zitat antworten Zitat
PfWSkip

Registriert seit: 14. Okt 2009
Ort: Coruscant - Orange-Bezirk
6 Beiträge
 
Delphi 7 Professional
 
#8

AW: OleVariant auf Null prüfen?

  Alt 29. Okt 2010, 07:42
super danke!

mit der prüfung auf .length = 0 funktioniert das super
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:19 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