Delphi-PRAXiS
Seite 6 von 9   « Erste     456 78     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)

SMERK 27. Jan 2007 11:55

Re: MySQL ohne Komponenten
 
Hat nun schon jemand eine passende Lösung, wie man die INSERT INTO Funktion mit Variablen nutzen kann?

mkinzler 27. Jan 2007 13:24

Re: MySQL ohne Komponenten
 
Zitat:

Zitat von SMERK
Hat nun schon jemand eine passende Lösung, wie man die INSERT INTO Funktion mit Variablen nutzen kann?

Wie meinst du das?

SMERK 28. Jan 2007 18:04

Re: MySQL ohne Komponenten
 
Naja, wie sage ich jetzt, dass er den inhalt einer Variablen speichert:
Delphi-Quellcode:
query := 'INSERT INTO tabelle (text, name) VALUES (var1 , var2)';
so geht es ja leider nicht!!

Maja Jessica 28. Jan 2007 18:32

Re: MySQL ohne Komponenten
 
:hi:

Eventuell so:


Delphi-Quellcode:
'INSERT INTO tabelle (text, name) VALUES ('+QuotedStr(var1)+','+QuotedStr(var1)+')';
MJ

SMERK 28. Jan 2007 18:50

Re: MySQL ohne Komponenten
 
dabei kommt leider das raus:
Zitat:

[Error] Unit1.pas(162): Incompatible types: 'String' and 'PAnsiChar'

mkinzler 28. Jan 2007 19:35

Re: MySQL ohne Komponenten
 
SQL-Code:
INSERT INTO tabelle (text, name) VALUES (:var1, :var2)
Delphi-Quellcode:
<DS>.ParamByName('var1').Value = var1;

SMERK 28. Jan 2007 19:52

Re: MySQL ohne Komponenten
 
Was ist mit dem letzten Teil gemeint? <DS> ?

mkinzler 28. Jan 2007 19:55

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))+')';
]

SMERK 28. Jan 2007 20:14

Re: MySQL ohne Komponenten
 
da kommt dann leider wieder die Fehlermeldung:
Zitat:

[Error] Unit1.pas(162): Incompatible types: 'String' and 'PAnsiChar'

mkinzler 28. Jan 2007 20:17

Re: MySQL ohne Komponenten
 
Zeig mal den Funktionsaufruf

SMERK 28. Jan 2007 20:20

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;

mkinzler 28. Jan 2007 20:23

Re: MySQL ohne Komponenten
 
Delphi-Quellcode:
mysql_real_query(_myCon, PChar(query) , Length(query));

SMERK 28. Jan 2007 20:25

Re: MySQL ohne Komponenten
 
der fehler bleibt

mkinzler 28. Jan 2007 20:27

Re: MySQL ohne Komponenten
 
Was für einen Typ hat query?

SMERK 28. Jan 2007 20:28

Re: MySQL ohne Komponenten
 
pchar

Delphi-Quellcode:
var
 _myCon: PMySQL;
 query: PChar;
 var1, var2 : pchar;                //wechsel ich immer zwischen PChar und String
 host, user, pass, db: PChar;
so das sind die variablen

mkinzler 28. Jan 2007 20:31

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));

SMERK 28. Jan 2007 20:32

Re: MySQL ohne Komponenten
 
oh verdammt!! das hätte ich auch selber sehen können!!



Es funktioniert!!
VIELEN VIELEN DANK!!!! Super HILFE!

Svenkan 10. Feb 2007 13:52

Re: MySQL ohne Komponenten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab jetzt folgenden Code:
Delphi-Quellcode:
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;
Aber wenn ich dann die Ergebnisse abrufen will, bekomme ich nur eine Fehlermeldung, dass eine Zugriffsverletzung vorliegt. :( (siehe Anhang)
Woran liegt das? :(

mkinzler 10. Feb 2007 13:56

Re: MySQL ohne Komponenten
 
Welche Version von MySQL?

Svenkan 10. Feb 2007 13:58

Re: MySQL ohne Komponenten
 
Server Version: 5.0.18-nt

Isses das?
Wenn nich, ma eben schnell bescheidsagen. ;)

mkinzler 10. Feb 2007 13:59

Re: MySQL ohne Komponenten
 
Imho funktioniert diese Bibliothek nur bid Version 4.1, da der Zugriffsmechanismus mit der 5er geändert wurde.

yankee 10. Feb 2007 14:21

Re: MySQL ohne Komponenten
 
Zitat:

Zitat von mkinzler
Imho funktioniert diese Bibliothek nur bid Version 4.1, da der Zugriffsmechanismus mit der 5er geändert wurde.

Du kannst ins der mysql-DB in der users-Tabelle das Passwort manuell mit dem alten Passwort-Algo umstellen, dann kannst du wieder den alten Zugrifsmodus nehmen :-).
Achja... FLUSH PRIVILEGES nicht vergessen :-).

divBy0 16. Mär 2007 09:51

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ß

Chewie 16. Mär 2007 09:57

Re: MySQL ohne Komponenten
 
So direkt geht das nicht, dafür gibts aber andere Komponenten, die hier im Forum schon zuhauf diskutiert wurden.

divBy0 16. Mär 2007 10:24

Re: MySQL ohne Komponenten
 
Hi,

über die CoreLabs-Komponenten geht es ja auch, die kosten aber Geld...ich bräuchte da was freies.

yankee 16. Mär 2007 16:43

Re: MySQL ohne Komponenten
 
Da die refernzierte übersetzte C-API von MySQL hoffnunsglos veralted ist, hier mal eine andere OpenSource Alternative:

