![]() |
mySQL-Datenbankzugriff über C-API: mysql_create_db(...)
Hallo!
Ich arbeite gerade daran über die C-API und ![]() 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:
Wobei ich einen Speicherzugriffsfehler von Delphi geliefert bekomme.
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; Wenn ich aber anstatt der Funktion "mysql_create_db()" folgendes mache:
Delphi-Quellcode:
dann funktioniert alles bestens und es wird eine Datenbank angelegt.
mysql_real_query(DataBaseSocket, PAnsiChar('CREATE DATABASE ' + strDataBaseName),Length('CREATE DATABASE ' + strDataBaseName))
Hat jemand damit etwas mehr Erfahrung, als ich und kann mir sagen woran das liegt? Vielen Dank im Voraus, Steffen |
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:
|
Re: mySQL-Datenbankzugriff über C-API: mysql_create_db(...)
Ich habe mir mal die DLL von
![]() |
Re: mySQL-Datenbankzugriff über C-API: mysql_create_db(...)
Könntest Du mal das Stück Code posten, mitdem Du eine Datenbank erstellst...?
|
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. |
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? |
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?
|
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. |
Re: mySQL-Datenbankzugriff über C-API: mysql_create_db(...)
auch mit der 3.23-DLL passiert nichts anderes...
Irgendwie muss der Fehler woanders liegen... |
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. |
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