Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO Zugriff mit Fehler (https://www.delphipraxis.net/162874-ado-zugriff-mit-fehler.html)

Kevin11 8. Sep 2011 11:36

Datenbank: Firebird • Version: 2.0 • Zugriff über: ADO

ADO Zugriff mit Fehler
 
Hallo,

ich habe eine DB-Verbindung mittels ADO auf eine .mdb-Datenbank via Acces. Habe alle Eigenschaften schon mindestens 5 mal geprüft und den Code auch mehrere male durchgegangen. Und bekomme den Fehler das die Tabelle der DB nicht gefunden wurde.

Der Code-Ausschnitt:

Delphi-Quellcode:
      Form2.ADOQuery1.SQL.Text := 'SELECT DISTINCT ("Abteilung") FROM Mitarbeiter';
      Form2.ADOQuery1.Open;
      Form2.ADOQuery1.First;

    while not Form2.ADOQuery1.Eof do
    begin
      Abteilung := Form2.ADOQuery1.FieldByName('Abteilung').Value;
      Form2.ADOQuery1.Next;

    end;
    Form2.ADOQuery1.Close;
Wo ist der Fehler? Ich verzweifel hier noch :twisted:

Union 8. Sep 2011 11:38

AW: ADO Zugriff mit Fehler
 
Wie sieht denn der Connectionstring aus?

Bernhard Geyer 8. Sep 2011 11:43

AW: ADO Zugriff mit Fehler
 
Was nun? Oben steht als Datenbank Firebird und im Text soll es dann Access sein?
Greifst du evtl. auf die Falsche Connection mit einer Query zu.

Union 8. Sep 2011 11:51

AW: ADO Zugriff mit Fehler
 
Hat er ja geschrieben:
Zitat:

ich habe eine DB-Verbindung mittels ADO auf eine .mdb-Datenbank via Acces
Aber irgendwas gefällt mir auch an dem SQL nicht, sollte es nicht heißen:

Code:
SELECT DISTINCT [Abteilung] FROM Mitarbeiter

Kevin11 8. Sep 2011 11:53

AW: ADO Zugriff mit Fehler
 
Ich hab oben aus Gewohntheit Firebird eingetragen. Access meine ich natürlich.

Der Connection String:
Delphi-Quellcode:
Form2.ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\pfad\zur\datei\datenbank.mdb;Persist Security Info=False';

Bernhard Geyer 8. Sep 2011 12:00

AW: ADO Zugriff mit Fehler
 
Zitat:

Zitat von Union (Beitrag 1122601)
Aber irgendwas gefällt mir auch an dem SQL nicht, sollte es nicht heißen:

Code:
SELECT DISTINCT [Abteilung] FROM Mitarbeiter

Dann würde er st die Spalte finden. Aber es soll ja die tabelle nicht gefunden werden.

Aber evtl. verschluckt sich hier einfach Access wegen der gemischten richtigen SQL-Syntax (' als String-Kennzeichner) und der blöden eigene Access-Syntax (" als String-Kennzeichner)

Union 8. Sep 2011 12:01

AW: ADO Zugriff mit Fehler
 
Der ConnectionString ist zwar mnimalistisch aber soeht ok aus. Hast Du mal versucht in dem SQL den Delimiter für den Flednamen auf [] zu setzen, wie in meinem vorherigen Post? Es empfiehlt sich auch das evtl. vorher in der SQL-Entwurfsansischt von Access zu testen, statt es blind in Delphi zu tippen.

DeddyH 8. Sep 2011 12:03

AW: ADO Zugriff mit Fehler
 
Zitat:

Zitat von Union (Beitrag 1122609)
Es empfiehlt sich auch das evtl. vorher in der SQL-Entwurfsansischt von Access zu testen, statt es blind in Delphi zu tippen.

Genau das wollte ich auch gerade vorschlagen. Wenn man nicht täglich mit Access zu tun hat, fällt es einem schwer, sich die merkwürdige SQL-Syntax zu merken (gerade was die eckigen Klammern angeht).

Bernhard Geyer 8. Sep 2011 12:08

AW: ADO Zugriff mit Fehler
 
Die Klammerung ist nur bei Problematischen Feldnamen (z.B. Leerzeichen) nötig.
Der Feldname "Abteilung" kann ohne Klammerung angegeben werden.

Kevin11 8. Sep 2011 12:54

AW: ADO Zugriff mit Fehler
 
Bringt auch nicht mit []. Wie kom ich in das SQL-Entwurfsmuster?

Wobei ich aber die Spalte Name in einer anderen Funktion Problemlos auslesen kann. Microsoft ist halt sehr sehr sehr komisch.

Union 8. Sep 2011 13:12

AW: ADO Zugriff mit Fehler
 
Abfrage -> Neu -> Neue Abfrage Entwurfsansicht wählen (evtl. mal ein paar Felder einfügen) -> Ansicht (Hauptmenü) -> SQL-Ansicht

Kevin11 8. Sep 2011 13:54

AW: ADO Zugriff mit Fehler
 
So jetzt habe ich gemerkt, dass die Abfrage durchgeht. Jetzt habe ich Probleme mit arrays.

Delphi-Quellcode:
   
var
  Abteilung : array of string;
  i : Integer;
begin
    while not Form2.ADOQuery1.Eof do
        begin
//          Form2.Memo1.Lines.Add(IntToStr(count));
//          Abteilung := Form2.ADOQuery1.FieldByName('Abteilung').Value;
          Form2.ADOQuery1.Next;

        end;
        Form2.ADOQuery1.Close;

      for i := 0 to count do
      begin
        Abteilungsnummer[i] := AddAbt(Abteilung[i]);
      end;
end.
Warum geht das nicht?

DeddyH 8. Sep 2011 13:56

AW: ADO Zugriff mit Fehler
 
Für dynamische Arrays musst Du zunächst mit SetLength() Speicher reservieren.

Union 8. Sep 2011 14:03

AW: ADO Zugriff mit Fehler
 
Oder verwende TStringList. Ausserdem solltest Du bei Datenmengen while not eof verwenden. Wie positionierst Du denn in AddAbt() ? Und um die Sätze zu zählen verwende die Query-Eigenschaft RecordCount.

Delphi-Quellcode:
var
  Abteilung : TStringList;
begin
    Abteilung := TStringList.Create;
    while not Form2.ADOQuery1.Eof do
    begin
       Abteilung.Add(Form2.ADOQuery1.FieldByName('Abteilung').AsString;
       Form2.ADOQuery1.Next;
    end;
    Form2.ADOQuery1.Close;
    Abteilung.Free;
end;
end.

Kevin11 8. Sep 2011 14:22

AW: ADO Zugriff mit Fehler
 
Danke. Was ist daran dann bitte dynamisch? Aus PHP bin ich das richtige dynamische Array gewohnt, deswegen die Frage.

Union 8. Sep 2011 14:28

AW: ADO Zugriff mit Fehler
 
Dynamisch deswegen weil die Größe zur Laufzeit (eben mit SetLength) geändert werden kann. Sinnvollerweise macht man das nicht oft, da es sonst Performanceprobleme geben kann.

DeddyH 8. Sep 2011 14:31

AW: ADO Zugriff mit Fehler
 
Ein statisches Array definiert bereits zur Entwurfszeit die Anzahl der enthaltenen Elemente, ein dynamisches nicht.
Delphi-Quellcode:
var
  StatArray: array[1..10] of string; //statisches Array mit 10 Elementen
  DynArray: array of string; //dynamisches Array, Anzahl der Elemente wird zur Laufzeit festgelegt

Kevin11 8. Sep 2011 16:30

AW: ADO Zugriff mit Fehler
 
Ich hab den Fehler, es ist das
Delphi-Quellcode:
DINSTINCT
. Keine Ahnung warum aber ohne geht es :)

DeddyH 8. Sep 2011 16:32

AW: ADO Zugriff mit Fehler
 
War das gerade ein Tippfehler? Wenn nicht, isses ja klar, das heißt DISTINCT.

haentschman 8. Sep 2011 21:34

AW: ADO Zugriff mit Fehler
 
Zitat:

Form2.ADOQuery1.SQL.Text := 'SELECT DISTINCT ("Abteilung") FROM Mitarbeiter';
...Tippfehler, siehe 1. Post

Kevin11 9. Sep 2011 08:13

AW: ADO Zugriff mit Fehler
 
Zitat:

Zitat von haentschman (Beitrag 1122748)
Zitat:

Form2.ADOQuery1.SQL.Text := 'SELECT DISTINCT ("Abteilung") FROM Mitarbeiter';
...Tippfehler, siehe 1. Post

Wo ist da ein Tippfehler?

DeddyH 9. Sep 2011 08:15

AW: ADO Zugriff mit Fehler
 
Hier:
Zitat:

Zitat von Kevin11 (Beitrag 1122697)
Ich hab den Fehler, es ist das
Delphi-Quellcode:
DINSTINCT
. Keine Ahnung warum aber ohne geht es :)


Kevin11 9. Sep 2011 08:20

AW: ADO Zugriff mit Fehler
 
Zitat:

Zitat von DeddyH (Beitrag 1122789)
Hier:
Zitat:

Zitat von Kevin11 (Beitrag 1122697)
Ich hab den Fehler, es ist das
Delphi-Quellcode:
DINSTINCT
. Keine Ahnung warum aber ohne geht es :)


Das ist nicht aus der Datenbank, habe ich "frei" Hand geschrieben.

p80286 9. Sep 2011 13:42

AW: ADO Zugriff mit Fehler
 
Ob das Problem gelöst ist hab ich nicht so mitbekommen,
aber zwei wichtige Hinweise hab ich schon erhalten,
1) Source immer kopieren,
2) Finger weg von Access

Gruß
K-H

Kevin11 12. Sep 2011 15:55

AW: ADO Zugriff mit Fehler
 
So es geht :)
Das Problem war zwischen den Ohren.
Jetzt kommt immer eine Meldung mit "Der schreibgeschützte Eigenschaftswert wurde nicht festgelegt". Wenn ich auf Fortsetzen klicke, läuft das Programm problemlos weiter. Es ist aber ziemlich nervig, bei jedem Start auf Fortsetzen zu klicken.

Kann mir jemand weiterhelfen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz