AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi MySQL ohne Komponenten
Tutorial durchsuchen
Ansicht
Themen-Optionen

MySQL ohne Komponenten

Ein Tutorial von Chewie · begonnen am 14. Jul 2003 · letzter Beitrag vom 30. Mär 2020
Antwort Antwort
Seite 31 von 34   « Erste     21293031 3233     Letzte »    
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#1

Re: MySQL ohne Komponenten

  Alt 28. Okt 2009, 07:05
Binäre Daten werden an die Bibliothek genauso übergeben wie alle anderen Daten. Man speichert das Bild (oder andere binäre Daten) in dem man diese
1) zunächst in einen AnsiString überträgt,
2) dann mit der Funktion QuoteString die Anführungszeichen hinzufügt
3) und diesen AnsiString zu dem SQL-Statement hinzufügt.

Die eventuell vorkommendenden #0-Char sind deshalb kein Problem, weil an die Funktion "mysql_real_query" die Länge des Strings (oder besser eigentlich das array of Byte) übergeben wird. Die Library braucht also nicht nach einem abschließenden #0-Char zu suchen um die Länge des Strings zu ermitteln (im Unterschied zur veralteten Funktion "mysql_query").
  Mit Zitat antworten Zitat
xFrankx

Registriert seit: 20. Okt 2009
12 Beiträge
 
#2

Re: MySQL ohne Komponenten

  Alt 28. Okt 2009, 11:41
samo ich Danke dir für deine Antwort.

Frage ? hättest du ein Demo oder noch etwas mehr Infos wie ich das machen könnte ?


Gruß Frank
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#3

Re: MySQL ohne Komponenten

  Alt 28. Okt 2009, 22:08
Ich habe ein neues Thema angelegt:

Binäre Daten in Blob speichern
  Mit Zitat antworten Zitat
mrbrown

Registriert seit: 13. Nov 2009
5 Beiträge
 
#4

Re: MySQL ohne Komponenten

  Alt 13. Nov 2009, 08:38
Hu,

kann mir wer bezüglich eines kleinen Problems helfen?
Nutze die MySQL Verbindung wie im ersten Post erklärt mit der neuen .pas datei.
Folgdener Code:

Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
var
  _myCon: PMySQL; //unseren Verbindungsdeskriptor
  host, user, pass, db: PChar; //die Anmeldedaten
  query: PChar;
  titel, datum, von, bis, test :string;

begin

   titel := Edit1.text;
   von := Edit2.Text;
   bis := Edit3.Text;
   test := RichEdit1.Text;



  libmysql_load(nil);
  ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+
    'konfig.ini');
//wir werden uns als Root-Benutzer in localhost einloggen, ohne eine
  //bestimmte Datenbank auszuwählen
  host := Pchar(ini.Readstring('Server','ServerIp',''));
  user := Pchar(ini.Readstring('Server','Username',''));
  pass := Pchar(ini.Readstring('Server','Passwort',''));
  db := Pchar(ini.Readstring('Server','Datenabnk',''));

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

  mysql_select_db(_myCon, Pchar(ini.Readstring('Server','Datenbank',''))); //zu Datenbank wechseln
  mysql_real_query(_myCon, 'INSERT INTO testtable(titel, datum , von, bis, text) VALUES (titel, datum, von, bis, text)', Length(query));


  //zum Schluss wird die Verbindung wieder geschlossen
  mysql_close(_myCon);

  close;
end;
Wie man sieht soll eine MySQL Verbindung aufgebaut werden. In die Datenbank sollen dann 4 Werte (titel, datum, von, bis) sowie eine ID (Autoincrement, muss also nicht übergeben werden) eigetragen werden.
Problem ist, dass nichts übergeben wird. Ebenso bin ich mir nicht mal sicher ob er überhaupt die DB auswählt.

Könnte mir da ml wer helfen?

Gruß
MrBrown
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#5

Re: MySQL ohne Komponenten

  Alt 13. Nov 2009, 11:01
