Autor |
Beitrag |
mirom
      
Beiträge: 56
Win2000, Win XP
|
Verfasst: Do 21.10.04 15:53
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
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: 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); |
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: Do 21.10.04 19:56
hallo mirom!
kann es sein, dass du den cursor auf den client und nicht auf den server gesetzt hast?
aus deinen paar zeilen geht das leider nicht hervor.
lies mal --> hier
oder --> hier nach.
mfg, stefan
//edit: smiegel war mal wieder schneller! 
|
|
mirom 
      
Beiträge: 56
Win2000, Win XP
|
Verfasst: Fr 22.10.04 14:21
Hallo!
leider nicht. Hier is Gesamtcode:
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
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: 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 
      
Beiträge: 56
Win2000, Win XP
|
Verfasst: 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
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: 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 
      
Beiträge: 56
Win2000, Win XP
|
Verfasst: 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
|
|
|