Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi mySQL-Datenbankzugriff über C-API: mysql_create_db(...) (https://www.delphipraxis.net/15265-mysql-datenbankzugriff-ueber-c-api-mysql_create_db.html)

Steffen 25. Jan 2004 13:15


mySQL-Datenbankzugriff über C-API: mysql_create_db(...)
 
Hallo!

Ich arbeite gerade daran über die C-API und mysql.pas auf meine mySQL-Datenbank zu zugreifen.

es klappt eigentlich auch ganz gut, nur bekomme ich gerade einen komischen Fehler und ich weiß nicht woran es liegt...

Nachdem ich mit mit der Datenbank verbunden habe, möchte ich eine Datenbank erstellen. Eigentlich gibt's in der API die Funktion "mysql_create_db(<name>)" mit der man eine Datenbank anlegen kann. (Intern macht die Funktion nichts anderes, als "CREATE DATABASE + <name>")

Ich habe also folgendes versucht:
Delphi-Quellcode:
uses
  ...
  mySQL;

var
  DataBaseSocket: PMySQL;
  ...
function TDataBaseModule.CreateDatabase(strDatabaseName : String) : Boolean;
begin
  if Connected then
    begin
      Result := True;
      try
        mysql_create_db(DataBaseSocket, PAnsiChar(strDataBaseName)) // Hier entsteht der Fehler!
      except
        Result := False;
        ShowMessage('Fehler bei CreateDataBase!' + mysql_error(DataBaseSocket));
      end
    end
  else
    begin
      ShowMessage('Um eine Datanbankanfrage auszuführen muss eine Verbindung zur Datenbank bestehen!');
      Result := False
    end
end;
Wobei ich einen Speicherzugriffsfehler von Delphi geliefert bekomme.

Wenn ich aber anstatt der Funktion "mysql_create_db()" folgendes mache:
Delphi-Quellcode:
mysql_real_query(DataBaseSocket, PAnsiChar('CREATE DATABASE ' + strDataBaseName),Length('CREATE DATABASE ' + strDataBaseName))
dann funktioniert alles bestens und es wird eine Datenbank angelegt.

Hat jemand damit etwas mehr Erfahrung, als ich und kann mir sagen woran das liegt?

Vielen Dank im Voraus,
Steffen

Chewie 25. Jan 2004 13:35

Re: mySQL-Datenbankzugriff über C-API: mysql_create_db(...)
 
Hi Steffen, ich kann dein Problem nicht nachvollziehen. Bei mir funktioniert mysql_create_db tadellos, die Datenbank wird erstellt und ich bekomme auch keine Fehlermeldung.

Die Tatsache, dass es keine MySQL-Fehlermeldung gibt, sondern eine AccessViolation, macht mich etwas stutzig. Access Violations, die ich mir nicht erklären konnte, hatte ich auch ein Mal. Damals hatte ich glaub ich die DLL, die as auf der von dir genannten Homepage gibt. Nachdem ich diese durch die beim MySQL-Server mitgelieferte ersetzt hab, ging alles glatt.

Ein kleiner Hinweis übrigens noch. In der Dokumentation zu der Funktion heißt es:

Zitat:

This function is deprecated. It is preferable to use mysql_query() to issue an SQL CREATE DATABASE statement instead.

Steffen 25. Jan 2004 13:42

Re: mySQL-Datenbankzugriff über C-API: mysql_create_db(...)
 
Ich habe mir mal die DLL von http://www.fichtner.net/delphi/mysql.delphi.phtml runtergeladen, aber damit passiter genau das selbe...

Steffen 25. Jan 2004 13:44

Re: mySQL-Datenbankzugriff über C-API: mysql_create_db(...)
 
Könntest Du mal das Stück Code posten, mitdem Du eine Datenbank erstellst...?

Chewie 25. Jan 2004 13:52

Re: mySQL-Datenbankzugriff über C-API: mysql_create_db(...)
 
Versuch mal das Testprogramm hier:

Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses mysql, windows;


var
  _connector: PMySQL;
  sqlresult: PMySQL_Res;
  sqlrow: PMySQL_Row;
  Host, Login, Password, Query: PChar;
begin
  //Parameter festlegen
  Host := '??';
  Login := ??;
  Password := ??;

  //Zugangskennung initialisieren
  _connector := mysql_init(nil);

  //Verbindung herstellen
  _connector := mysql_real_connect(_connector,Host,Login,Password,nil,3306,nil,0);
  if _connector = nil then
  begin
    WriteLn('Die Verbindung ist fehlgeschlagen');
    Exit;
  end;

  if mysql_create_db(_connector, 'TestDB') <> 0 then
    WriteLn(mysql_error(_connector));

  //Verbindung schließen
  mysql_close(_connector);
  ReadLn;

Das klappt bei mir.

Steffen 25. Jan 2004 13:58

Re: mySQL-Datenbankzugriff über C-API: mysql_create_db(...)
 
Ich bekomme den Fehler:

"Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000"...

ist irgendwas nicht initialisiert?

Chewie 25. Jan 2004 14:05

Re: mySQL-Datenbankzugriff über C-API: mysql_create_db(...)
 
Das sieht mir so aus, als könnte er den Einstiegspunkt in der DLL nicht finden. Ist sie im richtigen Verzeichnis? Wenn ja, hast du es schonmal mit der DLL probiert, die beim MySQL-Server 3.23x dabei ist?

Steffen 25. Jan 2004 14:08

Re: mySQL-Datenbankzugriff über C-API: mysql_create_db(...)
 
Die DLL ist da. ich werde mal die v3.23-DLL runterladen.
Mal sehen, was dann passiert.

Steffen 25. Jan 2004 14:17

Re: mySQL-Datenbankzugriff über C-API: mysql_create_db(...)
 
auch mit der 3.23-DLL passiert nichts anderes...

Irgendwie muss der Fehler woanders liegen...

Steffen 25. Jan 2004 14:20

Re: mySQL-Datenbankzugriff über C-API: mysql_create_db(...)
 
Immerhin bekomme ich jetzt keine AccessViolation mehr, sondern es wird der except-Teil ausgeführt...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:20 Uhr.
Seite 1 von 3  1 23      

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