AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Access Datenbank mit ADODataSet
Thema durchsuchen
Ansicht
Themen-Optionen

Access Datenbank mit ADODataSet

Ein Thema von MechMac666 · begonnen am 1. Jun 2013 · letzter Beitrag vom 2. Jun 2013
Antwort Antwort
Perlsau
(Gast)

n/a Beiträge
 
#1

AW: Access Datenbank mit ADODataSet

  Alt 1. Jun 2013, 19:25
... woher weiß ich und vor allem ADODataSet in welcher Tabelle der neue Datensatz gespeichert werden soll?
Ist im Grunde alles ziemlich einfach: Du hast erst einmal eine AdoConnection, die du entsprechend einrichtest, damit die richtige Datenbank angesprochen wird. Dann nimmst du dir ein Dataset dazu und weist dessen Connection-Property deine AdoConnection zu. Um nun die richtige Tabelle auszuwählen, klickst du auf die drei Punkte im Property CommandText. Es erscheint ein selbsterklärendes Dialogfenster, in dessen oberer Combobox du die Tabelle auswählst und in der unteren Combobox die anzuzeigenden Felder. Deine Auswahl wird automatisch zu einem SQL-String zusammengebaut. Es wird nun immer die eingetragene Tabelle angesprochen.

Erzeugst du ein Dataset zur Laufzeit, um z.B. neue Datensätze anzulegen, gehst du analog vor:
Delphi-Quellcode:
function TDatMod.Waren_NeuerDatensatz(Art_Nr, Anzahl, Lieferant: Integer; Farbe : String): Boolean;
Var
   AsetNeu : TAdoDataset;

begin
   Result := False;
   AsetNeu := TAdoDataset.Create(DatMod);
   Try
      AsetNeu.Connection := ADOCon;
      AsetNeu.CommandText := 'select * from WarenTabelle';
      AsetNeu.Active := True;
      AsetNeu.Append; // oder AsetNeu.Insert;
      AsetNeu.FieldByName('ArtikelNr').AsInteger := Art_Nr;
      AsetNeu.FieldByName('Anzahl').AsInteger := Anzahl;
      AsetNeu.FieldByName('Lieferant').AsInteger := Lieferant;
      AsetNeu.FieldByName('Farbe').AsString := Farbe;
      AsetNeu.Post;
      Result := True;
   Finally
      FreeAndNil(AsetNeu);
   End;
end;
Oder wenn du mit einem Query und SQL arbeiten willst:
Delphi-Quellcode:
function TDatMod.Waren_NeuerDatensatz(Art_Nr, Anzahl, Lieferant: Integer; Farbe : String): Boolean;
Const
   K = ','; // Komma
   Ka = '('; // KlammerAuf
   Kz = ')'; // KlammerZu

Var
   AQuery : TAdoQuery;

begin
   Result := False;
   AQuery := TAdoDataset.Create(DatMod);
   Try
      AQuery.Connection := ADOCon;
      AQuery.SQL.Append('insert into WarenTabelle');
      AQuery.SQL.Append(Ka + 'ArtikelNr, Anzahl, Lieferant, Farbe' + Kz);
      AQuery.SQL.Append('values');
      AQuery.SQL.Append(Ka + IntTostr(Art_Nr) + K + IntToStr(Anzahl) + K + IntToStr(Lieferant) + K + QuotedStr(Farbe) + Kz);
      AQuery.ExecSQL;
      Result := True;
   Finally
      FreeAndNil(AsetNeu);
   End;
end;
Du siehst hier am Aufbau der beiden Funktionen im Grunde alles, was dazu nötig ist, neue Datensätze einzufügen.
  Mit Zitat antworten Zitat
MechMac666

Registriert seit: 9. Nov 2008
95 Beiträge
 
#2

AW: Access Datenbank mit ADODataSet

  Alt 1. Jun 2013, 20:14
In diesem Zusammenhang würde mich interessieren ob ich gleichzeitig mit zwei ADODataSet's auf eine DB zugreifen kann, oder gibt das kuddelmuddel?
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: Access Datenbank mit ADODataSet

  Alt 1. Jun 2013, 20:18
In diesem Zusammenhang würde mich interessieren ob ich gleichzeitig mit zwei ADODataSet's auf eine DB zugreifen kann, oder gibt das kuddelmuddel?
Datasets greifen in der Regel nicht auf Datenbanken (DBs) zu, sondern lediglich auf die Datenbank-Connection.
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?
  Mit Zitat antworten Zitat
MechMac666

Registriert seit: 9. Nov 2008
95 Beiträge
 
#4

AW: Access Datenbank mit ADODataSet

  Alt 1. Jun 2013, 20:37
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?
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: Access Datenbank mit ADODataSet

  Alt 1. Jun 2013, 20:49
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.
  Mit Zitat antworten Zitat
MechMac666

Registriert seit: 9. Nov 2008
95 Beiträge
 
#6

AW: Access Datenbank mit ADODataSet

  Alt 1. Jun 2013, 21:04
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...

Geändert von MechMac666 ( 1. Jun 2013 um 21:07 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: Access Datenbank mit ADODataSet

  Alt 1. Jun 2013, 21:09
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 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