Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL LogIn (https://www.delphipraxis.net/135339-sql-login.html)

MaToBe 9. Jun 2009 09:27

Datenbank: mySQL • Version: Xampp? • Zugriff über: Ehm per Delphi?

SQL LogIn
 
Guten Tag,

ich wollte mit diesem Tutorial Schrittweise eine Verbindung zu meiner Xampp-Datenbank aufbauen.
http://www.delphipraxis.net/internal...=mysql&start=0

Dich leider hänge ich schon beim 1sten Schritt.

Delphi-Quellcode:
procedure TfrmSQL.SqlVerbindung;
var
  myConnect: PMySQL;                //Verbindungsdeskriptor
begin
  //jetzt wird _myCon initialisiert
  myConnect := mysql_init(nil);
  if myConnect = nil then
  begin
    ShowMessage('Nicht genug freier Speicher, um Verbindungsdeskriptor zu initialisieren');
    Exit;
  end;

  //anschließend wird die Verbindung hergestellt
  if mysql_real_connect(myConnect, PCHar('localhost'), PChar('root'), nil, nil, 3306, nil, 0) = nil then
  begin
    ShowMessage('Die Verbindung konnte nicht hergestellt werden. Ursache: ' + mysql_error(myConnect));
    Exit;
  end;

  ShowMessage('Verbindung hergestellt');

  //zum Schluss wird die Verbindung wieder geschlossen
  mysql_close(myConnect);
end;
Fehlermeldung: "Zugriffsverletzung bei Adresse 0000000 aufgetreten. Schreiben bei Adresse 0000000"

Die mysql.pas aus dem besagten Thread ist installiert. Wir hatten grade in der Schule php und mysql, kenne mich damit also ein bisschen aus, aber leider komm ich hier nicht weiter.

MFG MaToBe

DeddyH 9. Jun 2009 09:31

Re: SQL LogIn
 
Dann lies den verlinkten Thread mal ab hier weiter.

MaToBe 9. Jun 2009 09:58

Re: SQL LogIn
 
Delphi-Quellcode:
procedure TfrmSQL.SqlVerbindung;
var
  myConnect: PMySQL;                //Verbindungsdeskriptor
begin
  //jetzt wird _myCon initialisiert
  libmysql_load(nil);
  myConnect := mysql_init(nil);
  if myConnect = nil then
  begin
  ...
end;
Gleiche Fehlermeldung.

Wenn ich die neue mySQL.pas installieren möchte, sagt er mir als Fehlermeldung "libsql.dll" nicht gefunden. Also hab ich wieder die alte installiert...

DeddyH 9. Jun 2009 10:00

Re: SQL LogIn
 
Und wenn Du die DLL mal ins Projektverzeichnis kopierst?

MaToBe 9. Jun 2009 10:04

Re: SQL LogIn
 
sorry ich habe mit sowas noch nie gearbeitet, immer nur die standartkomponenten benutzt, die schon da warn.

wo finde ich die .dll den? bei der .pas datei war sie nicht dabei.

DeddyH 9. Jun 2009 10:08

Re: SQL LogIn
 
Ich habe kein XAMPP installiert und kann daher nicht nachsehen, aber schau mal im Windows-Verzeichnis nach, alternativ unter C:\XAMPP.

MaToBe 9. Jun 2009 10:17

Re: SQL LogIn
 
Delphi-Quellcode:
procedure TfrmSQL.SqlVerbindung;
var
  myConnect: PMySQL;                //Verbindungsdeskriptor
begin
  //jetzt wird _myCon initialisiert
  libmysql_load(nil);
  myConnect := mysql_init(nil);
  if myConnect = nil then
  begin
    ShowMessage('Nicht genug freier Speicher, um Verbindungsdeskriptor zu initialisieren');
    Exit;
  end;

  //anschließend wird die Verbindung hergestellt
  if mysql_real_connect(myConnect, PAnsiChar('localhost'), PAnsiChar('root'), nil, nil, 3306, nil, 0) = nil then
  begin
    ShowMessage('Die Verbindung konnte nicht hergestellt werden. Ursache: ' + mysql_error(myConnect));
    Exit;
  end;

  ShowMessage('Verbindung hergestellt');

  //zum Schluss wird die Verbindung wieder geschlossen
  mysql_close(myConnect);
end;
es funktioniert, danke !!!

Nur noch eine Frage, zum Verständnis und weil es auch wichtig ist für das weitere Projekt.

Die libmysql.dll die aus dem XAMPP Ornder ist das eine allgemeine Datei oder speziell für XAMPP ?
Hintergrund: Das ganze ist ein Schulprojekt und der Lehrer will das ganze erst auf einem XAMPP Server sehen bevor er uns die Daten des Schulservers gibt, auf dem das Programm dann laufen soll.

DeddyH 9. Jun 2009 10:20

Re: SQL LogIn
 
Das ist die Client-Library zum Zugriff auf MySQL und hat mit XAMPP an sich nichts zu tun.

MaToBe 9. Jun 2009 10:51

Re: SQL LogIn
 
Seltsam. 2 mal hat es geklappt. Dann beim 3ten mal kam diese Meldung:

"Die Verbindung konnte nicht hergestellt werden. Ursache: Access denied for user 'root'@ 'localhost' (using password YES)

Dabei habe ich das Passwort und den zugang bei XAMPP nicht verändert. Host: localhost, Benutzer : root, PW: Keins

Delphi-Quellcode:
SQLServer := PAnsiChar(AnsiString(edtServernameSQL.Text));
SQLBenutzer := PAnsiChar(AnsiString(edtBenutzernameSQL.Text));
SQLPasswort := PAnsiChar(AnsiString(edtPasswortSQL.Text));
SQLDatenbank := PAnsiChar(AnsiString(edtDatenbankSQL.Text));

procedure TfrmSQL.SqlVerbindung;
var
  myConnect: PMySQL;                //Verbindungsdeskriptor
begin
  //jetzt wird _myCon initialisiert
  libmysql_load(nil);
  myConnect := mysql_init(nil);
  if myConnect = nil then
  begin
    ShowMessage('Nicht genug freier Speicher, um Verbindungsdeskriptor zu initialisieren');
    Exit;
  end;

  //anschließend wird die Verbindung hergestellt
  if mysql_real_connect(myConnect, SQLServer, SQLBenutzer, SQLPasswort, SQLDatenbank, 3306, nil, 0) = nil then
  begin
    ShowMessage('Die Verbindung konnte nicht hergestellt werden. Ursache: ' + mysql_error(myConnect));
    Exit;
  end;

  ShowMessage('Verbindung hergestellt');

  //zum Schluss wird die Verbindung wieder geschlossen
  mysql_close(myConnect);
end;
Bei SQLPasswort trage ich Nil ein und bei SQLDatenbank auch.

DeddyH 9. Jun 2009 10:56

Re: SQL LogIn
 
Kommst Du über phpMyAdmin an die DB?

MaToBe 9. Jun 2009 11:10

Re: SQL LogIn
 
ja komme ich.

€: ich sehe gerade das es einen fehler gibt, wenn im Admin Tool von XAMPP den Server stoppen will... vllt liegts daran.

DeddyH 9. Jun 2009 11:12

Re: SQL LogIn
 
Allheilmittel: einfach mal den Rechner neu starten und schauen, ob es wieder geht.

MaToBe 9. Jun 2009 11:52

Re: SQL LogIn
 
nein geht immer noch nicht. ich schätze mein xampp hat irgendeinen fehler.

ich habe auch einen richtigen Webserver bei candan.eu

Kann ich die Adresse "web432.can200.de" als Host benutzen, da funktioniert es nämlich auch nicht...

DeddyH 9. Jun 2009 11:59

Re: SQL LogIn
 
Die meisten Hoster lassen keine DB-Zugriffe von außen zu.

MaToBe 9. Jun 2009 12:39

Re: SQL LogIn
 
ich habe XaMPP neu aufgesetzt, und nach 3 weiteren dubiosen fehlermeldungen geht es jetzt ... mal schaun wie lange noch. Danke

MaToBe 9. Jun 2009 17:46

Re: SQL LogIn
 
muss mich hier doch noch mal melden.

Problem: Etwa nur jedes 3te mal beim Verbinden zur SQL Datenbank per Button kommt die Nachricht "Verbindung erfolgreich" und selbst dann bin ich mir nicht sicher ob es geklappt hat.

Denn auch bei "Verbindung erfolgreich" klappt das Insert nicht.

Delphi-Quellcode:
var
      SQLServer : PAnsiChar;
      SQLBenutzer : PAnsiChar;
      SQLPasswort : PAnsiChar;
      SQLDatenbank : PAnsiChar;

...
    SQLServer := PAnsiChar(AnsiString(edtServernameSQL.Text));
    SQLBenutzer := PAnsiChar(AnsiString(edtBenutzernameSQL.Text));
    SQLPasswort := PAnsiChar(AnsiString(edtPasswortSQL.Text));
    SQLDatenbank := PAnsiChar(AnsiString(edtDatenbankSQL.Text));
...


procedure TfrmSQL.SqlVerbindungON;
begin
  mySqlConnect := mysql_init(nil);
  if mySqlConnect = nil then
  begin
    ShowMessage('Nicht genug freier Speicher, um Verbindungsdeskriptor zu initialisieren');
    Exit;
  end;


  if mysql_real_connect(mySqlConnect, SQLServer, SQLBenutzer, SQLPasswort, SQLDatenbank, 3306, nil, 0) = nil then
  begin
    ShowMessage('Die Verbindung konnte nicht hergestellt werden. Ursache: ' + mysql_error(mySqlConnect));
    Exit;
  end;

  ShowMessage('Verbindung hergestellt');

end;

procedure TfrmSQL.SqlVerbindungOFF;
begin
    mysql_close(mySqlConnect);
end;

//Insert Procedure
procedure TfrmSQL.SqlInsert(Tabelle : string; Daten : string);
var query : PChar;
begin
  query := PChar('INSERT INTO ' + Tabelle + ' VALUES ' + Daten);
  mysql_real_query(mySqlConnect, PAnsiChar(AnsiString(query)), Length(query));
end;

//Aufruf der Insert Procedure
procedure TfrmMain.Button1Click(Sender: TObject);
begin
    frmSQL.SqlVerbindungON;
    try
                                      //soll >> ('','Hallo') << darstellen
      frmSQL.SqlInsert('ausfaelle', '(' + #39 + '' + #39 + ',' + #39 + 'Hallo' + #39 + ')');
    finally
      frmSQL.SqlVerbindungOFF;
    end;
end;
Wäre super wenn jemand rausfinden könnte, warum nur bei durschnittlich jedem 3ten Verbindungsauftrag dieser auch gelingt.

MaToBe 10. Jun 2009 13:00

Re: SQL LogIn
 
ich habe ein paar weitere Versuche unternommen:


Variablen:
Delphi-Quellcode:
var
   Tabelle : string;
   Daten : string;
   ID : integer;
Funktioniert:
Delphi-Quellcode:
query := PChar('UPDATE ausfaelle SET Lehrer=''Peter'' WHERE ID=1');
mysql_real_query(mySqlConnect, PAnsiChar(AnsiString(query)), Length(query));
Funktioniert nicht:
Delphi-Quellcode:
query := PChar('UPDATE ' + Tabelle + ' SET ' + Daten + ' WHERE ID =' + inttostr(ID));
mysql_real_query(mySqlConnect, PAnsiChar(AnsiString(query)), Length(query));
Funktioniert:
Delphi-Quellcode:
query := PChar('DELETE FROM ausfaelle WHERE ID=11');
mysql_real_query(mySqlConnect, PAnsiChar(AnsiString(query)), Length(query));
Funktioniert nicht:
Delphi-Quellcode:
query := PChar('DELETE FROM ' + Tabelle + ' WHERE ID=' + inttostr(ID));
mysql_real_query(mySqlConnect, PAnsiChar(AnsiString(query)), Length(query));
Ich verstehe nicht wo mein Fehler liegt. Durch die Vergleiche seht ihr ja auch, worauf ich hinaus will, gibt es vielleicht eine intelligentere Lösung als mit " + Variable + " ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz