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
Seite 1 von 2  1 2      
MechMac666

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

Access Datenbank mit ADODataSet

  Alt 1. Jun 2013, 14:06
Datenbank: MS Access • Version: 12 • Zugriff über: ADODataSet
Hallo,

ich verwende eine Access Datenbank und greife mit ADODataSet darauf zu.
Zum Filtern verwende ich SQL.

Die Datenbank hat 2 Tabellen.

Wenn ich nun

Code:
  form1.ADODataSet1.Insert;
  form1.ADODataSet1.Edit;
  [..]
  form1.ADODataSet1.post;
verwende, woher weiß ich und vor allem ADODataSet in welcher Tabelle der neue Datensatz gespeichert werden soll?

Ich hatte schon mal probiert mit
'SELECT * FROM BILDER'
bzw.
'SELECT * FROM ARTEN'
nur die Einträge einer Tabelle zu bekommen,
in der Hoffnung das dann auf diese Tabelle der letzten Abfrage gezeigt wird und
dort auch dann der neue Eintrag erstellt wird.
Aber das scheint nicht so ganz zu funktionieren.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.190 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Access Datenbank mit ADODataSet

  Alt 1. Jun 2013, 14:15
Ich kenne mich mit Datenbanken nicht aus, habe aber vor ein paar Wochen auch einmal kurz schnell etwas für Access mit den ADO-Komponenten zusammengezimmert.

Ich kann nur sagen, dass ich drei Komponenten hatte, in dieser Reihenfolge aufeinander aufbauend:


TDataSource->(ADOTable|AdoQuery|…?)->ADOConnection:<Jet, OLE DB, ODBC>

TDataSet ist eine implementierende Unterklasse von TDataSource, oder? Somit müsste das Teil doch entweder an einem ADOTable- oder ADOQuery-Objekt dranhängen?
  Mit Zitat antworten Zitat
MechMac666

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

AW: Access Datenbank mit ADODataSet

  Alt 1. Jun 2013, 14:20
Also die Datenbankverbindung an sich klappt wunderbar. Auch die SQL-Abfragen funktionieren.

Das einzigste "Problem" was ich habe, ist das mir nicht klar ist, woher "das System" weiß, in welcher Tabelle ich den neuen Datensatz erstellt haben möchte.

DataSource -> ADODataSet ->DBGrid etc.

Geändert von MechMac666 ( 1. Jun 2013 um 14:24 Uhr)
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Access Datenbank mit ADODataSet

  Alt 1. Jun 2013, 14:40
Ich habe nie mit dem ADODataset gearbeitet, sondern nur mit ADOTable/ADOQuery, daher kenne ich die Komponente auch nicht. Aber ich zietiere mal aus der Delphi-Hilfe:

Die Datenmenge wird mit Hilfe der Eigenschaft CommandText des TADODataSet-Objekts abgerufen. Weisen Sie dieser Eigenschaft den betreffenden Tabellennamen oder eine SQL-Anweisung (nur SELECT) zu. Mit der Datenmengenkomponente können nur DML-SQL-Anweisungen (Data Manipulation Language) ausgeführt werden, die eine Ergebnismenge zurückliefern. Für SQL-Anweisungen wie DELETE, INSERT und UPDATE sind Komponenten wie TADOCommand oder TADOQuery besser geeignet.

Demnach also für Insert nicht zu empfehlen

Gruß Rainer
  Mit Zitat antworten Zitat
Benutzerbild von blondervolker
blondervolker

Registriert seit: 14. Sep 2010
Ort: Bei: Leeeiipzzhhh
381 Beiträge
 
Delphi XE2 Architect
 
#5

AW: Access Datenbank mit ADODataSet

  Alt 1. Jun 2013, 14:48
ADOConnection
DataSource
ADOTable

Leg noch ein Datenmodul an und klatsche da alles drauf.
Dann lege eine oder mehrere Forms an und schreibe in Uses Datamodul oder
wie das Ding auch immer heissen soll.

Dann klatsche eine Tabelle auf eine Form und schau dann im Objektinspektor
was für eine Tabelle oder Table usw. zugewiesen werden soll.

Siehe Abb.1
Angehängte Grafiken
Dateityp: jpg Abb1.jpg (120,4 KB, 28x aufgerufen)
www.bewerbungsmaker.de
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.210 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Access Datenbank mit ADODataSet

  Alt 1. Jun 2013, 15:17
Wenn was in Access trotz keiner Fehler nicht sichtbar ist liegt das am bescheuerten Caching-Verhalten von Access.

Im Entwickler-Forum gabs mal Beispielcode wie man die Jet-Engine zwingen kann ohne jedesmal die Verbindung zu beenden den Cache zu leeren..
Leider finde ich den Beitrag nicht mehr. War von Andreas Kosch.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: Access Datenbank mit ADODataSet

  Alt 1. Jun 2013, 20: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
 
#8

AW: Access Datenbank mit ADODataSet

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

AW: Access Datenbank mit ADODataSet

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

AW: Access Datenbank mit ADODataSet

  Alt 1. Jun 2013, 21: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
Antwort Antwort
Seite 1 von 2  1 2      


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 21:42 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