Delphi-PRAXiS
Seite 12 von 36   « Erste     2101112 131422     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Delphi MySQL ohne Komponenten (https://www.delphipraxis.net/6543-mysql-ohne-komponenten.html)

childen 4. Okt 2005 19:23

Re: MySQL ohne Komponenten
 
So, ich hab den Code jetzt noch mal einbisschen verändert, allerdings hat sich an dem Problem wie erwartet nichst geänder:

Delphi-Quellcode:
type tserverdata = record
                      host:string;
                      user:string;
                      passwd:string;
                    end;

procedure connect(serverdata:tserverdata);
function getserverdata():tserverdata;

implementation

procedure connect(serverdata:tserverdata);
var _myCon: PMySQL;
    host,user,passwd,db:string;
begin
  host := serverdata.host;
  user := serverdata.user;
  passwd := serverdata.passwd;
  db := 'test1';
  _mycon := mysql_init(nil); //<--- hier wird der Fehler ausgegeben
 
  if mysql_real_connect(_myCon, pchar(host), pchar(user), pchar(passwd), pchar(db), 3306, nil, 0) = nil then
  begin
    ShowMessage('Die Verbindung konnte nicht hergestellt werden. Ursache: ' + mysql_error(_myCon));
    Exit;
  end;
end;

function getserverdata():tserverdata;
begin
  result.host := edit1.text;
  result.user := edit2.text;
  result.passwd := edit3.text;
end;

childen 7. Okt 2005 12:02

Re: MySQL ohne Komponenten
 
Hat denn keiner noch eine Idee zu dem Probelm?

Sonst muss ich mich nach einer anderen Methode umgucken um mysql querys zu senden.
Was würdet ihr mir denn für Möglichkeiten empfehlen?

G Christian

childen 30. Dez 2005 02:56

Re: MySQL ohne Komponenten
 
Hat sich seit meinem letzten Eintrag zu diesem Problem was getan ?

G Christian

Stony2k 17. Jan 2006 14:33

Re: MySQL ohne Komponenten
 
Ich habe gemäß dem Tut hier einen Button mit folgendem Inhalt erstellt:

Delphi-Quellcode:
procedure Tfrm_main.SelectClick(Sender: TObject);
var
  Posts: TPostEntries;
  //idAuthor: String;  //zum Zwischenspeichern der Verfasser-ID
  query: PChar;
  _myCon: PMySQL;
  _myRes: PMySQL_Res; //hier wird der gesamte Ergebnissatz gespeichert
  //_mySubRes: PMySQL_Res; //benötigt, um Autor zu ermmitteln
  _myRow: PMySQL_Row; //enthält den aktuellen Datensatz
  //_mySubRow: PMySQL_Row; //benötigt, um Autor zu ermmitteln
  i: Integer;
begin
 
  {...}
  {Verbindung herstellen wie in Kap. 1 beschrieben}
 
  query := 'SELECT * FROM pw_change ORDER BY account';
  mysql_real_query(_myCon, query, Length(query));
 
  _myRes := mysql_store_result(_myCon); //alle Datensätze vom Server anfordern
  if _myRes = nil then
  begin
    ShowMessage('Es konnten keine Datensätze zurückgebenen werden. Ursache: ' + mysql_error(_myCon));
    Exit;
  end;
 
  SetLength(Posts, mysql_num_rows(_myRes)); //Posts-Array-Größe auf Anzahl der Datensätze setzen

  for i := 0 to High(Posts) do
  begin
    _myRow := mysql_fetch_row(_myRes);  //Datensatz abholen
    Posts[i].account := _myRow[0]; //ID des Posts ist erstes Feld im Datensatz
    Posts[i].passwort := _myRow[1];         //Zeitpunkt ist drittes Feld

    {query := PChar('SELECT name FROM users WHERE id=' + idAuthor);
    _mySubRes := mysql_store_result(_myCon);
    _mySubRow := mysql_fetch_row(_mySubRes);
    Posts[i].author := _mySubRow[0];

    mysql_free_result(_mySubRes);       //Ergebnissatz löschen }
  end;

  mysql_free_result(_myRes);            //Ergebnissätze löschen

  {...}
  {Verbindung schließen oder etwas anderes machen}
end;
Ich verbinde erst zur DB mit den Codezielen aus diesem Tut. Nachdem Showmessage mir sagt, ich habe erfolgreich verbunden, drücke ich den Button.. und dann friert das Programm ein.

Kann mir wer sagen, was ich falsch mache?

Stony2k 18. Jan 2006 05:22

Re: MySQL ohne Komponenten
 
*nochmal hochschieb*

Da kann mir doch bestimmt wer helfen ;)

Tyler 28. Jan 2006 10:21

Re: MySQL ohne Komponenten
 
Wie bekomme ich nun in diese Routine, die grundsätzlich erstmal 1a funktioniert, eine Verbindung über einen SSH Tunnel hin?

Hintergrund: Viele Provider, bzw. die meisten, verbieten grundsätzlich aus Sicherheitsgründen den Zugriff auf ihre MySQL-Server von Clients, die nicht "localhost" von localhost kommen. Somit hab ich mit einem Delphi-Client hier zuhause ja ein Problem.
Entweder ich greife über HTTP und PHP auf den Server zu, was aber auch ne Menge Arbeit ist, oder ich nutze SSH und bastel mir ein Tunnel, und klopfe direkt als "localhost" am Server an.


Jemand ne Idee, ne zündende?

Chewie 28. Jan 2006 11:00

Re: MySQL ohne Komponenten
 
Grundsätzlich sollte dieser SSH-Tunnel doch transparent sein, oder?
Du trägst also den lokalen Endpunkt des Tunnels als MySQL-Server ein.

Theoretisch zumindest ;)

