Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MySQL Zugriff über Delphi 2009 (https://www.delphipraxis.net/138990-mysql-zugriff-ueber-delphi-2009-a.html)

Vasco da Gama 21. Aug 2009 08:10

Datenbank: MySQL • Version: 5.0 • Zugriff über: -

MySQL Zugriff über Delphi 2009
 
Hallo ihr Experten! :dp:

Ich würde in meinem Projekt gerne auf meine MySQL Datenbank zugreifen.(Webhoster=bplaced falls das wichtig ist) Nur um in eine Tabelle Datensätze einzufügen und zu ändern, nichts großartiges...

Jetzt suche ich allerdings eine dementsprechen einfache Möglichkeit darauf zuzugreifen. Nachdem ich durch Googlen und Forensuche unter anderem auf ZEOS stieß und bei allen probierten Möglichkeiten entweder von Fehlern überhäuft wurde oder es schlichtweg nicht verstanden hab wollte ich euch fragen, was die für euch sinnvollste und einfachste Möglichkeit ist, möglicherweise auch nur ein Link.

Vielen Dank schonmal

mfG

Bernhard Geyer 21. Aug 2009 08:12

Re: MySQL Zugriff über Delphi 2009
 
hast du überhaupt externen Zugriff auf deine MySQL-DB (Einfach z.B. mit MySQL Admin zu testen das du direkt von MySQL bekommst)?

khh 21. Aug 2009 08:15

Re: MySQL Zugriff über Delphi 2009
 
Zitat:

Zitat von Vasco da Gama
Hallo ihr Experten! :dp:

Ich würde in meinem Projekt gerne auf meine MySQL Datenbank zugreifen.(Webhoster=bplaced falls das wichtig ist) Nur um in eine Tabelle Datensätze einzufügen und zu ändern, nichts großartiges...

Jetzt suche ich allerdings eine dementsprechen einfache Möglichkeit darauf zuzugreifen. Nachdem ich durch Googlen und Forensuche unter anderem auf ZEOS stieß und bei allen probierten Möglichkeiten entweder von Fehlern überhäuft wurde oder es schlichtweg nicht verstanden hab wollte ich euch fragen, was die für euch sinnvollste und einfachste Möglichkeit ist, möglicherweise auch nur ein Link.

Vielen Dank schonmal

mfG

sollte mit ZEOS kein Problem darstellen.

Bernhard Geyer 21. Aug 2009 08:17

Re: MySQL Zugriff über Delphi 2009
 
Zitat:

Zitat von khh
sollte mit ZEOS kein Problem darstellen.

AFAIK bei D2009 nicht - jedenfalls wenn man die Stabile Version nimmt. Diese hat noch keinen D2009-Support. Hier müsste man den SVN/CVS-Trunc versuchen.

Vasco da Gama 21. Aug 2009 08:49

Re: MySQL Zugriff über Delphi 2009
 
Danke für die Antworten erstmal.
Es ist so, dass ich mir mit Tortoise SVN die Delphi 12 Version von Zeos geholt habe, beim kompilieren der Projektgruppe erhalte ich allerdings viele Fehlermeldungen..
unter anderem, dass er ZURL.dcu nicht finden kann... nach einer Windows suche auf allen Festplatten stellte ich fest, dass ich sie weder als .dcu noch als .pas habe...

Könnt ihr mir da helfen?

Vasco da Gama 21. Aug 2009 09:06

Re: MySQL Zugriff über Delphi 2009
 
Ok, ich hab bei meinem Hoster gelesen, dass es nur intern möglich ist, also hat sich das erledigt :( muss ich mit ftp und indy arbeiten... oder?

Bernhard Geyer 21. Aug 2009 09:07

Re: MySQL Zugriff über Delphi 2009
 
Zitat:

Zitat von Vasco da Gama
Ok, ich hab bei meinem Hoster gelesen, dass es nur intern möglich ist, also hat sich das erledigt :( muss ich mit ftp und indy arbeiten... oder?

Und wie soll FTP in die DB schreiben?

Da zu zu 99,9% PHP zur Verfügung hast wirst du dir da was basteln müssen (Stichwort: WebService, JSON, ...)

Vasco da Gama 21. Aug 2009 09:09

Re: MySQL Zugriff über Delphi 2009
 
Ich meine ja, dass ich statt in die DB einfach in Textdateien speicher, wobei das ziemlich unbequem sein wird...
Zitat:

Zitat von Bernhard Geyer
Da zu zu 99,9% PHP zur Verfügung hast wirst du dir da was basteln müssen (Stichwort: WebService, JSON, ...)

Heißt das, dass ich mit Delphi auf php zugreifen kann und damit auf die DB?

khh 21. Aug 2009 09:20

Re: MySQL Zugriff über Delphi 2009
 
Zitat:

Zitat von Vasco da Gama
Ich meine ja, dass ich statt in die DB einfach in Textdateien speicher, wobei das ziemlich unbequem sein wird...
Zitat:

Zitat von Bernhard Geyer
Da zu zu 99,9% PHP zur Verfügung hast wirst du dir da was basteln müssen (Stichwort: WebService, JSON, ...)

Heißt das, dass ich mit Delphi auf php zugreifen kann und damit auf die DB?

wieso den Umweg?

schau dass du zeos oder sonst eine db-komponente zum Laufen bekommst, dann kannst du auf die Db aus Delphi heraus zugreifen.

mkinzler 21. Aug 2009 09:23

Re: MySQL Zugriff über Delphi 2009
 
Zitat:

wieso den Umweg?
Wenn der Provider keinen externen Zgriff zulässt.

Vasco da Gama 21. Aug 2009 09:24

Re: MySQL Zugriff über Delphi 2009
 
Wie gesagt, kann ich bei bplaced nur intern(über php dateien auf dem Server) zugreifen... leider

khh 21. Aug 2009 09:55

Re: MySQL Zugriff über Delphi 2009
 
Zitat:

Zitat von Vasco da Gama
Wie gesagt, kann ich bei bplaced nur intern(über php dateien auf dem Server) zugreifen... leider

sorry hab ich übersehen.

OT: wäre eine Überlegung wert, den Provider zu wechseln ;-)

Bernhard Geyer 21. Aug 2009 09:58

Re: MySQL Zugriff über Delphi 2009
 
Zitat:

Zitat von khh
OT: wäre eine Überlegung wert, den Provider zu wechseln ;-)

Oder sich zu überlegen ob die Gefahr eines offenen DB-Zugangs (Username/Passwort sind bei Implementierungfehlern im DBMS kein Hindernis) eingehen will.
MS hatte bei der MSDE das Leidvoll aufgrund des SQL Slammer's einsehen müssen.

mkinzler 21. Aug 2009 09:59

Re: MySQL Zugriff über Delphi 2009
 
Vielleicht ist Tunneln ( stunnel, zedebee, ssh, ...) erlaubt

Bernhard Geyer 21. Aug 2009 10:04

Re: MySQL Zugriff über Delphi 2009
 
Zitat:

Zitat von mkinzler
Vielleicht ist Tunneln ( stunnel, zedebee, ssh, ...) erlaubt

Löst das sicherheitsproblem. Aber das ZEOS noch nicht soweit bezüglich D2009 würde als alternative die Kompos von DevArt nötig werden die Kostenpflichtig sind.

Vasco da Gama 21. Aug 2009 10:08

Re: MySQL Zugriff über Delphi 2009
 
Hmmm.... Provider werde ich nicht wechseln... Tunneln hab ich keine Ahnung was es ist, aber wenn ich dann kostenpflichtige Komponenten brauche lieber nicht.

Naja, könnte ich theoretisch über Indy auf eine php datei zugreifen und über die auf die Datenbank

Bbommel 21. Aug 2009 10:13

Re: MySQL Zugriff über Delphi 2009
 
Zitat:

Zitat von Vasco da Gama
Zitat:

Zitat von Bernhard Geyer
Da zu zu 99,9% PHP zur Verfügung hast wirst du dir da was basteln müssen (Stichwort: WebService, JSON, ...)

Heißt das, dass ich mit Delphi auf php zugreifen kann und damit auf die DB?

Wenn du es so ausdrücken willst, dann ja. :) Ob du das letztlich wirklich kannst, hängt davon ab, wie viel Zeit und Lust du hast, dich beispielsweise in das von Bernhard genannte Thema Webservices einzuarbeiten. Mit Webservices kannst du dann, sehr grob gesagt, deine Homepage so erweitern, dass sie nicht nur ein "normales" Angebot für Menschen bereitstellt, sondern auch Funktionen, die eher für andere Computer gedacht sind. Diese Funktionen kannst du dann direkt aus Delphi heraus aufrufen (fast so, wie Funktionen in deinem eigenen Programm) und damit dann Aktionen auf dem Server auslösen.

