Autor Beitrag
mirom
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 56

Win2000, Win XP

BeitragVerfasst: 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:

ausblenden 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 user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Do 21.10.04 19:52 
Hallo,

bringt folgendes etwas?
ausblenden Delphi-Quelltext
1:
2:
3:
  aRS:=CoRecordset.Create;  
  aRS.CursorLocation:=adUseServer; // sollte man bei Access-DBs generell machen
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: 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! 8)
mirom Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 56

Win2000, Win XP

BeitragVerfasst: Fr 22.10.04 14:21 
Hallo!

leider nicht. Hier is Gesamtcode:

ausblenden volle Höhe 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 := '';   // dummy
    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 user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 56

Win2000, Win XP

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 56

Win2000, Win XP

BeitragVerfasst: 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