Announcement

Collapse
No announcement yet.

Delhi7: aRecordSet._Set_ActiveConnection(nil) -> Inkompatible Typen: 'OleVariant' und 'Pointer'

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

  • Delhi7: aRecordSet._Set_ActiveConnection(nil) -> Inkompatible Typen: 'OleVariant' und 'Pointer'

    Hallo,

    Ich möchte per DCOM ein _Recordset vom Server zum Client übertragen. Ich habe mich dabei an folgendes Beispiel gehalten:<br>
    <PRE>
    function TADOServer.ReturnRS: OleVariant;
    var
    adoCon1: _Connection;
    adoRs1: _Recordset;
    begin
    adoCon1 := CoConnection.Create;
    adoRs1 := CoRecordset.Create;
    adoCon1.CursorLocation := adUseClient;
    adoCon1.Open(cConnStr, '', '', 0);
    adoRs1.Open('SELECT * FROM [Meine Tabelle]', adoCon1, adOpenKeyset,
    adLockBatchOptimistic, 0);
    // vollständiges (lebendes) ADO-Recordset zurückliefern
    Result := adoRs1;
    adoRs1.Set_ActiveConnection(nil);
    adoCon1.Close;
    end;
    </PRE>
    <p>
    Ich weiss, das dieses Beispiel unter D5 funktioniert hat, aber unter D7 bekomme ich schon beim Compilieren die Fehlermeldung:<br>
    Inkompatible Typen: 'OleVariant' und 'Pointer'

    Was muss ich statt nil schreiben, damit es funktioniert?

  • #2
    Hallo,

    &gt; Was muss ich statt nil schreiben, damit es funktioniert?

    das hängt davon ab, wie die im Programm momentan im Kontext sichtbare Typbibliotheks-Unit für ADO aussieht. In den folgenden Beispiel ist die Delphi-Unit <b>ADOInt</b> die als Letzte sichtbare Unit, so dass der Aufruf von Delphi 7 kompiliert wird:

    <pre>
    <b>uses</b> ADOInt;
    <br>
    <b>function</b> TForm1.ReturnRS: OleVariant;
    <b>var</b>
    adoCon1: _Connection;
    adoRs1: _Recordset;
    <b>begin</b>
    adoCon1 := CoConnection.Create;
    adoRs1 := CoRecordset.Create;
    adoCon1.CursorLocation := adUseClient;
    adoCon1.Open(<font color="#9933CC">'xyz'</font>, <font color="#9933CC">''</font>, <font color="#9933CC">''</font>, 0);
    adoRs1.Open(<font color="#9933CC">'SELECT * FROM [Meine Tabelle]'</font>, adoCon1, adOpenKeyset,
    adLockBatchOptimistic, 0);
    <font color="#003399"><i>// vollständiges (lebendes) ADO-Recordset zurückliefern</i></font>
    Result := adoRs1;
    adoRs1.Set_ActiveConnection(<b>nil</b>);
    adoCon1.Close;
    <b>end</b>;
    <br>
    <b>procedure</b> TForm1.Button1Click(Sender: TObject);
    <b>var</b>
    aRS: _Recordset;
    <b>begin</b>
    aRS := IDispatch(ReturnRS) <b>AS</b> _RecordSet;
    <b>end</b>;
    </pre&gt

    Comment


    • #3
      Danke! Ich hatte unnötigerweise die Typbibliothek fürs MS ADO Recordset 2.8 importiert. Ohne klappt's jetzt :-

      Comment


      • #4
        @E812,

        Du solltest m.E. immer die kleinstmögliche Version verwenden, die Du benötigst. I.d.R. wird dir Version 2.5 reichen. Damit sparst Du dir auf den Großteil der Rechner eine Installation der neueren ADO-Version

        Comment

        Working...
        X