Um das machen zu können, müsstest du dich mit PHP auskennen, und dann diese entsprechenden Funktionen in PHP auf dem Server implementieren. In deinem Fall also wahrscheinlich eine Funktion, die etwas in die MySQL-Datenbank schreibt. Diese Funktion sollte dann ein paar Parameter haben, mit denen du ihr mitteilen kannst, was in die DB geschrieben werden soll. Und aus Delphi heraus rufst du sie dann einfach mit den entsprechenden Parametern auf und schreibst somit dann über einen kleinen Umweg in die Datenbank. Ob das von der Performance oder der Art der Daten her für dich letztlich relevant ist, kann ich natürlich erstmal nicht beurteilen.

Wenn das für dich interessant klingt, solltest du vielleicht folgendes tun:
  • Erstmal ein bisschen die Suchmaschine deiner Wahl mit der Suche nach "Webservices" oder "Web Services" beschäftigen und dich etwas ins Thema einlesen. Du solltest dabei dann auch über Stichworte wie SOAP oder WSDL stolpern.
  • Rausfinden, ob das PHP bei deinem Provider SOAP/Webservices direkt unterstützt, oder ob du da noch selber etwas einrichten musst. Eine kleine Bibliothek, die nach meiner Erfahrung bei so gut wie jedem Provider laufen sollte, wäre im Notfall nuSOAP.
  • Dich mit der Umsetzung von Web Services in Delphi beschäftigen. Wenn du soweit bist, ist das dann eigentlich kinderleicht - es gibt z.B. bei den Kollegen von nebenan ein Tutorial.