Zunächst mal finde ich die Sequenz
ini.Readstring('Server','Datenabnk','') verdächtig. Hier müßte es ja wohl 'Datenbank' heißen. Außerdem sollten alle PChar in PAnsiChar geändert werden, um halbwegs die Kompatibilität zu Delphi2009 herzustellen. Sie schreiben "Problem ist, dass nichts übergeben wird". Hmm, soll vermutlich soviel heißen, wie "Der Eintrag wird nicht vorgenommen, aber ich erhalte auch keine Fehlermeldung".
Ich würde sagen, das liegt an der nicht initialisierten Variable "query". Richtig müßte es heißen:
Delphi-Quellcode:
var
  query: AnsiString;
begin
  ...
  query := 'INSERT INTO testtable(titel, datum , von, bis, text) VALUES (titel, datum, von, bis, text)';
  if mysql_real_query(_myCon, PAnsiChar(query), Length(query))<>0
  then
    raise Exception.Create('Schon wieder was falsch - '  + mysql_error(_myCon));
 ...
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#6

Re: MySQL ohne Komponenten

  Alt 13. Nov 2009, 11:06
Zitat:
INSERT INTO testtable(titel, datum , von, bis, text) VALUES (titel, datum, von, bis, text)
Was soll denn da eingetragen werden? So wie es da steht wird es jedenfalls nicht funktionieren.

[edit] Damit klar wird, was ich meine:
INSERT INTO testtable(titel, datum , von, bis, text) VALUES ('Hallo Welt', '2009-11-10', '2009-11-09', '2009-11-12', 'Dideldum') Wobei man das Datum dann wohl besser auch als Datum(TDate) übergibt. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#7

Re: MySQL ohne Komponenten

  Alt 13. Nov 2009, 12:08
Ich gehe ja wohl auch davon aus, daß
INSERT INTO testtable(titel, datum , von, bis, text) VALUES (titel, datum, von, bis, text); eher symbolisch gemeint war, oder? Wenn nicht, dann gibt es ja nun auch eine Fehlermeldung!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#8

Re: MySQL ohne Komponenten

  Alt 13. Nov 2009, 12:22
Davon gehe ich eben nicht aus, wozu sollte jemand eine einigermaßen umfangreichen Quelltext posten und an dieser Stelle plötzlich symbolische Werte eintragen (bei Passwörtern etc. macht das ja noch Sinn, aber hier)?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mrbrown

Registriert seit: 13. Nov 2009
5 Beiträge
 
#9

Re: MySQL ohne Komponenten

  Alt 13. Nov 2009, 14:19
nein es sollte keine symbolischen werte sein sondern an dieser stelle sollten die variablen die mit den edits gefpüllt werden, an mysql weitergegeben werden.
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#10

Re: MySQL ohne Komponenten

  Alt 13. Nov 2009, 15:04
Dann vielleicht etwa so:
Delphi-Quellcode:
var
  query: AnsiString;
begin
  ...
  query := 'INSERT INTO testtable(titel, datum , von, bis, text) VALUES (' +
           QuoteString(titel) + ',' +
           QuoteString(datum) + ',' +
           QuoteString(von) + ',' +
           QuoteString(bis) + ',' +
           QuoteString(text) + ')';
  if mysql_real_query(_myCon, PAnsiChar(query), Length(query))<>0
  then
    raise Exception.Create('Schon wieder was falsch - '  + mysql_error(_myCon));
...
end;
Das setzt allerdings voraus, daß in "datum", "von" und "bis" das Datum bereits im korrekten Foramt vorliegt. Ist das nicht der Fall, muss der Datumsstring vorher noch in das richtige Format gebracht werden (yyyy-mm-dd oder yyyymmdd)
N.B. Falls Delphi2009 eingesetzt wird, muss noch die ein oder andere Stringkonvertierung hinzugefügt werden.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 31 von 34   « Erste     21293031 3233     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 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 by Thomas Breitkreuz