PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Keine Fehlermeldungen bei CursorLocation = clUseServer


Hermann Schmidt
16.03.2000, 18:13
Hallo,
ich verwende Delphi5 Enterpr., ADO und MSSQL-7.
Wenn ich clUseClient verwende bekomme ich beim Auftreten von
Fehlern vollständige Fehlermeldungen. Benutze ich jedoch clUseServer,
erscheint immer nur 'error occured' - egal, was für ein Fehler auftritt.
Ich bin auf einen serverseitigen Cursor angewiesen, da in den Tabellen
Trigger arbeiten. Mit einem clientseitigen Cursor und Triggern bekomme
ich immer die Meldung, dass der Datensatz von jemand anders geändert
wurde. Das passiert bei einem serverseitigen Cursor nicht.
Leider bekomme ich eben bei dem serverseitigen Cursor keine Fehlermeldungen.
Vielleicht kann mir einer von Euch helfen.
Mit freundlichen Grüssen
Hermann Schmidt

Andreas Kosch
17.03.2000, 08:08
Hallo,

in der Tat verhält sich ADO in Bezug auf Exceptions und Fehlermeldungen völlig anders an die BDE. Der Grundgedanke von ADO geht davon aus, das der Entwickler immer selbst nachschauen muss, welcher Fehler aufgetreten ist. Nur unter bestimmten Umständen (es gibt nur 1 Fehlerobjekt) wird der Fehlertext direkt ausgegeben.

Das <b>Connection</b>-Objekt von ADO hat einen Verweis auf die <b>Errors</b>-Kollektion. Und in dieser Kollektion wird eine Liste der aktuellen <b>Error</b>-Objektinstanzen gespeichert. Im <b>MDAC-SDK</b> liest sich das folgendermassen:

<i>Any operation involving ADO objects can generate one or more provider errors. As each error occurs, one or more Error objects can be placed in the Errors collection of the Connection object. When another ADO operation generates an error, the Errors collection is cleared, and the new set of Error objects can be placed in the Errors collection.

Each Error object represents a specific provider error, not an ADO error. ADO errors are exposed to the run-time exception-handling mechanism. For example, in Microsoft Visual Basic, the occurrence of an ADO-specific error will trigger an onError event and appear in the Err object.

ADO operations that don't generate an error have no effect on the Errors collection. Use the Clear method to manually clear the Errors collection.

The set of Error objects in the Errors collection describes all errors that occurred in response to a single statement. Enumerating the specific errors in the Errors collection enables your error-handling routines to more precisely determine the cause and origin of an error, and take appropriate steps to recover.

Some properties and methods return warnings that appear as Error objects in the Errors collection but do not halt a program's execution. Before you call the Resync, UpdateBatch, or CancelBatch methods on a Recordset object, the Open method on a Connection object, or set the Filter property on a Recordset object, call the Clear method on the Errors collection. That way you can read the Count property of the Errors collection to test for returned warnings.
</i>

Das Error-Objekt stellt über die Eigenschaften <b>Description</b>, <b>Number</b>, <b>Source</b>, <b>SQLState</b> und <b>NativeError</b> zusätzliche Informationen bereit.

Delphi stellt über <b>TADOConnection.Errors</b> einen Verweis auf die Errors-Kollektion zur Verfügung. In der Hilfe ist allerdings dazu ein sehr wichtiger Satz zu finden: "<i>Verwenden Sie diese Eigenschaft nur, wenn Sie mit ADO-Objekten und speziell mit der ADO-Fehlerkollektion vertraut sind. Die entsprechenden Informationen finden Sie in der Hilfe zum Microsoft SDK.</i>&quot

Hermann Schmidt
22.03.2000, 08:54
Neven MacEwan schreibt dazu in borland.public.delphi.database.ado:
<p>
<I>Are you using the OLE DB Provider for MS SQL - this is a bug fixed in MDAC 2.5</I>
</p>
Hat zufällig jemand Erfahrungen mit MDAC 2.5 und kann diese Meldung bestätigen ?
Herman

Hermann Schmidt
22.03.2000, 09:50
Habe es gerade selbst einmal probiert mit MDAC 2.5:<br>
Tatsächlich bekommt man jetzt Fehlermeldungen auch mit serverseitigem
Cursor.<br>
Das Thema hat sich somit erledigt.
Herman