Tja, jetzt liegt wohl letztlich dann daran, ob du Zeit und Lust hast, dich mit dem Thema zu beschäftigen. Ich fands damals eigentlich ganz spannend und faszinierend, was so alles geht. :)

Bis denn
Bommel

mkinzler 21. Aug 2009 10:15

Re: MySQL Zugriff über Delphi 2009
 
Tunneln bedeutet über ein anderes Protokoll.
Code:
                                 verschlüsselt
Anwendung -> localhost Port 3360 -------------> Entfernter Host Port 22 -> MySQL-Server Port 3360

Vasco da Gama 21. Aug 2009 16:58

Re: MySQL Zugriff über Delphi 2009
 
Ich habe mich erkundigt ob ich nuSOAP installieren darf oder es auch so geht, und bekam zur antwort, dass es nicht geht, wenn ichs richtig verstanden habe:
- Hier meine Frage mit Antwort -

anse 21. Aug 2009 22:41

Re: MySQL Zugriff über Delphi 2009
 
Wenn du mich fragst hat chrisb dir eine Antwort auf eine ganz andere Frage gegeben . SOAP Kommunikation - egal ob PHP intern oder mit NuSoap - läuft normalerweise auf Port 80 über http, wie ein normaler Browser, und ist damit auf einem Webserver fast immer erlaubt, weil sie technisch gesehen eben das selbe ist wie ein Zugriff mit einem Webbrowser. Deswegen denke ich das du evtl. nochmal nachaken solltest, ob du jetzt SOAP Unterstützung bekommst. NuSoap kannst du aber auch ohne Nachfrage und Installation einer Extension benutzen, denn das ist ja nur eine Sammlung von PHP Skripten die du hochladen und include'n mußt.

Bbommel 24. Aug 2009 10:20

Re: MySQL Zugriff über Delphi 2009
 
Zitat:

Zitat von Vasco da Gama
Ich habe mich erkundigt ob ich nuSOAP installieren darf oder es auch so geht, und bekam zur antwort, dass es nicht geht, wenn ichs richtig verstanden habe:
- Hier meine Frage mit Antwort -

Wie anse schrieb, trifft die Antwort eigentlich nicht auf dein Problem zu. Wahrscheinlich ging chrisb einfach von etwas anderem aus: Du kannst SOAP ja nicht nur so nutzen, wie von mir beschrieben, sondern auch so, indem deine Homepage über SOAP von einem anderen Server (einer anderen Homepage) Daten abfragt und dann bei dir anzeigt. Und genau diese Funktion, also dass du dafür sorgst, dass der Server von bplaced eine Verbidnung zu einem anderen Server aufbaut, wird wohl verboten sein bzw. verhindert werden. Wie gesagt: Das willst du ja auch gar nicht.

Mit nuSOAP solltest du keine Probleme haben - einfach ausprobieren. Es sind ja nur ein paar PHP-Dateien, die man hochladen muss. Und dann halt selbst verstehen, wie das Ganze funktioniert.

Bis denn
Bommel

torud 27. Aug 2009 12:57

Re: MySQL Zugriff über Delphi 2009
 
Eigentlich reicht es für einfache Anwendungen, die keine grösseren Schutz benötigen, völlig aus, über http Kommandos an eine PHP-Datei zu senden, die dann entsprechend der Kommandos die Daten entweder aus der Datenbank ausliest und zurück gibt, oder aber gesendete Daten prüft und in die Datenbank einträgt oder updatet.

Sowas geht recht einfach mit den Indi´s, nem einfachen php-Script und einer mySql-Datenbank auf Deinem Server.

Ist wirklich nicht schwer!

Vasco da Gama 27. Aug 2009 16:06

Re: MySQL Zugriff über Delphi 2009
 
Hallo BBommel und troud.

