Ich weiß nichts über Delphi 2007, aber ich habe dasselbe mit Delphi 7 und Oracle 8 gemacht.
Folgendes habe ich getan:
- Setzen Sie TAdoDataSet.CursorLocation laut Abfrage:
- clUseClient wenn die Abfrage Datensätze für die GUI abruft und die Abfrage relativ "einfach" ist - keine Gruppierung oder Summe
- clUseServer wenn die Abfrage eine Art Aggregation hat (Summe, Gruppierung, Zählung)
- Setzen Sie TAdoDataSet.CursorType laut Abfrage:
- ctForwardOnly für Berichte, bei denen Sie nicht durch den Datensatz zurückscrollen müssen - funktioniert nur mit clUseServer
- ctStatic für GUI. Dies ist der einzige Modus, der mit clUseClient funktioniert
- Setzen Sie TAdoDataSet.LockType laut Abfrage:
- ltReadOnly für jeden Datensatz, der nicht zur Bearbeitung verwendet wird (Raster, Berichte)
- ltOptimistisch wenn Datensätze sofort nach der Änderung in die Datenbank geschrieben werden (z. B. Benutzer bearbeitet Daten auf Formular)
- ltBatchOptimistisch wenn Sie eine große Anzahl von Datensätzen ändern. Dies ist für Situationen, in denen Sie eine Anzahl von Datensätzen abrufen, diese dann verarbeiten und dann Aktualisierungen stapelweise an die Datenbank senden. Dies funktioniert am besten in Kombination mit clUseClient und ctStatic.
- Meiner Erfahrung nach hat der Microsoft OLEDB-Anbieter für Oracle besser funktioniert als der Oracle OleDb-Anbieter. Das solltest du testen.
Bearbeiten: Überprüfen Sie Fabricios Kommentar zu möglichen Blob-Problemen. - Ersetzen Sie TAdoQUEry mit TAdoDataSet . TAdoQuery wurde für die Konvertierung von Apps von BDE nach ADO erstellt, aber die Empfehlung von Borland/Codegear war die Verwendung von TAdoDataSet
- Überprüfen Sie die Oracle-Verbindungszeichenfolge erneut, um sicherzustellen, dass Sie keine Netzwerklatenz haben. Wie lange dauert die Verbindung zu Oracle? Wie lange dauert TnsPing?