Entwickler-Ecke
Datenbanken - Native ADO-Objekte : Index, Seek
mirom - Do 21.10.04 15:53
Titel: Native ADO-Objekte : Index, Seek
Hello Forum!
Ich verwende native ADO-Objekte für Datenbankzugriff, die mit DAO ( Jet Engine, Access 97 ) erstellt wurde. Möchte eine Tabelle öffnen, die auch Indexe hat. Es sieht so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| aCon := CoConnection.Create; aCon.Open('..MDB..', '', '', adConnectUnspecified);
aRS := CoRecordset.Create; aRS.Open('..table..', aCon, adOpenDynamic, adLockReadOnly, adCmdTable); if aRS.Supports(adIndex) then SendDebug('JA') else SendDebug('NEIN'); |
Trotz die Tabelle indexe hat bekomme ich immer NEIN als antwort.
Danke für die Hilfe
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt.
smiegel - Do 21.10.04 19:52
Hallo,
bringt folgendes etwas?
Delphi-Quelltext
1: 2: 3:
| aRS:=CoRecordset.Create; aRS.CursorLocation:=adUseServer; aRS.Open('..table..', aCon, adOpenDynamic, adLockReadOnly, adCmdTable); |
mirom - Fr 22.10.04 14:21
Hallo!
leider nicht. Hier is Gesamtcode:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| procedure TfrmPrva.Button4Click(Sender: TObject); var aCon : _Connection; aRS : _Recordset; txt: string; begin SendDebug('--------'); aCon := CoConnection.Create; aCon.Open(Format('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;',['D:\1\10.MDB']), '', '', adConnectUnspecified); aCon.CursorLocation:=adUseServer; try aRS := CoRecordset.Create; aRS.CursorLocation:=adUseServer; aRS.Open('TahimetrijskiPodaci', aCon, adOpenDynamic, adLockUnspecified, adCmdTableDirect);
if aRS.Supports(adIndex) then SendDebug('adIndex:JA') else SendDebug('adIndex:NEIN'); if aRS.Supports(adAddNew) then SendDebug('adAddNew:JA') else SendDebug('adAddNew:NEIN'); if aRS.Supports(adSeek) then SendDebug('adSeek:JA') else SendDebug('adSeek:NEIN'); if aRS.Supports(adUpdate) then SendDebug('adUpdate:JA') else SendDebug('adUpdate:NEIN'); if aRS.Supports(adMovePrevious) then SendDebug('adMovePrevious:JA') else SendDebug('adMovePrevious:NEIN');
try txt := ''; finally aRS.Close; aRS := nil; end; finally aCon.Close; aCon := nil; end;
ShowMessage('OK !');
end; |
Es wird geantwortet:
adMovePrevious:JA
adUpdate:NEIN
adSeek:NEIN
adAddNew:NEIN
adIndex:NEIN
Habe sämtliche Vorschläge ausprobiert aber immer noch nichts. Nochmals - Datenbank wurde mit Access 97 ( Jet Engine 3.5 ) erstellt. Irgendwo habe ich die Lösung mit DAO und Variants gefunden - ziemlich Primitiv aber funktioniert.
Mittelfristig möchte ich sowieso auf eine andere Datenbank umsteigen – was wäre zu empfehlen, das unter Windows und Linux läuft ?
Danke an alle,
Miro M.
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt.
grayfox - Sa 23.10.04 00:11
hallo miro!
schade, dass dir die tipps nicht weitergeholfen haben.
ich verstehe aber immer noch nicht, wozu du überprüfen willst, ob das recordset index und deine angeführten parameter überprüfen muss?
meine erfahrung ist, dass sobald ein index vorhanden ist, dieser auch verwendet wird.
nachdem der datenkatalog unter MsAccess 97 erstellt wurde und du dich über die JetEngine 4.0 verbindest, sollte dein connectionstring nicht so aussehen:
Delphi-Quelltext
1:
| Provider=Microsoft.Jet.OLEDB.4.0;Data Source=LW:\ordner\katalogname.mdb;Persist Security Info=False;Jet OLEDB:Engine Type=4 |
noch was: welche delphi-version und welchen MDAC verwendest du?
mfg, stefan
mirom - Sa 23.10.04 09:01
Hallo Stefan!
Ich verwende Delphi 7 personal und ADO 2.7. Wie finde ich MDAC Version heraus?
Falls ich im ConnectionString einen Provider=Microsoft.Jet.OLEDB.3.6 eingebe, bekomme ich Exception 'Provider nicht gefunden....' und da weiss ich nicht wie weiter. Noch etwas, bin erst vor etwa 3-4 Wochen von VB zum Delphi.
Danke für Geduld :)
Miro M.
grayfox - So 24.10.04 13:37
hallo míro!
ich denke, dass du eher MDAC 2.7 als ADO 2.7 hast ;)
ok, mit der personal-version bleibt dir nicht viel anderes übrig, als dich auf die nativen komponenten zu stürzen.
allerdings hab ich immer noch nicht verstanden, warum du den index und die methoden überprüfen willst, die der recordset mitbringt.
deine fehlermeldung 'Provider nicht gefunden....' deutet darauf hin, dass du den JetTreiber 3.6 nicht installiert hast. bleib lieber bei der version 4.0, füg aber im connectionstring den enginetyp 4 dazu.
mfg, stefan
mirom - Mo 25.10.04 08:06
Hallo Stefan!
Ich prüfe Index und Seek weil ich eine Tabelle für Schnellsuche indexiert habe. Falls .IsSupported=False, bekomme ich eine Fehlermeldung 'Zugriffsverletzung bei Adresse xxxx. Lesen von Adresse xxxx. Prozess wurde angehalten...'.
connection String habe ich geändert: 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Persist Security Info=False;Jet OLEDB:Engine Type=4' aber bleibt alles gleich.
Zum Testen, habe ich die Datenbank zu Access 2000 Konvertiert, dann bekomme ich:
adMovePrevious:JA
adUpdate:NEIN
adSeek:JA
adAddNew:NEIN
adIndex:JA
trotzdem, bei Indexangabe
aRS.Index := 'I_TP';
bricht ab.
Diese Datenbank wird von meine andere Applikation genutzt, die mit VB6 und DAO Jet 3.5 erstellt wurde. Dort läuft alles sehr gut und ohne Probleme. So wie es aussieht geht es um Kompatibilitätsproblem – DAO Jet 3.5 und ADO 4. Ich versuche noch im Internet was zu finden, sonst bleibe ich bei Variants.
Danke für deine Hilfsbereitschaft!
Miro
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!