Announcement

Collapse
No announcement yet.

XP und COM

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

  • XP und COM

    Hi!<br>
    Unter Windows 2000 lief dieser Teil des Projekts absolut fehlerfrei!<br>
    Neuer Rechner mit XP und nix geht mehr. Hab ich was vergessen einzurichten....?<br>
    Code:<br>
    var<br>
    aConnection : _Connection;<br>
    aRS : Recordset;<br>
    sSQL : String;<br>
    begin<br>
    showmessage ( 'OK bis hier 0!' );<br>
    //Connection auf die DB setzen<br>
    OLECheck ( ObjectContext.CreateInstance(CLASS_Connection,<br>
    _Connection, aConnection ) );<br>
    showmessage ( 'OK bis hier 1!' );<br>
    aConnection.CursorLocation := adUseClient;<br>
    showmessage ( 'OK bis hier 2!' );<br>
    aConnection.open ( swConnString, '', '', 0 );<br>
    showmessage ( 'OK bis hier 3!' );<br>
    <br>
    Der Server scheint die Zeile OLECheck nicht zu verarbeiten.<br>
    Die letzte Meldung ist 'OK bis hier 0!' dann ist Schluß.<br>
    Testfunktionen ohne Datenbankzugriff funktionieren einwandfrei.<br>
    Was tun?!?<br>
    BYE BERND<br>

  • #2
    Hallo,

    es gibt gleich 2 potentielle Problemstellen: <br>
    1. MDAC 2.7 <br>
    2. ObjectContext.CreateInstance

    Mit Windows XP ist mit MDAC 2.7 eine neuere MDAC/ADO-Version als bei Windows 2000 (MDAC 2.5/2.51). Eventuell erwartet der im ConnectionString eingebundene OLE DB Provider nun eine andere Syntax? Ich selbst hatte beim Wechsel von Windows 2000 zu Windows XP keine Probleme. <br>
    Um den direkten Feedback von OLE DB zu erhalten, würde ich die Unit <i>ADOInt</i> (oder die importierte Typbibliothek ADODB_TLB) einbinden und dort die Objektinstanz des Connection-Objekts über <i>CoConnection.Create</i> anfordern:
    <pre>
    resourcestring
    cCS = 'Provider=SQLOLEDB.1;Integrated Security=SSPI;' +
    'Persist Security Info=False;' +
    'Initial Catalog=tempdb;Data Source=(local)';
    var
    aCon : _Connection;
    begin
    aCon := CoConnection.Create;
    aCon.CursorLocation := adUseClient;
    aCon.Open(cCS, '', '', adConnectUnspecified);
    ShowMessage('Fertig.');
    aCon.Close;
    end;
    </pre>
    Da die von Delphi beim Import der Typbibliothek angelegten CoClass-Hilfsfunktionen implizit eine Interface-Typumwandlung über AS vornehmen, macht sich jeder Fehler auch so bemerkbar:
    <pre>
    class function CoConnection.Create: _Connection;
    begin
    Result := CreateComObject(CLASS_Connection) as _Connection;
    end;
    </pre>
    Die Anforderung einer COM-Objektinstanz über <i>ObjectContext.CreateInstance</i> stammt aus dem uralten MTS, wobei dieser Umweg ab COM+ (Windows 2000) überflüssig war. Eventuell hat Windows XP diesen überflüssigen Weg komplett abgeräumt (ich selbst habe ObjectContext.CreateInstance seit Windows 2000 nicht mehr verwendet). Da Microsoft die MTS-Funktionalität ab Windows 2000 vollständig in das Betriebssystem integriert hat, greifen die neuen COM+ Objekte ganz normal auf externe COM-Objekte (wie ADO) zu:
    <pre>
    function TDE2001SrvThinObj.CustomerRS: _Recordset;
    var
    aConnection : _Connection;
    aRecordSet : _RecordSet;
    begin
    try
    aConnection := CoConnection.Create as _Connection;
    aConnection.CursorLocation := adUseClient;
    aConnection.Open(FConnStr, '', '', adOpenForwardOnly);
    try
    aRecordSet := CoRecordSet.Create as _RecordSet;
    try
    aRecordSet.CursorLocation := adUseClient;
    aRecordSet.Open('select CustID, CustName from Customer',
    aConnection, adOpenStatic,
    adLockBatchOptimistic, 0);
    Result := aRecordSet;
    aRecordSet._Set_ActiveConnection(nil);
    finally
    aRecordSet := nil;
    end;
    finally
    aConnection.Close;
    end;
    SetComplete;
    except
    SetAbort;
    raise
    end;
    end;
    </pre>

    &#10

    Comment


    • #3
      Hallo!<br>
      Sorry wegen der späten aber umso herzlicheren Danksagung.<br>
      Der Connection String ist (zumindest in meinem Fall) identisch.<br>
      ObjectContext.CreateInstance wird tatsächlich nicht mehr unterstützt/oder funktioniert einfach nicht korrekt.<br>
      Umgeschrieben schon rennts wieder!<br>
      Nochmal DANKE!!!!<br>

      BYE BERN

      Comment

      Working...
      X