Thema: Delphi von XML in Tabelle

Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#25

Re: von XML in Tabelle

  Alt 14. Jul 2003, 15:03
Hätte ich fast vergessen. Quasi als Präventiv(vor)schlag (bevor die Frage kommt: wie kann man das prüfen?) hier eine Idee -

Mangels Rechner ohne XML weiß ich nicht, wie so ein Programm reagiert. Logisch, es wird nicht funktionieren ... Aber wahrscheinlich dürfte das System auch ein paar Fehler verursachen - vergleichbar mit dem statischen Laden von DLL-Funktionen, die es nicht gibt. Will sagen: die Fehler lassen sich evtl. nicht einfach unterbinden, weil die Typbibliothek keine dynamischen Zugriffe enthält. (Hab jedenfalls auf die Schnelle nichts davon gesehen.)

Um also ohne unschöne Fehlermeldungen auszukommen, empfehle ich die Prüfung in den Projektquelltext (*.dpr) zu schreiben und noch vor dem Erzeugen der Forms auszuführen:
Delphi-Quellcode:
uses
  { ... },
  Windows, Registry, ComObj, SysUtils;


function DoesXMLExist: boolean;
var
  reg : TRegistry;
  s : string;
begin
  Result := false;

  reg := TRegistry.Create(KEY_READ);
  if(reg <> nil) then
    with reg do try
      RootKey := HKEY_CLASSES_ROOT;

      if(OpenKey('CLSID\' + GuidToString(CLASS_DOMDocument40) +
        '\InProcServer32',false)) then
      try
        s := ReadString('');
        Result := (s <> '') and (fileexists(s));
      finally
        CloseKey;
      end;
    finally
      Free;
    end;
end;


begin
  if(not DoesXMLExist) then begin
    MessageBox(0,'Dieses Programm erfordert min. MS XML 4',nil,
      MB_ICONERROR or MB_OK);
    Halt;
  end;

  // hier würden dann die Forms erzeugt werden, usw.
  Application.Initialize;
  { ... }
end.
Der Wert CLASS_DOMDocument40 ergibt sich in diesem Fall aus sakuras Beispielcode. Die Funktion "CoDOMDocument40.Create" verweist auf eben diesen Wert, der eine GUID ({88D969C0-F192-11D4-A65F-0040963251E5}) enthält. Diese muss es als Registryschlüssel geben, und sie sollte den Pfad zur entsprechenden DLL (hier "msxml4.dll") enthalten. Dann dürfte alles in Butter sein.

Im Fehlerfall (sprich: XML ist nicht installiert, und das Interface existiert darum nicht) wird die Anwendung hoffentlich beendet, bevor irgendein Formular erzeugt wird und evtl. automatisch (OnCreate, usw.) auf XML-Dateien zuzugreifen versucht.
  Mit Zitat antworten Zitat