Announcement

Collapse
No announcement yet.

MS Data Access Components 2.1

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MS Data Access Components 2.1

    Hallo,

    vielleicht hat jemand ähnliche Probleme:

    Auf den Rechnern soll mit Delphi 4 (BDE 5.01) über ODBC auf Access 97 zugegriffen werden. Jetzt wurde obige MDAC 2.1 installiert und dabei ODBC 3.51 durch ODBC 4.00 ersetzt. Seitdem treten folgende Fehler auf: (1) Selects mit Subselects bringen nur noch leere Datenmengen, (2) bei TTabel mit String-Feldern erscheint z.B. der Fehler "64 erwartet, 128 gefunden". Im Database Explorer kann dann nachgeschaut werden, dass für alle String-Felder die doppelte Feldgröße angezeigt wird.

    Was paßt hier nicht zusammen? Kann mir jemand da weiterhelfen?

  • #2
    Durch die Installation von MDAC wurde die ODBC-DLL von Access-2000 eingespielt. Diese liefert für Feldgrößen bei Textfeldern die doppelte Feldlänge zurück.<br>
    Für genauere Infos über diesen Fehler findest Du evtl in diesem oder in den alten Foren mehr Infos.<br

    Kopiere einfach wieder die alte ODBC-DLL von Access-97 ins entsprechende Verzeichnis. Du kannst jedoch danach keine ODBC-Einträge auf eine Access-Datenbank mittels des ODBC-Managers mehr anlegen. Dazu müsstest Du die "alte" neue DLL wieder einspielen.

    Die zu kopierende Datei hat den Namen odbcjt32.dll

    Comment


    • #3
      <br>Hallo Bernhard!
      <br>
      <br>Danke für den guten Tip. Das funktioniert wirklich und ich kann jetzt erstmal normal weiterarbeiten. Das hat mir echt geholfen!
      <br>
      <br>
      <br>Was den Punkt (1) betrifft, habe ich noch folgendes herausgefunden --- vielleicht fällt jemandem was dazu ein?
      <br>
      <br>So läuft's falsch, d.h. leere Datenmenge und kein (!) Fehler:
      <br> with DataModule1.Query1 do
      <br> begin
      <br> Close;
      <br> Sql.Clear;
      <br> Sql.Add('SELECT KomNr FROM TblKomponenten WHERE');
      <br> Sql.Add('KomVnParNr = ParNr');
      <br> Sql.Add('AND');
      <br> Sql.Add('KomNr NOT IN (SELECT AusKomNr FROM TblAuswahlen WHERE AusDarNr = DarNr)');
      <br> ParamByName('pParNr').AsInteger:= 100013;
      <br> ParamByName('pDarNr').AsInteger:= 100033;
      <br> Open;
      <br> end;
      <br>
      <br> Und so läuft's richtig, wobei nur die Bedingungen vertauscht wurden:
      <br> with DataModule1.Query1 do
      <br> begin
      <br> Close;
      <br> Sql.Clear;
      <br> Sql.Add('SELECT KomNr FROM TblKomponenten WHERE');
      <br> Sql.Add('KomNr NOT IN (SELECT AusKomNr FROM TblAuswahlen WHERE AusDarNr = DarNr)');
      <br> Sql.Add('AND');
      <br> Sql.Add('KomVnParNr = ParNr');
      <br> ParamByName('pParNr').AsInteger:= 100013;
      <br> ParamByName('pDarNr').AsInteger:= 100033;
      <br> Open;
      <br> end;
      <br>
      <br> Das liegt (wahrscheinlich) an der Kombination der Programmversionen (oder doch ein Delphi-Fehler, denn mit festen Werten klappt’s und mit Parametern nicht):
      <br> - MS ODBC-Treiber 4.00 (MS Data Access Objects 2.1)
      <br> (mit 3.51 war die Ergebnisdatenmenge noch richtig)
      <br> - Delphi 4 mit BDE 5.01
      <br> - Verwendung von Parametern.: Werden die Nummern fest in die Sql eingetragen
      <br> so ist die Ergebnisdatenmenge richtig!
      <br> - Vertauschen der Bedingungen, so dass das Subselect nicht mehr am Schluß
      <br> der Sql steht!!!!!!!!!
      <br> (Die Reihenfolge der Parameterzuweisung spielt dabei übrigens keine Rolle

      Comment

      Working...
      X