mysql - Delphi - 在运行时创建 MySQL 数据库

标签 mysql sql delphi runtime

我有一个连接到 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/

相关文章:

php - 我的脚本中不断出现有关 verable 的错误

mysql - 以 root 身份启动 Mysql

mysql - SQL中的多个多对多关系

php - 如何使确认码在 1 天后过期

delphi - 有没有更好的方法来委托(delegate)枚举?

php - 通过URL解析字符串搜索mysql数据库

mysql - 无法在mysql中显示波兰语字符

sql - TFS 2010 备份失败,出现 "The current username failed to retrieve MSSQL Server service account. "

delphi 7,安装的组件在安装时隐藏

delphi - 尝试在 Delphi 中创建 Firebird 数据库时出现 EIBInterBaseError 'unavailable database'