![]() |
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; |
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 |
Re: MySQL ohne Komponenten
Hat sich seit meinem letzten Eintrag zu diesem Problem was getan ?
G Christian |
Re: MySQL ohne Komponenten
Ich habe gemäß dem Tut hier einen Button mit folgendem Inhalt erstellt:
Delphi-Quellcode:
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.
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; Kann mir wer sagen, was ich falsch mache? |
Re: MySQL ohne Komponenten
*nochmal hochschieb*
Da kann mir doch bestimmt wer helfen ;) |
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? |
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 ;) |
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 :) ) |
Re: MySQL ohne Komponenten
Wenn du Putty nicht mitliefern willst, musst du eben den SSH-Tunnel aus deinem Programm erzeugen.
Schau mal auf ![]() |
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 17:55 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