![]() |
Re: MySQL ohne Komponenten
Hat nun schon jemand eine passende Lösung, wie man die INSERT INTO Funktion mit Variablen nutzen kann?
|
Re: MySQL ohne Komponenten
Zitat:
|
Re: MySQL ohne Komponenten
Naja, wie sage ich jetzt, dass er den inhalt einer Variablen speichert:
Delphi-Quellcode:
so geht es ja leider nicht!!
query := 'INSERT INTO tabelle (text, name) VALUES (var1 , var2)';
|
Re: MySQL ohne Komponenten
:hi:
Eventuell so:
Delphi-Quellcode:
MJ
'INSERT INTO tabelle (text, name) VALUES ('+QuotedStr(var1)+','+QuotedStr(var1)+')';
|
Re: MySQL ohne Komponenten
dabei kommt leider das raus:
Zitat:
|
Re: MySQL ohne Komponenten
SQL-Code:
INSERT INTO tabelle (text, name) VALUES (:var1, :var2)
Delphi-Quellcode:
<DS>.ParamByName('var1').Value = var1;
|
Re: MySQL ohne Komponenten
Was ist mit dem letzten Teil gemeint? <DS> ?
|
Re: MySQL ohne Komponenten
Name der TDataSet-Komponente (TQuery, TTable, usw.)
[Edit: Du arbeitest ja mit der lowlevel API, dann wird dir das nicht helfen. Aber vielleicht:
Delphi-Quellcode:
]
'INSERT INTO tabelle (text, name) VALUES ('+PChar(QuotedStr(var1))+','+PChar(QuotedStr(var1))+')';
|
Re: MySQL ohne Komponenten
da kommt dann leider wieder die Fehlermeldung:
Zitat:
|
Re: MySQL ohne Komponenten
Zeig mal den Funktionsaufruf
|
Re: MySQL ohne Komponenten
Delphi-Quellcode:
begin
var1 := 'test1'; var2 := 'test2'; host := 'server'; user := 'root'; pass := '*****'; db := 'db' ; _myCon := mysql_init(nil); if _myCon = nil then begin ShowMessage('Nicht genug freier Speicher, um Verbindungsdeskriptor zu initialisieren'); Exit; end; 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; query := 'INSERT INTO tabelle (NAME, TEXT) VALUES ('+PChar(QuotedStr(var1))+','+PChar(QuotedStr(var1))+')'; mysql_real_query(_myCon, query , Length(query)); mysql_close(_myCon); end; |
Re: MySQL ohne Komponenten
Delphi-Quellcode:
mysql_real_query(_myCon, PChar(query) , Length(query));
|
Re: MySQL ohne Komponenten
der fehler bleibt
|
Re: MySQL ohne Komponenten
Was für einen Typ hat query?
|
Re: MySQL ohne Komponenten
pchar
Delphi-Quellcode:
so das sind die variablen
var
_myCon: PMySQL; query: PChar; var1, var2 : pchar; //wechsel ich immer zwischen PChar und String host, user, pass, db: PChar; |
Re: MySQL ohne Komponenten
Ändere den Typ mal in String und dann:
Delphi-Quellcode:
query := 'INSERT INTO tabelle (NAME, TEXT) VALUES ('+QuotedStr(var1)+','+QuotedStr(var2)+')';
mysql_real_query(_myCon, PChar(query) , Length(query)); |
Re: MySQL ohne Komponenten
oh verdammt!! das hätte ich auch selber sehen können!!
Es funktioniert!! VIELEN VIELEN DANK!!!! Super HILFE! |
Re: MySQL ohne Komponenten
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab jetzt folgenden Code:
Delphi-Quellcode:
Aber wenn ich dann die Ergebnisse abrufen will, bekomme ich nur eine Fehlermeldung, dass eine Zugriffsverletzung vorliegt. :( (siehe Anhang)
procedure TForm1.BtVTPClick(Sender: TObject);
var _myCon: PMySQL; //unseren Verbindungsdeskriptor host, user, pass, db: PChar; //die Anmeldedaten Posts: TPostEntries; idAuthor: String; //zum Zwischenspeichern der Verfasser-ID query: PChar; _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 //wir werden uns als Root-Benutzer in localhost einloggen, ohne eine //bestimmte Datenbank auszuwählen host := 'localhost'; user := 'root'; pass := 'XXXXX'; db := 'APITest'; //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'); query := 'SELECT * FROM posts ORDER BY id'; 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].id := StrToInt(_myRow[0]); //ID des Posts ist erstes Feld im Datensatz Posts[i].time := _myRow[2]; //Zeitpunkt ist drittes Feld Posts[i].text := _myRow[3]; //Text ist viertes Feld idAuthor := _myRow[1]; 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 //zum Schluss wird die Verbindung wieder geschlossen mysql_close(_myCon); end; Woran liegt das? :( |
Re: MySQL ohne Komponenten
Welche Version von MySQL?
|
Re: MySQL ohne Komponenten
Server Version: 5.0.18-nt
Isses das? Wenn nich, ma eben schnell bescheidsagen. ;) |
Re: MySQL ohne Komponenten
Imho funktioniert diese Bibliothek nur bid Version 4.1, da der Zugriffsmechanismus mit der 5er geändert wurde.
|
Re: MySQL ohne Komponenten
Zitat:
Achja... FLUSH PRIVILEGES nicht vergessen :-). |
Re: MySQL ohne Komponenten
Hallo,
als erstes: Das ist ein echt super Tutorial...! Kann man denn auch hier die DB mit einem DBGrid verbinden? Gruß |
Re: MySQL ohne Komponenten
So direkt geht das nicht, dafür gibts aber andere Komponenten, die hier im Forum schon zuhauf diskutiert wurden.
|
Re: MySQL ohne Komponenten
Hi,
über die CoreLabs-Komponenten geht es ja auch, die kosten aber Geld...ich bräuchte da was freies. |
Re: MySQL ohne Komponenten
Da die refernzierte übersetzte C-API von MySQL hoffnunsglos veralted ist, hier mal eine andere OpenSource Alternative:
![]() Mitsamt Tutorial: ![]() |
Re: MySQL ohne Komponenten
Hi Chewie,
Hi Allerseits, Zitat:
Nur leider ist der Link im Zitat oben defekt, diese Anfrage, wie auch die zur obersten Ebene ( ![]() Die im vorhergegangenen Beitrag angepriesene Alternative ist leider keine, da sie der GPL und nicht der LGPL unterliegt und den Verwender somit zwingt, die Quellen seines Programms offen zu legen, was ich nicht kann. Wer kann mir helfen? Viele Grüße, Jens |
Re: MySQL ohne Komponenten
Hallo Jens, ich könnte Dir eine Mail mit den entsprechenden Dateien senden.
Teil mir doch bitte Deine E-Mail-Adresse mit. MfG Jörg |
Re: MySQL ohne Komponenten
Hallo Jörg,
vielen Dank, für das Angebot! Ich habe letzte Nacht von ![]() Ist Deine Version evtl. neuer? Viele Grüße, Jens |
Re: MySQL ohne Komponenten
Hallo Allerseits,
wer sich noch für die mysql.pas interessiert, kann die Datei nun ![]() Die Lizenzbedingungen und der Urheberrechtsnachweis liegen bei. Viele Grüße, Jens PS: Bitte an ![]() |
Re: MySQL ohne Komponenten
Hi,
dabei nervten mich immer die vielen verschiedenen Versionen der libmysql.dll, so dann und wann funktionierte irgendetwas nicht mehr welches vorher klappte. Eventuell lag es auch an mir bzw meinen Code. So habe ich es nie geschafft, mit den vorhandenen, die Feldtypen einer mysql-Tabelle zu bestimmen. :( Wer Spass hat kann ja ![]() Grüße, MJ |
Re: MySQL ohne Komponenten
Zitat:
|
Re: MySQL ohne Komponenten
Moin Chewie,
Zitat:
![]() Viele Grüße, Jens |
Re: MySQL ohne Komponenten
Aus Aktuellem Anlass,...
Gibt es eigentlich eine aktualisierte Version der .pas file? |
Re: MySQL ohne Komponenten
Hi,
ich möchte mal zusammenfassen: - Die Seiten von Fichtner sind nicht (nicht mehr) zu erreichen - Der Zugriff über die LibMySql.dll ist immer noch beliebt - Viele Tutorials im Netz beziehen sich auf die LibMySql.dll/mysql.pas - Die Suche nach einer aktuellen Version endet fast immer in "Frage/Suche-Threads" Da wäre es doch ein interessantes Projekt, die veraltete mysql.pas auf aktuellen Stand zu bringen. Doch was ist der aktuelle Stand? Mysql5? Und wie stelle ich sicher, daß auch die "richtige" LibMysql.dll VersionXZY verwendet wird? Woher weiss ich, welche Funktionen/Proceduren in einer vorliegenden LibMySql.dll vorhanden sind. Wie ist die Vorgehensweise beim Schreiben einer 'neuen' mysql.pas. Ich selbst traue mir das nicht zu, dafür reichen meine Programmierkenntnisse bei weiten nicht aus. Wäre aber sehr interessant zu erfahren wie so etwas bewerkstelligt wird. Eventuell in einen neuen Thread? Oder ist das alles sinnlos, weil es eine Menge freier Zugriffskomponenten gibt? Was meinen die Profis im Forum? So long, MJ |
Re: MySQL ohne Komponenten
Hallo MJ,
Ich finde auch, dass es ein interessantes Projekt wäre, da ich aber keinerlei Kenntnisse von C++ habe, kann ich es leider auch nicht beginnen. Zitat:
Zitat:
Zitat:
Viele Grüße, Jens |
Re: MySQL ohne Komponenten
Hallo Forum,
auch ich wäre interessiert. Bringe leider auch die gleichen Vorraussetzungen mit (keine Ahnung) denke aber das, daß ganze mehr oder weniger nur eine Fleißarbeit ist. So schwer kann das nicht sein. Wer hat Tipps und Tutorial Verwenden von C++ Bibliotheken mit Delphi und was muß man beachten das nicht nur Delphi-Leute sondern Free-Pascal und Turbo -Leute auch damit arbeiten können? (auch unter Linux bzx. alle Plattformen die Free-Pascal auch untersützt. mfg - Micha |
Re: MySQL ohne Komponenten
Hi ich habe folgendes Problem, wenn Compilieren will, kommt immer eine Meldung "[82] Variable 'query' ist möglicherweise nicht initialisiert worden"
Aber es compiliert trotzdem, nur mit dem erstellen der Tabellen haut es nicht hin, also DB wird erstellt, aber die Tabellen nicht... bitte helft mir weiter Danke schonmal Gruß Pemue
Delphi-Quellcode:
unit MySQLTest;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, mySQL, StdCtrls, Menus; type TForm1 = class(TForm) grbConnect: TGroupBox; btConnect: TButton; edHost: TEdit; edUser: TEdit; edPassw: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; edDB: TEdit; Label4: TLabel; PopupMenu1: TPopupMenu; localhost1: TMenuItem; procedure btConnectClick(Sender: TObject); procedure localhost1Click(Sender: TObject); procedure MakeTables(_myCon: PMySQL); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btConnectClick(Sender: TObject); var _myCon: PMySQL; //unseren Verbindungsdeskriptor host, user, pass, db: PChar; //die Anmeldedaten query: PChar; begin //Aufnehmen der Anmeldedaten host := pchar(edHost.Text); user := pchar(edUser.Text); pass := pchar(edPassw.Text); db := pchar(edDB.Text); //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'); if MessageDlg('Soll eine neue Datenbank angelegt werden?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin query := 'CREATE DATABASE apitest'; mysql_real_query(_myCon, query, Length(query)); end; if MessageDlg('Neue Tabellen anlegen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then MakeTables(_myCon) end; procedure TForm1.MakeTables(_myCon: PMySQL); var query: PChar; begin mysql_select_db(_myCon, 'apitest'); //zu Datenbank "APITest" wechseln mysql_real_query(_myCon, 'CREATE TABLE posts(id int, author int, date datetime, entry text)', Length(query)); mysql_real_query(_myCon, 'CREATE TABLE users(id int, name varchar(50), pass varchar(50))', Length(query)); end; procedure TForm1.localhost1Click(Sender: TObject); begin edHost.Text := 'localhost'; edUser.Text := 'root'; edPassw.Text := 'jazzy'; end; end. |
Re: MySQL ohne Komponenten
Ich kenne die Bibliothek nicht, aber aus dem Bauch heraus würde ich sagen:
Delphi-Quellcode:
procedure TForm1.MakeTables(_myCon: PMySQL);
var query: PChar; begin mysql_select_db(_myCon, 'apitest'); //zu Datenbank "APITest" wechseln query := 'CREATE TABLE posts(id int, author int, date datetime, entry text)'; mysql_real_query(_myCon, query, Length(query)); query := 'CREATE TABLE users(id int, name varchar(50), pass varchar(50))'; mysql_real_query(_myCon, query , Length(query)); end; |
Re: MySQL ohne Komponenten
Oh vielen Danke, ich bin gerade bei den ersten schritten, und klammere mich dabei sehr an dieses tuturial, und bemerke selbst manche fehler nicht. Vielen Dank für deine Hilfe DeddyH
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:09 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