Da ich keine wichtigen daten wie passwörter übertrage, sondern nur z.B. einen aktuellen Spielstand bräuchte ich keine große Sicherheit.

Kannst du mir erklären, wie ich mit Indy eine php datei 'ausführe'?

DAnke, mfg

torud 27. Aug 2009 19:00

Re: MySQL Zugriff über Delphi 2009
 
Du brauchst eigentlich nur auf Deinem Formular die Komponente IdHTTP1 zu platzieren, einen Button erzeugen und ungefähr folgenden Code dem Button zuweisen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   Stream:TStringStream;
   LParams: TStringlist;
begin
  Stream   := TStringStream.Create('');//Rückgabe-Stream erstellen
  LParams  := TStringlist.Create;
  try
    LParams.Add('cmd=TuWas');//+name);
    LParams.Add('id='+inttostr(123));
    LParams.Add('datum='+DateToStr(Date));
    LParams.Add('zeit='+TimeToStr(Time));
    try
      IdHTTP1.Post('http://www.dein_server.de/scripts/feedback.php', LParams, Stream);
      Showmessage(Stream.DataString); //Antwort von Deinem php-Script
    except
       on E: Exception do
         showmessage('Leider trat folgendes Problem auf: ' + E.Message);
    end;
  finally
    LParams.Free;
    Stream.Free;
  end;
end;
So und hier noch ein ungefährer Aufbau des php-Scripts

Delphi-Quellcode:
<?

include("connect.php"); //diese php-datei stellt die verbindung zu sql-datenbank her

//übernahme der empfangenen paramter
$cmd        = $_POST['cmd'];
$id         = $_POST['id'];
$datum      = strftime("%Y.%m.%d");
$zeit       = $uhrzeit = date("H:i:s");

//ausgabe der daten
//das gesendete "TuWas" erhälst du hier also zurück
//man kann natürlich auch echte kommandos schicken und diese dann auswerten/reagieren
echo($cmd);

?>
Ist jetzt nicht getestet, aber so in der Art habe ich das schon ziemlich oft gemacht. Kannst Du Dir anpassen, wie Du´s brauchst.

Vasco da Gama 30. Aug 2009 12:11

Re: MySQL Zugriff über Delphi 2009
 
Danke, ich habs mit folgenden Codes probiert:
Delphi-Quellcode:
Stream   := TStringStream.Create('');//Rückgabe-Stream erstellen
  LParams  := TStringlist.Create;
  try
    LParams.Add('name=NonPlusUltra');//+name);
    LParams.Add('level='+IntToStr(GameState.Level));
    try
      IdHTTP1.Post('http://www.vascodagama.bplaced.net/programs/lotnc/saves.php', LParams, Stream);
      Showmessage(Stream.DataString); //Antwort von Deinem php-Script
    except
       on E: Exception do
         showmessage('Leider trat folgendes Problem auf: ' + E.Message);
    end;
  finally
    LParams.Free;
    Stream.Free;
  end
Die saves.php
Code:
<?php



//übernahme der empfangenen paramter
$name       = $_POST['name'];
$level      = $_POST['level'];

//ausgabe der daten
//das gesendete "TuWas" erhälst du hier also zurück
//man kann natürlich auch echte kommandos schicken und diese dann auswerten/reagieren

$verbindung = mysql_connect("localhost", "BENUTZERNAME" , "PASSWORT")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");

mysql_select_db("DATENBANKNAME") or die ("Datenbank konnte nicht ausgewählt werden");


$result = mysql_query("UPDATE lotnc SET level='$level' WHERE name LIKE '$name'");

?>
Ich bekomme eine leere Message Box also sollte alles funktioniert haben, in der Datenbank ist allerdings noch alles beim alten...

mfG

torud 30. Aug 2009 12:25

Re: MySQL Zugriff über Delphi 2009
 
Hm, dann versuchs doch mal so, dass DU Dir per Echo die ID des zuletzt geänderten Datensatzes schicken lässt.

Damit sollte es aber klappen:
mysql_affected_rows — Liefert die Anzahl betroffener Datensätze einer vorhergehenden MySQL Operation


Dann würde ich mal noch prüfen, ob die 2 Parameter für das Update überhaupt dem upzudatenden Datensatz entsprechen in ihrer Schreibweise.

Wenn das alles nix hilft, würde ich es mal mit einem Testinsert der Daten versuchen und einen Blick in die Datenbank riskieren, respektive Dir die ID des neuen Datensatzes per echo schicken lassen.

Vasco da Gama 30. Aug 2009 12:47

Re: MySQL Zugriff über Delphi 2009
 
Ach gott bin ich blöd! :wall:
ich hab name geschrieben anstatt username
jetzt funktionierts super. Vielen dank :) :dp:


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