4

MySQL データベースに接続する Delphi アプリケーションがありますが、エンド ユーザーが MySQL データベースを簡単に実装できる方法を提供したいと考えています。ユーザーが押すとスキーマの現在のインスタンスを削除し、アプリケーションが機能するために必要な正しいテーブルと列を含む新しいスキーマを作成できるボタンをアプリケーション内に作成することを考えました。

新しいデータベースを作成するためのコードを書きました。それは次のとおりです。

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 構文エラーが発生します。私は得ています:

'USE fakeschema; 付近の SQL 構文のエラー。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 を学んでいます。

4

5 に答える 5

0

cmd.exe を含まない解決策 (@Jason に基づく) は、mysqlソースコマンドを使用することです。

cmd := '-u USER_NAME -pUSER_PASSWORD DB_NAME -e "source createFakeSchema.sql"';
ShellExecute(handle, 'open', 'mysql.exe', Pchar(cmd), 'PATH_TO_MYSQL', SW_SHOW);
于 2014-06-25T19:07:47.533 に答える
0

MySQL 3.x のドキュメントを見て、ページを下にスクロールCREATE TABLEすると、適切な構文と思われるコメント投稿の 1 つに例が表示されます。次のように見えます(もちろんテストされていません):

CREATE TABLE IF NOT EXISTS Table1 (
  IDtable1 int(11) NOT NULL AUTO_INCREMENT,  
  Line1 varchar(45),  
  Line2 varchar(45)
  PRIMARY KEY (IDTable1)
);

DevArticlesで見つけた別の例を次に示します。

CREATE TABLE `articles` (
  `aID` int(4) NOT NULL auto_increment,
  `auth` varchar(100) NOT NULL default '',
  `title` varchar(100) NOT NULL default '',
  `article_body` text NOT NULL,
  `date_published` date NOT NULL default '0000-00-00',
  PRIMARY KEY  (`aID`)
) 

ただし、戦略を再考する必要があるかもしれません。ユーザーが誤ってボタンをクリックしてすべてのデータReset Databaseを削除した場合、何らかの問題が発生する可能性があります (住んでいる場所や関係するデータによっては、法的な問題が発生する可能性があります)。:-)

データをバックアップすることを考えてからTRUNCATE、代わりにテーブルの を実行して、何か問題が発生した場合にバックアップから復元できるようにすることをお勧めします。これにより、既存のスキーマを再利用できます。

于 2013-04-16T22:55:21.867 に答える
0

次のような MySQL エラー メッセージが表示された場合

' (引用符付き) '付近のSQL 構文のエラー

その引用部分の前にあるコードを常に見る必要があります。

この特殊なケースではCREATE SCHEMA IF NOT EXISTS fakeschema;

ドキュメントもそれについて非常に明確です

CREATE SCHEMA は、MySQL 5.0.2の時点で CREATE DATABASE の同義語です。

したがって、MySQL サーバー (バージョン 5.0.2 未満) またはこの場合は ODBC ドライバーがこれを認識していないため、このシノニムを使用することはできません。

これにより、現在のエラーメッセージが取り除かれます

CREATE DATABASE IF NOT EXISTS fakeschema;   
USE fakeschema;  
CREATE TABLE table1(
  IDtable1 int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,  
  Line1    varchar(45),  
  Line2    varchar(45)
);  
于 2013-04-17T05:49:01.013 に答える