Announcement

Collapse
No announcement yet.

Recordset.Save... funktioniert nicht mehr in D6

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Recordset.Save... funktioniert nicht mehr in D6

    Ich benutze seit längeren die ADO Version 2.6 mit D5 & D6 jedoch ist mir folgendes aufgefallen.

    Nach dem Importieren der ActiveX data Objects Version 2.6 gab es die
    recordset methode Save nicht mehr.

    Importiert mann diese Library mit D5 dann funktioniert es auch in D6

    Die Dateigrösse ist erheblich grösser bei D6!

    gibt es da einen Grund? Wieso der unterschied?

    Als beispiel folgende funktion.

    <PRE>
    uses ADODB_TLB,MSXML2_TLB;
    ...
    function TMyWebservice.GetData: Variant;
    var
    con : ADODB_TLB.Connection;
    cmd : ADODB_TLB.Command;
    rs : ADODB_TLB.Recordset;
    ra : oleVariant;
    xml : MSXML2_TLB.IXMLDOMDocument;
    begin

    con := CoConnection.Create;
    cmd := CoCommand.Create;
    try
    con.Open('FILE NAME=c:\CONN.UDL', '', '', 0);
    cmd.Set_ActiveConnection(con);
    cmd.CommandType := adCmdText;
    cmd.CommandText := 'SELECT * FROM USERS';
    rs := cmd.Execute(ra, emptyParam, 0);
    if ra <> 0 then
    begin
    xml := CoDOMDocument.Create;
    //rs.Save(xml, adPersistXML); // Dieses funktioniert in nicht mit der in D6 Importierten ADODB_TLB
    Result := xml.xml; //Aber schon mit einer ADODB_TLB die mit D5 importiert wurde
    xml := nil;
    end;
    except on E: Exception do
    begin
    Result := EmptyStr;
    end;
    end;
    end;
    </PRE>

  • #2
    Hallo Sven,<br>
    nachdem was ich ich hier schon über D6 und improtierte Typbibliotheken gelesen haben wundert mich das gar nicht.<br>
    Einer der größten Bescheidwisser hier im Forum zu den Themen ADO / COM hat empfohlen die Typbibliothek mit D5 zu importieren<br>
    und anschließend unter D6 zu verwenden.<br>
    Wegen dieser und vieler ander Bugs in D6 arbeiten wir immer noch mit D5 und planen in Zukunft C# zu einzusetzen.<br>
    Leider gestalltet sich das Einarbeiten in C# und .NET neben der Arbeit z.Z. als sehr schleppend.<br>
    Jens Schumann<br&gt

    Comment


    • #3
      Danke für die Info

      Comment


      • #4
        Hallo Sven,

        obwohl Jens im Prinzip Recht hat, sollte der Zugriff auch mit Delphi 6 möglich sein, wenn nach dem Interface <b>gesucht</b> wird, das die Methode Save bereitstellt. Anstelle von <b>Recordset</b> könnte das zum Beispiel auch <b>_Recordset</b> oder <b>Recordset15</b> lauten, da Delphi 6 beim Import einer Typbibliothek (nicht immer, aber immer öfter) die Namen nach Lust und Laune vergibt und dabei auch die Vererbungen gründlich durchmischt. In meiner mit Delphi 6 importierten Version ist die Methode Save im Interface _Recordset zu finden.

        P.S: Wurde das UpdatePack#1 für Delphi 6 schon eingespielt

        Comment


        • #5
          Herr Kosch - Danke für die Info. SP1 ist installiert. Durch explicitite umwandlung in _Recordset is die Methode "Save" auch vorhanden.
          Welches Interface ist ist jetzt das richtige für 2.6? Mir ist scheinen die Interfaces mit "_" davor, die Richtigen? Ich denke das hatten wir auch in D4? D5 Ohne, D6 mit. Wie gehts weiter...?!?!
          <B>FETT</B> SIND Änderungen
          <PRE>
          function TMyWebservice.GetData: Variant;
          var
          <B> con : ADODB_TLB._Connection;
          cmd : ADODB_TLB._Command;
          rs : ADODB_TLB._Recordset;</B>
          ra : oleVariant;
          xml : MSXML2_TLB.IXMLDOMDocument;
          begin

          <B>con :=CoConnection.Create as _Connection;
          cmd := CoCommand.Create as _Command;</B>

          try
          con.Open('FILE NAME=c:\CONN.UDL', '', '', 0);
          cmd.Set_ActiveConnection(con);
          cmd.CommandType := adCmdText;
          cmd.CommandText := 'SELECT * FROM USERS';
          <B> rs:=cmd.Execute(ra, emptyParam, 0) as _Recordset; //Explicite Umwandlung in _Recordset</B>

          if ra <> 0 then
          begin
          xml := CoDOMDocument.Create;
          rs.Save(xml, adPersistXML);
          Result := xml.xml;
          xml := nil;
          end;
          except on E: Exception do
          begin
          Result := EmptyStr;
          end;
          end;
          end;
          </PRE>

          Grüsse aus Salzbur

          Comment


          • #6
            Hallo,

            für COM sind diese Bezeichnernamen nur Schall und Rauch. Wichtig sind die IID (Interface ID als GUID), und die stimmen auch bei Delphi 6 :-

            Comment

            Working...
            X