![]() |
Re: MySQL ohne Komponenten
Delphi-Quellcode:
query :='INSERT INTO buch (Kartei, Autor, Titel, Genre, ISBN) VALUES (''1'','''+a+''',''1'',''1'',''1'')';
|
Re: MySQL ohne Komponenten
Oder
Delphi-Quellcode:
query := Format('INSERT INTO buch (Kartei, Autor, Titel, Genre, ISBN) VALUES (%s, %s, %s, %s, %s)',[QuotedStr('1'), QuotedStr(a), QuotedStr('1'), QuotedStr('1'), QuotedStr('1')]);
|
Re: MySQL ohne Komponenten
Kann diese Unit eigentlich auch mit Lazarus benutzt werden? :D
Musste meinen Rechner platt machen und habe nun keine Lizenzdatei mehr für mein Delphi 2005 PE. |
Re: MySQL ohne Komponenten
Zitat:
![]() (um dein Delphi nutzen zu können mußtest du dich da ja mal registrieren und das Delphi freischalten und somit haben die auch deine Lizenzen) Zitat:
[edit] Könnte mal bitte jemand die Header-Datei in den ersten Post einfügen? Die neue DownloadURL ( ![]() [edit2] Es scheint garkeiner der Links aus Post #1 mehr zu gehn. ![]() (weiß allerdings nicht, ob es die selbe Unit ist) |
Re: MySQL ohne Komponenten
Juhu, habe nun endlich alles wieder installiert.
Irgendwie hab ich jetzt aber beim compelieren meiner Datenbank Anwendung ein kleines oder vll auch großes(?!) Startproblem. Delphi springt in die Unit mysql.pas und zweifelt folgende Zeile an.
Delphi-Quellcode:
{$INCLUDE *_win32.inc}
Zitat:
--- Edit --- Ohh ich doof hab den falschen Pfad zur Bibliothek hinzugefügt. :oops: :lol: |
Re: MySQL ohne Komponenten
eigentlich muß die im selben Verzeichnis liegen, wie die mysql.pas
|
AW: MySQL ohne Komponenten
Servus,
ich bin ganz neu bei Delphi und hätte da wegen einer Datenbankverbindung eine Frage. Ich habe mir den Quelltext von hier kopiert. Zur Info: Benutze Turbo Delphi aus Borland Studio 2006 libmysql.dll liegt in System / System32 / Projektverzeichnis Version ist 5.1.41.0 direkt aus XAMPP rauskopiert Die mysql.pas und mysql_win32.inc sind im Projektverzeichnis Quelltext:
Delphi-Quellcode:
jetzt kommt beim kompilieren folgende fehlermeldung:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, mySQL; type TFrame1 = class(TFrame) private { Private-Deklarationen } public { Public-Deklarationen } end; var _myCon: PMySQL; //unseren Verbindungsdeskriptor host, user, pass, db: PChar; //die Anmeldedaten implementation {$R *.dfm} begin //wir werden uns als Root-Benutzer in localhost einloggen, ohne eine //bestimmte Datenbank auszuwählen host := 'localhost'; user := 'root'; pass := nil; db := 'hallo'; //jetzt wird _myCon initialisiert _myCon := mysql_init(nil); if _myCon = nil then begin ShowMessage('Nicht genug freier Speicher, um Verbindungsdeskriptor zu initialisieren'); Exit; end; //anschließend wird die Verbindung hergestellt if mysql_real_connect(_myCon, host, user, pass, db, 3306, nil, 0) = nil then begin ShowMessage('Die Verbindung konnte nicht hergestellt werden. Ursache: ' + mysql_error(_myCon)); Exit; end; ShowMessage('Verbindung hergestellt'); //zum Schluss wird die Verbindung wieder geschlossen mysql_close(_myCon); end. Im Project1.exe ist eine Exception der Klasse Exception mit der Meldung 'MySQL: libmysql not loaded' aufgetreten. Weiß jemand ne Lösung dazu? Im Voraus schonmal vielen Dank! |
AW: MySQL ohne Komponenten
Und an welcher Stelle tritt dieser Fehler auf?
Delphi-Quellcode:
Diesen Teil hast du auch angepaßt?
//wir werden uns als Root-Benutzer in localhost einloggen, ohne eine
//bestimmte Datenbank auszuwählen host := 'localhost'; user := 'root'; pass := nil; db := 'hallo'; |
AW: MySQL ohne Komponenten
Fehler tritt hier auf:
Delphi-Quellcode:
Im Ereignisprotokoll steht:
_myCon := mysql_init(nil);
Erste Gelegenheit für Exception bei $7C812A6B. Exception-Klasse Exception mit Meldung 'MySQL: libmysql not loaded'. Prozess Project1.exe (6084) Ja das habe ich angepasst. Der mySQL Server läuft über XAMPP auf meinem Rechner. Ok bei User steht "root@localhost" aber das zu ändern bringt nichts. Wenn ich den Fehler ignoriere kommt als nächstes ein popup mit dieser meldung: Runtime Error 217 at 0045a9d0 Im Ereignisprotokoll steht: Modul laden: MSLBUI.dll. Ohne Debug-Infos. Basisadresse: $605D0000. Prozess Project1.exe (5284) |
AW: MySQL ohne Komponenten
Hmmm, hab mal genau reingesehn, also die Unit/Header aus dem Beitrag vom "28. Apr 2010, 08:17" sind anscheinend für MySQL 3.x ... demnach könnte es schon stimmen, daß die benötigten/benutzten APIs in der DLL nicht gefunden werden.
Das war allerdings auch der einzige Heder, welchen ich mal fand (viele Links hier im Thread sind ja leider tot) |
AW: MySQL ohne Komponenten
Ich hab die Datei von hier:
![]() Und da steht das diese vom (Version 2009-09-13) ist also dürfte das doch keine probleme aufwerfen :( Kann es sein das Turbo Delphi 2006 einfach nicht will? |
AW: MySQL ohne Komponenten
Ja, und schau aber auch mal in die mysql.pas rein.
Diese Unit wurde zwar aktualisiert, damit sie bis Delph 2010 läuft, allerdings wurde nur die Unit an Delphi, aber nicht an MySQL angepaßt, denn da ist sie (und anscheinend auch viele andere C++-Header) bei MySQL 3.1 stehengeblieben. (selbst der auf mysql.com unter MySQL 5.x verlinkte C++-Header ist nur für MySQL 3.1 :wall: ) |
AW: MySQL ohne Komponenten
:(
Ok dann muss ich es wohl aufgeben. Bin Programmieranfänger und hab so schon kaum Ahnung und dann noch in so ner komplizierten Datei rumwerkeln wird nichts. Vielleicht gibt es ja jemand der das mal auf 5.1 aktualisiert oder ich such mir irgendwo her Delphi2010 da ist das ja schon integriert. |
AW: MySQL ohne Komponenten
Du kannst ja immernoch eine MySQL-3.x-DLL verwenden.
Aber wenn du mal die MySQL-5.x-Header-Dateien findest (z.B. in C++ eine mysql.h oder Ähnlich), dann kannst du dich gerne melden und wir helfen beim Übersetzen. |
AW: MySQL ohne Komponenten
Mit ner 3.1 dll geht aber der zugriff auf den 5.1 Server nicht oder?
Ich such mal bisl rum übers WE. Danke für deine Hilfe |
AW: MySQL ohne Komponenten
Standardmässig nicht. es gibt m.W. aber eine Einstellung am Server, welche die alte Zugriffsmethode ermöglicht
|
AW: MySQL ohne Komponenten
Grade gesehn, die Erwähnung auf MySQL 4.0 5.0 5.1 stehen etwas versteckter im ChangeLog (bis 3.x hatte man das noch recht offensichtlich erwähnt).
Also müßte man doch nochmal nachsehn, warum da nun dieser Fehler auftritt. |
AW: MySQL ohne Komponenten
Ich schreib gerade den Rest meiner BA fertig und habe deshalb gerade wenig Zeit dafür.
Werde mich in zwei bis drei Wochen nochmal genauer damit beschäftigen. Will unbedingt raus finden warum der Dreck nicht geht... -.- |
AW: MySQL ohne Komponenten
Also, ich versuch es selber grade mal und bekomme mit meinen eigenen Headern ebenfalls einen Fehler raus.
Zitat:
Zitat:
(wenn ich wieder daheim bin ... hier möchte ich das jetzt nicht drauf installieren) hab hier mal einige libmysql.dll's zusammengestellt diese sind direkt von mysql.com und Einige sind mit Debuginfos kompiliert wurden: ![]() Kannst es ja mal mit Einer davon versuchen. |
AW: MySQL ohne Komponenten
versuch es mal so, also inklusive mysql_server_init und mysql_thread_init
PS: mysql_thread_init/mysql_thread_end muß in jeden Thread aufgerufen werden, wo man das MySQL nutzen will.
Delphi-Quellcode:
var
sql: pmysql; args, groups: array[0..9] of PAnsiChar; libmysql_load(nil); groups[0] := nil; mysql_server_init(0, @args, @groups); mysql_thread_init; sql := mysql_init(nil); sql := mysql_real_connect(sql, 'localhost', 'root', 'FNSE1997', '', 3306, nil, 0); mysql_close(sql); mysql_thread_end; libmysql_free; |
AW: MySQL ohne Komponenten
Zitat:
Delphi-Quellcode:
und als nächstes nun gleich ein
var
_myCon: PMySQL; //unseren Verbindungsdeskriptor host, user, pass, db: PChar; //die Anmeldedaten begin //wir werden uns...
Delphi-Quellcode:
einpflegen, dann klappt das Laden der .dll.
libmysql_load(nil);
Also:
Delphi-Quellcode:
var
_myCon: PMySQL; //unseren Verbindungsdeskriptor host, user, pass, db: PChar; //die Anmeldedaten begin // = Load .dll libmysql_load(nil); //wir werden uns... Das hat auch himitsu in seinem letzten Beispiel mitgegeben.(Als Thread verpackt) |
AW: MySQL ohne Komponenten
Das verbinden mit dem SQL Server funktioniert, allerdings bekomme ich jedes mal wenn ich eine query absende den Fehler "MySQL Server has gone away".
Ein Timeout kann es aber nicht sein, denn das passiert selbst wenn ich die query unmittelbar nach der Connection absetze. Den Befehl mysql_close(_myCon); rufe ich allein in der FormClose Procedure auf, also daran kann es auch nicht liegen. Kennt jemand das Problem? Bzw noch besser die Lösung. |
AW: MySQL ohne Komponenten
Hast Du nach der Liste von
![]() |
AW: MySQL ohne Komponenten
ja die Liste hatte ich mir auch schon angesehn. Hilft mir aber nicht wirklich weiter, da timeout, Datengröße (wenige Bytes) und query-Größe (ebenfalls wenige Bytes) alles auschließen kann.
Da ich php Seiten habe die auf die gleiche Datenbank ohne Probleme zugreifen, muss ich annehmen, dass es am Delphi-Programm liegt. Nur woran. Ohne Code natürlich schwer zu diagnostizieren, den werde ich heute Abend nachreichen. Aber im Grunde habe ich mich genau an das Tutorial hier gehalten. |
AW: MySQL ohne Komponenten
so nun hier der Code der gleich zu Programmstart eine Verbindung aufbaut und versucht aus einer Tabelle zu lesen, aber mit der Meldung "MYSQL Server has gone away" scheitert:
Delphi-Quellcode:
type
TForm1 = class(TForm) SG1: TStringGrid; ... ... ... private { Private-Deklarationen } public _myCon: PMySQL; //unseren Verbindungsdeskriptor host, user, pass, db: PAnsiChar; //die Anmeldedaten _myRes: PMySQL_Res; //hier wird der gesamte Ergebnissatz gespeichert _myRow: PMySQL_Row; //enthält den aktuellen Datensatz query: PChar; { Public-Deklarationen } end;
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i: integer; begin host := 'myhost.webpack.hosteurope.de'; user := 'MeMeMe'; pass := 'myPass'; db := 'myDB'; //jetzt wird _myCon initialisiert libmysql_load(nil); _myCon := mysql_init(nil); mysql_real_connect(_myCon, host, user, pass, db, 3306, nil, 0); if _myCon = nil then showmessage('Verbindung konnte nicht hergestellt werden.'); SG1.Cells[0, 0] := 'Report-Nr.'; SG1.Cells[1, 0] := 'Überschrift'; query := PChar('SELECT * FROM t_Projects ORDER BY id'); mysql_real_query(_myCon, PAnsiChar(query), Length(query)); _myRes := mysql_store_result(_myCon); if _myRes = nil then begin ShowMessage(mysql_error(_myCon)); Exit; end; SG1.RowCount := mysql_num_rows(_myRes) + 2; for i := 0 to mysql_num_rows(form1._myRes) do begin _myRow := mysql_fetch_row(_myRes); //Datensatz abholen SG1.Cells[i, 0] := form1._myRow[0]; SG1.Cells[i, 1] := form1._myRow[1]; end; mysql_free_result(_myRes); end; |
AW: MySQL ohne Komponenten
Hab Deinen Code getestet, so weit ist er richtig und funktioniert. Das Problem liegt ganz offensichtlich an Deinem Datenbank-Server. Sehr oft verbieten die Webhoster den direkten Zugriff auf die Datenbank, so dass man nur über Webserver o.ä. zugreifen darf.
In der ![]() Gruß |
AW: MySQL ohne Komponenten
Webhoster unterbinden Connects zu ihrem mySQL-Servern von außen.
Die Gründe liegen auf der Hand. Es wäre ein nicht zu unterschätzendes Sicherheitsrisiko. |
AW: MySQL ohne Komponenten
das erklärt es natürlich
danke für eure Mühe bloss wenn es ein Sicherheitsrisiko ist, ist es das mit ODBC doch auch. Dann werd ich mir wohl überlegen müssen ob ich das ganze Webseitenbasiert machen soll oder ODBC Komponenten für Delphi suchen soll. |
AW: MySQL ohne Komponenten
Hey Leute,
hab leider ein kleines Problem... muss dazu sagen, bin Delphi Anfänger. Kriege bei Auführung des Scripts die Meldung "Zugriffsverletzung bei Adresse 004532DF in Modul 'Project1.exe'. Lesen von Adresse 00000004" Die angeforderten Daten werden allerdings ausgegeben. Hier mein Code:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, mySQL; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public _myCon: PMySQL; //unseren Verbindungsdeskriptor host, user, pass, db: PAnsiChar; //die Anmeldedaten _myRes: PMySQL_Res; //hier wird der gesamte Ergebnissatz gespeichert _myRow: PMySQL_Row; //enthält den aktuellen Datensatz query: PChar; { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var name: string; i: integer; begin host := 'localhost'; user := 'root'; pass := nil; db := 'bestellwesen'; //jetzt wird _myCon initialisiert libmysql_load(nil); _myCon := mysql_init(nil); mysql_real_connect(_myCon, host, user, pass, db, 3306, nil, 0); if _myCon = nil then begin showmessage('Verbindung konnte nicht hergestellt werden.'); end; showmessage('OK'); query := PChar('Select * FROM verkaufer WHERE id=1'); mysql_real_query(_myCon, PAnsiChar(query), Length(query)); _myRes := mysql_store_result(_myCon); for i := 0 to mysql_num_rows(Form1._myRes) do begin _myRow := mysql_fetch_row(_myRes); //Datensatz abholen name := form1._myRow[1]; // In dieser Zeile gibt der Compiler den Fehler an] showmessage(name); // Hier wird noch ein resultat ausgegeben, danach erfolgt der Fehler. end; mysql_free_result(_myRes); end; end. |
AW: MySQL ohne Komponenten
Was meint der Debugger?
|
AW: MySQL ohne Komponenten
Wie ist es so (benannte Instanz form1 weggelassen und Indizes angepasst)?
Delphi-Quellcode:
for i := 0 to mysql_num_rows(_myRes) - 1 do
begin _myRow := mysql_fetch_row(_myRes); //Datensatz abholen name := _myRow[i]; // In dieser Zeile gibt der Compiler den Fehler an] showmessage(name); // Hier wird noch ein resultat ausgegeben, danach erfolgt der Fehler. end; |
AW: MySQL ohne Komponenten
Zitat:
Spaß bei Seite, klappt nun... super, vielen vielen Dank :) |
AW: MySQL ohne Komponenten
Hallo,
ersteinmal vielen Tag für dieses klasse Tutorial. Ich habe versucht das Tutorial bei mir ans laufen zu bekommen. Leider bekomme ich beim Compilieren einen Fehler. In der Funktion UpdateField() wird eine Procedure copyStr() bedingt erstellt, im Falle, dass man nicht einen x64 hat.
Delphi-Quellcode:
Leider bleibt der compiler an der Stelle leider immer stehen. Und gibt folgende Meldung aus:
function UpdateField(f: PMYSQL_FIELD): TMYSQL_FIELD;
{$IFNDEF CPUX64} procedure CopyStr(var dest: PAnsiChar; var DestLen: Cardinal; src: PAnsiChar); //eax: dest edx: DestLen ecx: src asm mysql.pas(1603,3) Fatal: Syntax error, "BEGIN" expected but "ASM" found Nach meinen Recherchen müsste der Compiler eigentlich mit der Konstruktion keine Probleme haben und ich hab inzwichen auch keine Idee mehr, wie ich dieses Problem beheben soll/kann. Vielleicht kann mir einer hier im Forum einen Tip geben, wie ich an der Stelle weiter komme. Ich verwende Lazarus mit FreePascal 1.0.2 mit dem FreePascalCompier 2.6.0 unter WinXP auf einer virtuellen Maschine. Schon einmal vielen Dank im Vorraus für hilfreiche Tips. Danke, Oliver |
AW: MySQL ohne Komponenten
Eventuell kann dein Compilier keine Assembler-Prozeduren an dieser Stelle behandeln?
OK, oder der Compilier läuft einfach in einem falschen Modus? Irgendwie konnte man ihn ja in einen delphikompatiblen Modus umschalten. |
AW: MySQL ohne Komponenten
Hallo,
ich lese mich gerade hier ein und hätte eine Frage. Da ich keine localhost Datenbank habe, sondern meine liegt auf ein Root Server im Internet, muss ich die MySql Datenbank dann Global frei schalten, weil sonst werden die ja nur local angelegt. Oder übergebt ihr die mysql_real_connect Befehle an eine php Datei ? mfg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 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