![]() |
AW: Access Datenbank mit ADODataSet
In diesem Zusammenhang würde mich interessieren ob ich gleichzeitig mit zwei ADODataSet's auf eine DB zugreifen kann, oder gibt das kuddelmuddel?
|
AW: Access Datenbank mit ADODataSet
Zitat:
Da eine DB gewöhnlich mehr als eine Tabelle enthält, sind meist auch mehrere Datasets notwendig, um diese Tabellen in der Anwendung bearbeiten zu können. Kann es vielleicht sein, daß hier eine Verwechslung vorliegt und du eigentlich fragen wolltest, ob es Probleme geben kann, wenn mehrere Datasets auf dieselbe Tabelle zugreifen? |
AW: Access Datenbank mit ADODataSet
Hm, ich habe direkt mit dem Dataset die Verbindung mit der Datenbank aufgebaut (ConnectionString).
Meine Datenbank hat mehrere Tabellen und die Abfragen gehen über mehrere Tabellen. Das mache ich mit SQL. Also mit dem CommandText. Nun muss ich aber zwei DBgrids mit verschieden Daten (Abfragen) aus einer Datenbank versorgen. (Es ist möglich das diese Abfragen über mehrere Tabellen gehen) Könnte ich jetzt mit einem zweiten Dataset die selbe Datenbank nochmal verbinden und damit eine Abfrage machen, oder ggf. auch einen neuen Datensatz erstellen? Ps.: MUSS ich denn die Datenbank-Connection eigentlich nutzen? Was ist der Vorteil? |
AW: Access Datenbank mit ADODataSet
MS-Access stellt keine Multiuser-Datenbank dar. Daher ist es sinnvoll, mit nur einer DB-Connection zu arbeiten. Zu diesem Zweck gibt es TAdoConnection. Über das Verhalten bei direkter Verbindung mehrerer Datasets zu ein und derselben Datenbank kann ich dir nichts weiter sagen, da ich dieses Szenario noch nicht ausprobiert hatte und auch nicht vorhabe, das zu tun. Jedoch habe ich Erfahrung mit dem Zugriff auf eine Access-DB durch mehrere Client-Anwendungen. Greifen gleichzeitig mehrere Clients auf dieselbe Tabelle oder gar denselben Datensatz dar, kann es zu Problemen kommen, weil Access die in Bearbeitung befindlichen Datensätze nicht für weiteren Zugriff sperrt. Das können nur Multiuser-DBMS. Access ist aber als reine Desktop-DB nur für den Single-User-Einsatz konzipiert.
Du solltest dir daher die insbesondere bei anderen DBMS übliche Vorgehensweise angewöhnen und eine Connection-Komponente einsetzen, über die du deine Datasets und Queries verbindest. Der Vorteil liegt u.a. darin, daß du nicht bei jedem Zugriff auf eine Tabelle eine neue Datenbank-Verbindung herstellen mußt. |
AW: Access Datenbank mit ADODataSet
Danke für die ausführliche Erklärung.
Das heißt also, ich erstelle eine ADOConnection und kann mit mehreren Datasets darauf zugreifen. (Ich muss nicht erst eine davon deaktivieren) Und diese Datasets können aber alle mit gleichen und/oder unterschiedlichen CommandType verbunden werden und mittels CommandText SQL-Abfragen machen? Oder als Beispiel: Das erste Dataset macht folgende Abfrage mit CommandType=CMDTEXT und stellt es in DBGrid1 dar. CommandText:='SELECT Bilder.Art, Bilder.Pfad, Bilder.Fundort, Bilder.Funddatum, Bilder.EXIF, Arten.Vorkommen, Arten.Familie, Arten.Unterfamilie, Arten.Gattung, Arten.Tagfalter, Arten.Nachtfalter, Arten.[Artname Alternativ], Bilder.ID FROM Bilder INNER JOIN Arten ON Bilder.Art = Arten.Artname'; Das zweite Dataset macht folgende Abfrage mit CommandType=CMDTABLE und stellt es in DBGrid2 dar. CommandText:='BILDER'; Wenn das klappen würde, wäre es eine riesige Hilfe für mich da ich das momentan auf umständlichste Art und Weise mache... :( |
AW: Access Datenbank mit ADODataSet
Probiere es doch einfach aus! Übrigens stellt der String 'BILDER' keinen SQL-Befehl dar und muß daher bei Zuweisung an das Property CommandText zu einer Fehlermeldung führen. Des weiteren empfehle ich dir dringend, die Online-Hilfe zu den Ado-Komponenten (dbGo) zu studieren. Dort findest du alle relevanten Informationen.
Statt komplexer Select-Befehle kannst du in den Datasets auch Lookup-Felder erstellen. Wie das geht, steht ebenfalls in der OH. |
AW: Access Datenbank mit ADODataSet
Da ich es unbedingt direkt testen wollte habe ich bereits ein Ergebnis.
Auf den ersten Blick scheint es zu funktionieren. Habe bei dem kurzen Test zumindest keine Probleme damit entdecken können. Dass das 'BILDER' kein SQL-Befehl ist, ist mir klar, ich habe es in einem Post weiter oben gelesen. Zitat: ADODataSet1.CommandText := 'Tablename'; // z. B. 'BILDER' ADODataSet1.CommandType := cmdTable; // bzw. cmdTableDirect Ich hätte es wie folgt, jedoch im Modus CMDTEXT ausgedrückt: SELECT * FROM BILDER Nur es ging doch darum, das ich das dataset auf eine spezielle Tabelle lenke. Ob SELECT * FROM BILDER im Modus CMDTABLE funktioniert, habe ich nicht getestet. Wie auch immer, jetzt muss ich erstmal grundlegend einiges umstricken und die AdoConnection sowie weitere Datasets einbauen. |
AW: Access Datenbank mit ADODataSet
Hallo,
Zitat:
Zitat:
Delphi-Quellcode:
erwartet in der Eigenschaft CommandText einen Tabellennamen und nichts anderes.
CommandType := cmdTable
Wenn Du alle Datensätze einer Tabelle (hier BILDER) anzeigen möchtest (TDataSource an die entsprechende Komponente gebunden):
Delphi-Quellcode:
oder
ADODataSet1.Connection := ADOConnection1;
ADODataSet1.CommandText := 'BILDER'; ADODataSet1.CommandType := cmdTable; ADODataSet1.Open;
Delphi-Quellcode:
oder
ADODataSet1.Connection := ADOConnection1;
ADODataSet1.CommandText := 'SELECT * FROM BILDER'; ADODataSet1.CommandType := cmdText; ADODataSet1.Open;
Delphi-Quellcode:
oder
ADOTable1.Connection := ADOConnection1;
ADOTable1.Tablename := 'BILDER'; ADOTable1.Open;
Delphi-Quellcode:
liefert Dir identische Ergebnisse. Such es Dir aus, welche Variante Dir gefällt.
ADOQuery1.Connection := ADOConnection1;
ADOQuery1.SQL.Text := 'SELECT * FROM BILDER'; ADOQuery1.Open; Wenn Du einen Datensatz in eine Tabelle (hier Arten) einfügen möchtest, dann:
Delphi-Quellcode:
oder
ADOCommand1.Connection := ADOConnection1;
ADOCommand1.CommandText := 'INSERT INTO Arten(Vorkommen, Familie, Unterfamilie, Gattung, Tagfalter, Nachtfalter) VALUES([...])'; ADOCommand1.Execute;
Delphi-Quellcode:
oder
ADODataSet1.Connection := ADOConnection1;
ADODataSet1.CommandText := 'Arten'; ADODataSet1.CommandType := cmdTable; ADODataSet1.Insert; // oder ADODataSet1.Append; ADODataSet1.FieldByName ('Vorkommen').AsString := '[...]'; [...] ADODataSet1.FieldByName ('Nachtfalter').AsString := '[...]'; ADODataSet1.Post
Delphi-Quellcode:
oder
ADOQuery1.Connection := ADOConnection1;
ADOQuery1.SQL.Text := 'INSERT INTO Arten(Vorkommen, Familie, Unterfamilie, Gattung, Tagfalter, Nachtfalter) VALUES([...])'; ADOCommand1.ExeSQL;
Delphi-Quellcode:
legt Dir einen neun Datensatz in der Tabelle an. Such es Dir aus, welche Variante Dir gefällt.
ADOTable1.Connection := ADOConnection1;
ADOTable1.Tablename := 'Arten'; ADOTable1.Open; ADOTable1.Insert; // oder ADOTable1.Append; ADOTable1.FieldByName ('Vorkommen').AsString := '[...]'; [...] ADOTable1.FieldByName ('Nachtfalter').AsString := '[...]'; ADOTable1.Post Zitat:
Wenn Du ein Join über mehrere Tabellen fahren möchtest, dann TADODataset oder TADOQuery. Nur: Mir ist nur noch immer nicht klar wo denn Dein Problem nun eigentlich liegt. Gruß |
AW: Access Datenbank mit ADODataSet
Zitat:
Zitat:
da das mit der AdoConnection und den mehreren Datasets supi funktioniert. :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 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-2025 by Thomas Breitkreuz