tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
409
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    IggeB IggeB ist offline Rookie
    Registriert seit
    May 2008
    Beiträge
    7
    Hallo zusammen,
    mit Hilfe der Java-COM Brücke Jacob möchte ich aus einer Datenbank Daten auslesen.
    Der Verbindungsaufbau klappt gut, allerdings habe ich noch Probleme beim Auslesen der Daten.
    Mit der Methode ReadTags() der zugehörigen DLL möchte ich die Daten auf ein Variant-Objekt speichern:

    Variant vResultValue = Dispatch.call( FuelWorkAuto, "ReadTags" );

    Der Methodenaufruf funktioniert ohne Fehlermeldung und in vResultValue steht auch was drin. (isNull() liefert false)
    Nun mein Problem: Wie komme ich an die Daten dieses Variant-Objektes. Laut Benutzerdokumentation muss es sich bei den Daten um ein mehrdimensionales Array handeln. Allerdings ist mir unklar, wie ich an dieses Array rankommen soll.
    Habe schon versucht mit SafeArray an die Daten zu gelangen, was allerdngs nicht geklappt hat. Außerdem habe ich versucht mit EnumVariant weiterzukommen. Dort klappt allerdings die Initialisierung

    new EnumVariant(vResultValue.toDispatch())

    nicht. Würde mich über eure Hilfe wirklich sehr freuen!

    MfG Igge
     

  2. #2
    Avatar von mccae
    mccae mccae ist offline Senfdazugeber
    Registriert seit
    Dec 2007
    Ort
    Wien
    Beiträge
    226
    Hallo!

    Bist du dir sicher, dass wirklich ein Array, und nicht wieder ein Dispatch zurückgegeben wird, dessen Methoden du zum Zugriff auf die Daten benutzen musst?

    Denn du erwähnst nicht worum es eigentlich geht, und wie der Ausschnitt des User-docs lautet.

    Aus Erfahrung kann ich sagen, dass Jacob die ein oder andere Macke hat.
    Das Projekt wurde ja schon ewig nicht mehr aktualisiert.

    Vielleicht wärst du mit einer anderen Lib wie Com4J besser bedient.

    mfg
    Martin
    Geändert von mccae (24.03.10 um 23:27 Uhr)
     

  3. #3
    IggeB IggeB ist offline Rookie
    Registriert seit
    May 2008
    Beiträge
    7
    Hi Martin,
    danke für die Antwort.

    Die Dokumentation der verwendeten Library ist leider nicht sehr umfangreich. Es werden lediglich die verfügbaren Methoden aufgeführt. (ua. createConnection(), readTags(), writeTags(), etc...). Die von mir verwendete Methode readTags(double begin, double end) gibt ein Variant-Objekt zurück. Ich gehe davon aus, dass die Daten, die in der Zeit von begin bis end gemessen wurden jetzt in diesem Objekt drin sind. Oder hab ich da was falsch verstanden und muss auf andere Weise an die Daten gelangen? In der Dokumentation ist ein Beispiel in Sprache VisualBasic Scirpt (VBS) beigefügt. Dort wird der Funktionsaufruf wie folgt gemacht:

    Dim vTagResultName = fwa.ReadTags(TimeValue(begin),TimeValue(end))

    Anschliessend wird überprüft ob vTagResultName ein Array ist und die Daten an einen String gehangen:

    If (IsArray(vTagResultName)) Then
    For i = LBound(vTagResultName,1) To UBound(vTagResultName,1)
    OutputString = OutputString & "1." & vTagResultName(i,0) & "2." & vTagResultName(i,1) & "3." & vTagResultName(i,2) & vbNewLine
    Next
    End If

    Meine Aufgabe ist es dieses Programm in Java zu implementieren. Und da bin ich jetzt bei dem Problem wie ich an die Daten des Variant-Objektes kommen soll.
    Habe zu dieser Klasse keine Funktionen wie isArray() oder in dieser Art gefunden.
    Würde mich über eure Hilfe freuen.

    Gruß Igge
     

  4. #4
    Avatar von mccae
    mccae mccae ist offline Senfdazugeber
    Registriert seit
    Dec 2007
    Ort
    Wien
    Beiträge
    226
    Bei Arrays und Jacob ist die normale Vorgehensweise wie folgt:

    Zuerst wird überprüft ob es sich beim Variant um ein Array handelt:

    Code java:
    1
    
    if(variantObject.getvt() == Variant.VariantArray)

    Danach holt man sich (vor allem wenn die Arrayelemente nicht vom selben Typ sind) ein Variant array.

    Doch zuvor muss man aus dem zurückgegebenen Variant ein SafeArray generieren, welches die WrapperKlasse für jedes zurückgegebene Array darstellt:

    Code java:
    1
    
    Variant [] data = variantObject.toSafeArray().toVariantArray();

    Das generierte Array sollte dann dem im Userdoc beschriebenen Array gleichen.

    Sollten sich alle Elemente des Arrays vom Typ her gleichen, kannst du, wenn du zum Beispiel weißt, dass nur Strings enthalten sind, direkt ein String Array erstellen indem du die toStringArray() Methode aufrufst.

    mfg
    Martin
    Geändert von mccae (25.03.10 um 19:56 Uhr)
     

  5. #5
    IggeB IggeB ist offline Rookie
    Registriert seit
    May 2008
    Beiträge
    7
    Vielen Dank!
    Das hilft mir schon mal weiter. Ich werde es jetzt mal ausprobieren.

    MfG
    Igge
     

Ähnliche Themen

  1. Qualität eines Objektes ändern?
    Von stereosumme im Forum Autodesk Maya (ehemals Alias)
    Antworten: 0
    Letzter Beitrag: 12.09.09, 13:35
  2. Drehpunkt eines objektes
    Von gp111 im Forum 3D Studio Max
    Antworten: 1
    Letzter Beitrag: 16.12.06, 22:18
  3. Winkelbeschrenkung eines Objektes
    Von Moritz M im Forum Cinema 4D
    Antworten: 3
    Letzter Beitrag: 05.10.06, 13:58
  4. Leuchtspur eines Objektes
    Von Firestriker im Forum Cinema 4D
    Antworten: 1
    Letzter Beitrag: 01.10.03, 17:20
  5. Antworten: 2
    Letzter Beitrag: 03.03.02, 17:45