Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenabfrage von Delphi via MySQL (https://www.delphipraxis.net/151720-datenabfrage-von-delphi-via-mysql.html)

Mysterio08 29. Mai 2010 10:01

Datenbank: MySQL (Workbench) • Version: 5.1 • Zugriff über: MySQLConnection

Datenabfrage von Delphi via MySQL
 
Guten Morgen,

ich habe mit MySQL Workbench eine relationale Datenbank erstellt, Testdaten eingetragen und eine Verbindung in Delphi hergestellt - das klappt wunderbar.
Nun möchte ich jedoch auch auf meine Testdaten zugreifen, ich weiß aber nicht wie. Als ich mit Paradox gearbeitet habe, habe ich dafür immer die DBGrid-Komponente benutzt, das wollte ich jetzt auch machen, wenn das möglich ist. Diese Komponente habe ich also auf meiner Form, dann die Verbindung zu MySQL (TSQLConnection), eine TDatenSource und eine TSQLQuery (Eigenschaften wie SQLConnection etc. sind eingestellt). Die DataSource-Eigenschaft von SQLQuery ist auf DataSource1 gestellt, jetzt kann ich jedoch die DataSet-Eigenschaft von DataSource nicht einstellen, sodass es einen Bruch gibt und keine Daten angezeigt werden. Aber wenn ich die DataSet-Eigenschaft auf SQLQuery1 stelle, bekomme ich die Meldung "Diese Operation ist bei einer unidirektionalen Datenmenge nicht gestattet".
Ich habe also die falschen Komponenten verwendet, wenn ich das richtig sehe, nur welche brauche ich?

mfg.

Sir Rufo 29. Mai 2010 10:44

Re: Datenabfrage von Delphi via MySQL
 
DataSource bei SQLQuery1 wieder rausnehmen (da kommt in diesem fall nix rein)

Delphi-Quellcode:
DataSource1.DataSet := SQLQuery1;
Dann klappt das auch, denn DBGrid1 <= DataSource1 <= SQLQuery1

btw. das ist beim Zugriff auf Paradox auch so gewesen ;)

Mysterio08 29. Mai 2010 12:07

Re: Datenabfrage von Delphi via MySQL
 
Zitat:

Zitat von Sir Rufo
Dann klappt das auch, denn DBGrid1 <= DataSource1 <= SQLQuery1

Wenn ich das richtig verstanden habe: bei DBGrid die DataSource-Eigenschaft auf "DataSource1" stellen? Das klappt nämlich nicht, sobald ich dies tue, erscheint wieder die Meldung "Diese Operation ist bei einer unidirektionalen Datenmenge nicht gestattet".

Und sobald ich die DataSet-Eigenschaft von DataSource1 auf SQLQuery1 gestellt habe (natürlich als erstes) kann ich dann bei DataSource von SQLQuery nichts mehr einstellen.

DeddyH 29. Mai 2010 12:17

Re: Datenabfrage von Delphi via MySQL
 
Wenn ich mich recht entsinne, brauchst Du dazu ein ClientDataset. Näheres siehe hier.

Mysterio08 29. Mai 2010 12:47

Re: Datenabfrage von Delphi via MySQL
 
Ich habe die Komponenten TDataSetProvider und TClientDataSet mit eingebunden, hab aber gerade nicht die Zeit, die Verknüpfungen herzustellen, das werde ich später mal ausprobieren.
Funktioniert bei euch auch der Download-Link von dem aufgeführten Beispiel-Projekt nicht? Das hätte ich mir ja schon mal ganz gerne angeschaut...

DeddyH 29. Mai 2010 12:49

Re: Datenabfrage von Delphi via MySQL
 
Nicht auf den Link klicken, sondern den Text kopieren :zwinker: :http://cc.embarcadero.com/item/18306

Mysterio08 29. Mai 2010 17:01

Re: Datenabfrage von Delphi via MySQL
 
Ich habe mir das Beispielprojekt mal runtergeladen, aber es hilft mir nicht besonders weiter, weil ja erstens eine Table und keine SQL-Komponente verwendet wird und zweitens ich deswegen keine mit MySQL-Workbench erstellten Tabellen öffnen kann.
Ansonsten bin ich noch nicht weitergekommen.

Mysterio08 29. Mai 2010 18:18

Re: Datenabfrage von Delphi via MySQL
 
Liste der Anhänge anzeigen (Anzahl: 1)
Auf Delphi-Treff habe ich, wenn ich das richtig sehe, genau das gefunden, wonach ich suchte: DT-Tutorial.
Direkt auf der Einleitungs-Seite jedoch wird von MySQL-Direct-Units gesprochen und das Problem ist, dass ich diese nicht finde - der Link von Sourceforge führt mich zum Download einer mit Delphi erstellten Anwendung, mit welcher ich eine Verbindung zur Datenbank aufbauen und mir Tabellen anzeigen lassen kann, und auf der Seite von solutions.mysql.com finde ich keine konkrete Download-Datei, die diese Units enthalten könnte. Sind die Links nicht mehr aktuell, bzw. bekomme ich die Units irgendwoanders her? Google hat nicht richtig helfen können, außer die im Anhang mitgeschickte Unit, wobei das auch nicht funktioniert, weil dafür noch andere Units benötigt werden...