Tyler 28. Jan 2006 11:07

Re: MySQL ohne Komponenten
 
Jau, das funktioniert. Aber dann müsste ich Putty ja noch extra als Programm mitliefern und von meinem DelphiTool aus die Exe entsprechend starten. Schöner wärs ja, wenn das mein Programm selber könnte :)

(Grundsätzlich ist das natürlich ne Lösung, richtig :) )

Chewie 28. Jan 2006 11:46

Re: MySQL ohne Komponenten
 
Wenn du Putty nicht mitliefern willst, musst du eben den SSH-Tunnel aus deinem Programm erzeugen.
Schau mal auf http://www.torry.net/ nach, vielleicht gibts dort entsprechende Konmponenten.

Troka 30. Jan 2006 12:52

Re: MySQL ohne Komponenten
 
Ich bekomme beim Auslesen der Daten folgenden Fehler:
'Access violation at adress 00BB357A in module 'libmysql.dll'. Read of address 00000388'

Delphi-Quellcode:
procedure TForm1.listboxfill;
var
  Posts: TPostEntries;
  query: PChar;
  _myCon: PMySQL;
  _myRes: PMySQL_Res; //hier wird der gesamte Ergebnissatz gespeichert
  _myRow: PMySQL_Row; //enthält den aktuellen Datensatz
  i: Integer;
begin
  {Verbindung herstellen}
  query := 'SELECT * FROM link ORDER BY id';
  _myCon:=PMySQL('0'); //Damit Variable initalisiert wird
  mysql_real_query(_myCon, query, Length(query));
  _myRes := mysql_store_result(_myCon); //alle Datensätze vom Server anfordern
  if _myRes = nil then
  begin
    ShowMessage('Es konnten keine Datensätze zurückgebenen werden. Ursache: ' + mysql_error(_myCon));
    Exit;
  end;
  SetLength(Posts, mysql_num_rows(_myRes)); //Posts-Array-Größe auf Anzahl der Datensätze setzen
    for i := 0 to High(Posts) do
  begin
    _myRow := mysql_fetch_row(_myRes);  //Datensatz abholen
    Posts[i].link := _myRow[0]; //Link ist erstes Feld im Datensatz
    Posts[i].nummer := StrToInt(_myRow[1]);         //ID ist das zweite Feld
    Posts[i].name := _myRow[2];
    listbox1.Items.Add(Posts[i].name);
  end;

  mysql_free_result(_myRes);            //Ergebnissätze löschen
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 Uhr.
Seite 12 von 36   « Erste     2101112 131422     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz