1,问题缘起
某个delphi程序使用odbc驱动,通过adoConnection连接mySQL数据库。
程序启动时,若数据库不存在则需要创建数据库及其中的表。
建表SQL在navicat中运行无误,但在delphi程序中运行出错:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'XX' at line
2,问题分析
网上查资料得知,adoConnection连接mySQL数据库,默认只能运行一条SQL语句,不能执行多条语句。即使是将多条语句中的分隔符号(;)去掉也不行。
那么,如何让adoConnection支持一次运行多条SQL语句呢?网上提到如下解决方案:
- 在MySQL的连接字符串中设置allowMultiQueries参数置为true
- 设置 ODBC -- 配置 --Detials -- Flags 3 -- 钩上 Allow multiple statements
- 打开 MySQL Connector/ODBC Data Source Configuration 在 Connection 中找到一条设置 Allow multiple statements,勾上此项
但上述方法对使用adoConnection的delphi程序均不适用。
3,解决方案
https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-connection-parameters.html
到上述mySQL的官网上查看 ODBC Connection Parameters 的设置,
其中option 有 MULTI_STATEMENTS设置选项 67108864。因此,
ConnectionString := 'Driver={MySQL ODBC 5.1 Driver};Server=192.168.0.2;Port=3306;Database=pgis;User=root;Password=mysql;Option=3;';
改为
ConnectionString := 'Driver={MySQL ODBC 5.1 Driver};Server=192.168.0.2;Port=3306;Database=pgis;User=root;Password=mysql;Option=67108864;';
再次运行程序,建库建表成功!