Neumann 29. Mai 2010 21:20

Re: Datenabfrage von Delphi via MySQL
 
Eine einfache Möglichkeit ist, über ODBC und ADO auf MYSQL zuzugreifen. Ist vielleicht von der Performance nicht das Optimum, aber relativ Stressfrei.

Liegt die MYSQL Datenbank auf einem Webserver, kann man z.B. eine Verbindung über Soap machen; dann also auf dem Client Soapconnection - Clientdataset - Datasource - DBGrid.

Auf dem Server brauch man dann entsprechende Routinen, die die Daten in dem speziellen XML-Format liefern, die das Clientdataset versteht; auf einem Windows Server z.B. die HTTPSRVR.dll. Auf Linux kann man das mit einem PHP-Script hinbekommen.

Gruß

Ralf

Mysterio08 30. Mai 2010 09:09

Re: Datenabfrage von Delphi via MySQL
 
Danke Neumann, das hört sich gut an. Ich weiß nur nicht recht, wie ich den Zugriff gestalten soll...
Wie ich gelesen habe, benutzt man ADO und ODBC parallel, weil sie sich gut ergänzen. Die ADO-Komponenten habe ich jetzt mit eingebunden (TADOConnection und TADOTable), aber wie funktioniert das mit ODBC? Hier habe ich was von MyDAC-Komponenten gelesen, benötige ich die, wenn ich ODBC verwende, bzw. benötige ich extra Komponenten dafür und wenn ja welche?

Und dann weiß ich immer noch nicht, wie ich die Verbindung herstellen tue...

Das ist alles so kompliziert

Mysterio08 30. Mai 2010 09:58

Re: Datenabfrage von Delphi via MySQL
 
Ich habe jetzt mal versucht, nur per ADO die SQL-Abfragen durchzuführen und mir die Ergebnisse im DBGrid anzeigen zu lassen.
Das scheitert allerdings schon bei der Einstellung der Connection-String-Eigenschaft der TADOQuery-Komponente, weil ich nicht weiß, welchen Provider ich auswählen soll. "Microsoft OLE DB for SQL Server" hat sich passend angehört, aber ich habe keine Verbindung zu stande bekommen, weil ich ja keine mit MySQL erstellten Datenbanken sondern nur SQL-Server-Datenbanken auswählen kann...

mkinzler 30. Mai 2010 10:05

Re: Datenabfrage von Delphi via MySQL
 
Hier benötigst du entweder eine Provider oder nimmst den ODBC-Provider, dann benötigst du aber einen ODBC-Treiber für MySQL.
Aber zum Ursprungsproblem. Wenn du das GRID auf readonly setzt, sollte es auch mit unidirektionalen Datasets

Mysterio08 30. Mai 2010 17:13

Re: Datenabfrage von Delphi via MySQL
 
Zitat:

Zitat von mkinzler
Aber zum Ursprungsproblem. Wenn du das GRID auf readonly setzt, sollte es auch mit unidirektionalen Datasets

Nein, auch mit der ReadOnly-Eigenschaft des DBGrids auf True zeigt er mir diese Meldung an.
Ich bekomme den Zugriff echt nicht "gebacken"...

Mysterio08 31. Mai 2010 13:13

Re: Datenabfrage von Delphi via MySQL
 
Hallo,

ich habe den Zugriff auf die MySQL-Datenbank jetzt endlich über ADO herstellen können. Weil es gut sein kann, dass andere ähnliche Probleme haben, möchte ich meinen Lösungsweg schildern:
Zuerst einmal habe ich mir ODBC-Connector runtergeladen und installiert. Nun habe ich primär die TADOConnection-, TADODataSet-Komponente und TDataSource benutzt. Um die Verbindung zu konfigurieren, habe ich auf die TADOConnection mit rechts geklickt, "Verbindungs-String verwenden" und bei "Provider" "Microsoft OLE DB Provider for ODBC Drivers" ausgewählt. Auf der Seite der nächsten Registerkarte, der "Verbindung", gibt man dann die (variablen) Werte ein. Wenn die Verbindung erfolgreich getestet wurde, geht es an die TADODataSet-Komponente: "Connection" auf "ADOConnection1" setzen, "CommandText" eingeben und dann bei beiden Komponenten "Active" bzw. "Connected" auf "True" setzen.
Die "DataSet"-Eigenschaft von DataSource1 wird auf "ADODataSet1" gesetzt.

Mit der TADOQuery-Komponente bietet sich nun die Möglichkeit für Abfragen.
Diese Seite hat mir persönlich weitergeholfen.

mfg.


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