我有一个连接到 MySQL 数据库的 delphi 应用程序,但是,我想为我的最终用户创建一个简单的方法来实现 MySQL 数据库。我想在我的应用程序中创建一个按钮,用户可以按下该按钮来删除 schema 的任何当前实例,并使用我的应用程序运行所需的正确表和列创建一个新模式。
我已经编写了创建新数据库的代码。如下:
CREATE SCHEMA IF NOT EXISTS fakeschema;
USE fakeschema;
CREATE TABLE table1
(IDtable1 int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
Line1 varchar(45),
Line2 varchar(45));
代码在 MySQL 中正常运行,但是在执行代码时我收到 SQL 语法错误。我得到:
error in your SQL syntax near 'USE fakeschema; CREATE TABLE table1 (IDtable1 int(11) PRIMARY KEY NO'
我正在使用 ADOConnection
链接到数据源。按下按钮后,我正在编写连接字符串。我正在使用 ADOQuery
来执行 SQL 代码。
这是我用来连接数据库的代码片段:
ADOC.ConnectionString := 'PROVIDER = MSDASQL; DRIVER={MySQL ODBC 3.51 Driver};
SERVER=localhost; Data Source=faketest; DATABASE=fakeschema; USER ID=root;
PASSWORD=pass; OPTION=3;';
ADOC.DefaultDatabase := 'fakeschema';
ADOC.Connected := True;
我是否使用了错误的工具/方法?我是 MySQL 的新手,目前正在学习 Delphi。
最佳答案
正如我在其中一条评论中提到的,问题是试图在单个 TAdoQuery 组件中执行多个个人 SQL 语句。
在理想情况下,您将拥有一个组件,例如 MyDAC,它具有一个脚本组件,您可以使用它来代替 TAdoQuery(MyDAC 也会给您带来其他好处,例如不必通过 ODBC 进行连接)。我不知道是否有免费的 MySQL 组件有脚本组件。
另一种方法是您可以创建脚本文件(例如 createFakeSchema.sql)并通过命令行执行它。例如:
createFakeSchema.sql:
CREATE SCHEMA IF NOT EXISTS fakeschema;
USE fakeschema;
CREATE TABLE table1
(IDtable1 int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
Line1 varchar(45),
Line2 varchar(45));
和示例源代码:
procedure TfrmMain.DoExecuteScriptFile;
var
cmd: string;
KeepOpen: Boolean;
begin
KeepOpen := True;
// option to automatically close window once execution is done
// for releasing you would not want it kept open, but handy for debugging
if KeepOpen then
cmd := '/k '
else
cmd := '/c ';
cmd := cmd + Format(' mysql -uroot -proot -D%s < "%s"', ['FakeSchema', 'createFakeSchema.sql']);
ShellExecute(handle,'open', 'cmd.exe', Pchar(cmd), nil, SW_SHOW );
end;
通过这种方式,您可以在外部某处创建脚本文件,自己通过 MySQL 对其进行测试,然后当您知道您的脚本 正在运行时,您可以通过您的程序运行它。如果要在执行时隐藏命令窗口,请将 ShellExecute 中的 SW_SHOW 更改为 SW_HIDE。这样您甚至根本不需要任何组件 - 只需在路径中访问 mysql.exe 或在 cmd 语句中包含完整路径。
这是在 MySQL 5.1 中完成的,因此希望适用于 3.5...
关于mysql - Delphi - 在运行时创建 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16048092/