![]() |
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:
Wo ist der Fehler? Ich verzweifel hier noch :twisted:
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; |
AW: ADO Zugriff mit Fehler
Wie sieht denn der Connectionstring aus?
|
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. |
AW: ADO Zugriff mit Fehler
Hat er ja geschrieben:
Zitat:
Code:
SELECT DISTINCT [Abteilung] FROM Mitarbeiter
|
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';
|
AW: ADO Zugriff mit Fehler
Zitat:
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) |
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.
|
AW: ADO Zugriff mit Fehler
Zitat:
|
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. |
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. |
AW: ADO Zugriff mit Fehler
Abfrage -> Neu -> Neue Abfrage Entwurfsansicht wählen (evtl. mal ein paar Felder einfügen) -> Ansicht (Hauptmenü) -> SQL-Ansicht
|
AW: ADO Zugriff mit Fehler
So jetzt habe ich gemerkt, dass die Abfrage durchgeht. Jetzt habe ich Probleme mit arrays.
Delphi-Quellcode:
Warum geht das nicht?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. |
AW: ADO Zugriff mit Fehler
Für dynamische Arrays musst Du zunächst mit SetLength() Speicher reservieren.
|
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:
end.
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; |
AW: ADO Zugriff mit Fehler
Danke. Was ist daran dann bitte dynamisch? Aus PHP bin ich das richtige dynamische Array gewohnt, deswegen die Frage.
|
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.
|
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 |
AW: ADO Zugriff mit Fehler
Ich hab den Fehler, es ist das
Delphi-Quellcode:
. Keine Ahnung warum aber ohne geht es :)
DINSTINCT
|
AW: ADO Zugriff mit Fehler
War das gerade ein Tippfehler? Wenn nicht, isses ja klar, das heißt DISTINCT.
|
AW: ADO Zugriff mit Fehler
Zitat:
|
AW: ADO Zugriff mit Fehler
Zitat:
|
AW: ADO Zugriff mit Fehler
Hier:
Zitat:
|
AW: ADO Zugriff mit Fehler
Zitat:
|
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 |
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