Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Grundsätzlicher Zugriff auf Access-Datenbanken (https://www.delphipraxis.net/68226-grundsaetzlicher-zugriff-auf-access-datenbanken.html)

Chuqa 26. Apr 2006 17:24

Datenbank: Access • Zugriff über: noch gar nicht

Grundsätzlicher Zugriff auf Access-Datenbanken
 
Aloha,

ich möchte ein kleines Verwaltungsprogramm schreiben. Die Daten sollen in einer Access-DB abgelegt werden. In der Datenbank existieren noch keine Tabellen, die sollen beim ersten Eintrag angelegt werden. Nun bin ich allerdings völlig unbefleckt im Umgang mit Datenbank in Kombination mit Delphi, ich habe also rein gar keine Ahnung wie ich an die Sache rangehen soll geschweige denn welche Komponenten ich benutzen sollte. Da es eilt, habe ich nicht wirklich die Zeit mich durch die Api's zu wühlen, deswegen hoff ich hier schneller fündig zu werden. Also nun zu meinen Fragen.
  • 1. Welche Komponenten?
    • - TQuery, TADOQuery, TTable, TADOQuery, usw.
    2. Wie benutze ich diese Komponenten?
    • - ich habe bisher in Java einen Datenbankzugriff auf eine PostgreSQL-DB realisiert, dort hatte ich dann ein ResultSet (Tabelle) in dem meine Daten enthalten waren, die ich vorher mittels SQL-Syntax abgefragt habe. Gibt es in Delphi etwas Ähnliches?
    3. Wie frage ich sämtliche Tabellen ab, die bisher in der Datenbank enthalten sind?
    • - um so die Tabellen nur anzulegen, wenn sie noch nicht vorhanden sind
Ganz wunderbar wären auch Codeschnipsel.

mfg chuqa

shmia 26. Apr 2006 17:38

Re: Grundsätzlicher Zugriff auf Access-Datenbanken
 
Zitat:

Zitat von Chuqa
ich möchte ein kleines Verwaltungsprogramm schreiben. Die Daten sollen in einer Access-DB abgelegt werden. In der Datenbank existieren noch keine Tabellen, die sollen beim ersten Eintrag angelegt werden.

Ich würde die Access-Datenbank als Datei mit der Anwendung mitgeben.
Das ist deutlich weniger Arbeit; man kann das Erzeugen der Datenbankstruktur aus der Anwendung
auch später noch nachholen.
Zitat:

Zitat von Chuqa
1. Welche Komponenten?

TADOconnection (gibt's nur einmal im ganzen Programm, sollte auf einem zentralen Datenmodul liegen)
TADOQuery (Standard-Komponente)
TADODataset (bei erweiterten Anforderungen)
TADOTable (bitte auf diese Komponente verzichten, wenn SQL für dich keine Fremdsprache ist)
Zitat:

Zitat von Chuqa
2. Wie benutze ich diese Komponenten?

"Spielerisch": TADOConnection zu einer AccessDB verbinden (OLE DB Provider: Jet-Engine)
TADOQuery über Property Connection mit der TADOConnection verknüpfen.
TADOQuery.SQL eingeben
TADOQuery mit TDataSource verknüpfen, TDBGrid mit TDataSource verknüpfen und ADOQuery aktiv schalten.

mikhal 26. Apr 2006 20:14

Re: Grundsätzlicher Zugriff auf Access-Datenbanken
 
Auf maeiner Homepage findest du einige Code-Schnipsel:

- Wie du ADOX in Delphi einbinden kannst und damit eine Access-Datenbank erstellen kannst.

- Wie du mit AdoQuery eine neue Tabelle in Access anlegen kannst.

Um festzustellen, welche Tabellen bzw. welche Felder einer Tabelle existieren, verwendest du die Methoden GetTableNames und GetFieldNames der TAdoConnection.

Grüße
Mikhal

Chuqa 27. Apr 2006 12:09

Re: Grundsätzlicher Zugriff auf Access-Datenbanken
 
Herzlichen Dank erstmal, habe ein bißchen rumprobiert und müsste eigentlich hinzubekommen sein ;).
Trotzdem noch ein paar Fragen:

Benötige ich für jede Komponente, die irgendwie eine Spalte oder eine ganze Tabelle enthält (DBGrid, DBListBox, DBComboBox) eine DataSource und eine ADOQuery oder reicht es, wenn ich während der Laufzeit die SQL-Property des ADOQuery änder und dann die Datenzugriffskomponente an die ADOQuery zuweise?

mfg chuqa

mikhal 27. Apr 2006 12:58

Re: Grundsätzlicher Zugriff auf Access-Datenbanken
 
DBGrid, DBEdit etc stellen lediglich dein Abfrageergebnis auf dem Bildschirm dar, also benötigen sie immer eine Datenquelle. Sie visualisieren nur das Abfrageergebnis oder dienen zur Erfassung neuer Daten oder von Datenänderungen.

Grüße
Mikhal

Chuqa 27. Apr 2006 13:16

Re: Grundsätzlicher Zugriff auf Access-Datenbanken
 
hmm ok, dann anders,

gibt es eine möglichkeit, dass ich eine abfrage an die datenbank stelle und dann mit dem ergebnis etwas anstelle, also nicht dass ich das abfrageergebnis an eine komponente zuweise sondern anhand meines ergebnisses etwas ausführe, also z.b. ich betätige einen button, eine sql-abfrage wird ausgeführt und anhand des abfrageergebnisses wird z.b. eine meldung ausgegeben.

mfg

mkinzler 27. Apr 2006 13:18

Re: Grundsätzlicher Zugriff auf Access-Datenbanken
 
Natürlich geht das. bei einer DS kannst du z.B. mit der Eigenschaft .FieldByName('<feldname>').Value auf die Felder zugreifen.

Chuqa 27. Apr 2006 14:34

Re: Grundsätzlicher Zugriff auf Access-Datenbanken
 
ok danke erstmal, aber irgendwie begreif ich das ganze noch nicht richtig, sry.

also mal angenommen ich habe dbcombobox und zwei dbtext-komponenten. nun habe ich in meiner datenbank eine tabelle mit mehreren spalten. mal angenommen ich möchte nun die erste spalte der tabelle in der combobox abbilden. nun soll bei auswahl eines eintrages der combobox der zugehörige eintrag in der spalte 2 der tabelle in dem einem dbtext und der zugehörige eintrag in der dritten spalte in der anderen dbtext-komponente abgebildet werde.
so nun:
wie binde ich die datensteuerungskomponenten (dbcombobox,dbtext) an die datenbank an?
wieviel datasource-komponenten mit welcher abfrage benötige ich?

mfg

Hasse 27. Apr 2006 15:03

Re: Grundsätzlicher Zugriff auf Access-Datenbanken
 
Moin,

den drei Datensteuerungskomponeneten weist du die gleiche Datasource zu (Du brauchst also nur eine Datasource). Der Datasource weist du die AdoQery zu, die dein SQL-Statment enhält.

Hasse

mkinzler 27. Apr 2006 15:17

Re: Grundsätzlicher Zugriff auf Access-Datenbanken
 
Die Antwort
Zitat:

Zitat von ich
Natürlich geht das. bei einer DS kannst du z.B. mit der Eigenschaft .FieldByName('<feldname>').Value auf die Felder zugreifen.

bezog sich auf:
Zitat:

Zitat von Chuqa
gibt es eine möglichkeit, dass ich eine abfrage an die datenbank stelle und dann mit dem ergebnis etwas anstelle, also nicht dass ich das abfrageergebnis an eine komponente zuweise sondern anhand meines ergebnisses etwas ausführe


Chuqa 27. Apr 2006 15:57

Re: Grundsätzlicher Zugriff auf Access-Datenbanken
 
Also habe ich gemacht, aber es wird nur der erste datensatz der tabelle angezeigt. in der tabelle befinden sich 3 datensätze, aber die combobox enthält wie gesagt nur den ersten. setze ich eine dbgrid-komponente dazu und verbinde diese mit der datasource so enthält sie alle datensätze. was mache ich falsch?

mfg

mkinzler 27. Apr 2006 16:17

Re: Grundsätzlicher Zugriff auf Access-Datenbanken
 
Am besten nimmst du eine DBLookupCombobox und setzt die LookupSource auf die dataSource der Abfrage und LookupField auf das gewünschte Feld.

Chuqa 2. Mai 2006 11:37

Re: Grundsätzlicher Zugriff auf Access-Datenbanken
 
jo, herzlichen dank, soweit hab ich das.

nun habe ich noch eine dbgrid-komponente, die die daten eine anderen tabelle anzeigt, allerdings soll die auswahl der daten davon abhängen, welcher eintrag in der dblookupcombobox ausgewählt wurde, also

ich wähle in der dblookupcomobox eine liga aus. nun stehen in einer zweiten tabelle mannschaften, wobei ein eintrag eines datenasatzes die liga-id ist. es sollen dann nur die mannschaften ausgewählt und angezeigt werden, die die liga-id der ausgewählten liga enthalten.

oder:

ich lege pro liga eine extra tabelle an und wähle dann anhand der gewählten liga die entsprechende tabelle aus.

welche methode ist die bessere und wie implementier ich das, im speziellen: wie übergebe ich dem sql-statement für die dbgrid die auswahl der dblookupcombobox-komponente?

mfg

mkinzler 2. Mai 2006 11:41

Re: Grundsätzlicher Zugriff auf Access-Datenbanken
 
TQuery, welches im Grid angezeigt wird ist Detail des Queryies der LookupCombo.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 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