http://sourceforge.net/projects/directsql

Mitsamt Tutorial:
http://www.dsdt.info/tutorials/mysqldirect/

JB82 19. Jun 2007 23:52

Re: MySQL ohne Komponenten
 
Hi Chewie,
Hi Allerseits,

Zitat:

Zitat von Chewie
Dafür notwendig sind in erster Linie einmal die Pascal-Übersetzungen der C-Header für die MySQL-Bibliothek (und natürlich die Bibliothek selbst). Die Header findet man unter http://www.fichtner.net/delphi/mysql.delphi.phtml, die Bibliothek libmysql.dll ist bei dem MySQL-Server dabei.

ich suche jetzt schon eine ganze Weile nach Möglichkeiten, direkt mit MySQL zu kommunizieren und dies scheint endlich zu sein, was ich gesucht habe, vielen Dank für das Tutorial!
Nur leider ist der Link im Zitat oben defekt, diese Anfrage, wie auch die zur obersten Ebene (www.fichtner.net/) enden im 404-Fehler. Kann mir jemand die Datei zusenden oder mir einen funktionierenden Link nennen? Ich kann die Datei auch auf meinem Webspace hosten, um weitere Anfragen unnötig zu machen.

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

hincapie 20. Jun 2007 06:22

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

JB82 20. Jun 2007 12:27

Re: MySQL ohne Komponenten
 
Hallo Jörg,

vielen Dank, für das Angebot!

Ich habe letzte Nacht von Ingolf .pas und .dll von 2002 erhalten und überlege gerade, die Datei bei mir hochzuladen, deshalb hatte ich mich noch nicht wieder im Forum gemeldet.

Ist Deine Version evtl. neuer?

Viele Grüße, Jens

JB82 20. Jun 2007 13:33

Re: MySQL ohne Komponenten
 
Hallo Allerseits,

wer sich noch für die mysql.pas interessiert, kann die Datei nun hier herunterladen.
Die Lizenzbedingungen und der Urheberrechtsnachweis liegen bei.

Viele Grüße, Jens

PS: Bitte an Chewie oder einen Admin/Mod: Bitte tausche doch den Link im ersten Posting aus, da er nicht mehr funktioniert.

Maja Jessica 20. Jun 2007 13:43

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 dieses hier nach Delphi portieren.

Grüße, MJ

Chewie 20. Jun 2007 20:57

Re: MySQL ohne Komponenten
 
Zitat:

Zitat von JB82
PS: Bitte an Chewie oder einen Admin/Mod: Bitte tausche doch den Link im ersten Posting aus, da er nicht mehr funktioniert.

Das muss ein Mod tun, ich hab dazu nicht die Rechte. Der erste Beitrag ist schon "bisschen" länger als 24 Stunden her :zwinker:

JB82 20. Jun 2007 21:58

Re: MySQL ohne Komponenten
 
Moin Chewie,

Zitat:

Zitat von Chewie
Das muss ein Mod tun, ich hab dazu nicht die Rechte. Der erste Beitrag ist schon "bisschen" länger als 24 Stunden her :zwinker:

na sowas! Ok, von der Einschränkung wusste ich nichts, da ich selbst mit YaBB arbeite und an phpBB nicht gewöhnt bin. :wink:

Viele Grüße, Jens

Mackhack 21. Jun 2007 02:29

Re: MySQL ohne Komponenten
 
Aus Aktuellem Anlass,...

Gibt es eigentlich eine aktualisierte Version der .pas file?

Maja Jessica 21. Jun 2007 09:24

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

JB82 21. Jun 2007 13:52

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 von Maja Jessica
Eventuell in einen neuen Thread?

Warum? dieser Threat ist schon so gut bevölkert, warum ihn nicht einfach fortsetzen? Schließlich ist es ja kein neues Thema, sondern nur die Erweiterung des laufenden Themas.
Zitat:

Zitat von Maja Jessica
Oder ist das alles sinnlos, weil es eine Menge freier Zugriffskomponenten gibt?

Nein, ich denke es ist wahrlich nicht sinnlos, denn die vorhandenen Möglichkeiten unterliegen entweder der GPL (was sicherlich für viele Programmierer inakzeptabel ist) oder es handelt sich um Komponenten. Letztere sind aus min. drei Gründen von Nachteil:
  • Sie können nicht in den eingeschränkten personal-Versionen von Delphi genutzt werden
  • Der Zugriff auf die Daten ist zwar verspielt einfach möglich, aber eine schnelle Abfrage / Änderung ist nicht möglich, mit der DLL ist es schnell umgesetzt und schnell durchgeführt. Außerdem ist die DLL problemlos aus einer TForm-losen Anwendung (Kommandozeilenanwendung!!!) nutzbar. (Nebenbei bemerkt, ich fand es dramatisch einfacher, die Funktionsweise der DLL zu verstehen, als die Funktionsweise der Borland-Komponenten!)
  • Durch die Verwendung der DLL entsteht im Gegensatz zur Nutzung einer Komponente kein unnötiger Overhead im Programm.

Zitat:

Zitat von Maja Jessica
Was meinen die Profis im Forum?

Zugegeben, ich bin neu hier, aber ich hoffe, meine Meinung wird auch mit in die Diskussion aufgenommen ;-)

Viele Grüße, Jens

micha0815 31. Jul 2007 06:41

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

pemue 18. Jan 2008 09:50

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.

DeddyH 18. Jan 2008 09:57

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;

pemue 18. Jan 2008 10:21

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.
Seite 6 von 9   « Erste     456 78     Letzte »    

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