使用 Delphi XE7 和 MyDac 在运行时创建 MySQL Table 时出现问题

Problem creating MySQL Table at runtime with Delphi XE7 and MyDac

我正在帮一个朋友的忙,他的固定程序员请病假,他给了我一份临时工作。

我正在尝试使用 RAD Studio XE7 Delphi 和 MyDac 为他创建一个数据库。我退休了,自从我使用 Delphi 以来已经有一段时间了,那是 XE3。我可以毫无问题地创建数据库,但 table 有问题。它告诉我在执行之前的最后一行有语法错误。我无法显示他想要的实际字段,但我在 table 年前为我妻子创建了一个非常旧版本的 MyDac。我尝试使用我的旧代码,得到了相同的结果。

这是代码:

   Form1.MyCommand1 := TMyCommand.Create(nil);
    try
      Form1.MyCommand1.Connection := Form1.MyConnection1;
      Form1.MyCommand1.SQL.Add('CREATE TABLE films (');
      Form1.MyCommand1.SQL.Add(' series varchar(25) default NULL, ');
      Form1.MyCommand1.SQL.Add(' id int(11) default NULL, ');
      Form1.MyCommand1.SQL.Add(' dvd_no int(11) default NULL, ');
      Form1.MyCommand1.SQL.Add(' title varchar(40) default NULL, ');
      Form1.MyCommand1.SQL.Add(' actor1 varchar(30) default NULL, ');
      Form1.MyCommand1.SQL.Add(' actor2 varchar(30) default NULL, ');
      Form1.MyCommand1.SQL.Add(' director varchar(40) default NULL, ');
      Form1.MyCommand1.SQL.Add(' writer varchar(40) default NULL, ');
      Form1.MyCommand1.SQL.Add(' season varchar(30) default NULL, ');
      Form1.MyCommand1.SQL.Add(' episodes varchar(30) default NULL, ');
      Form1.MyCommand1.SQL.Add(' year varchar(4) default NULL, ');
      Form1.MyCommand1.SQL.Add(' genre varchar(30) default NULL, ');
      Form1.MyCommand1.SQL.Add(' rating varchar(15) default NULL, ');
      Form1.MyCommand1.SQL.Add(' comment longtext default NULL, ');
      Form1.MyCommand1.SQL.Add(' seen char(1) default NULL, ');
      Form1.MyCommand1.SQL.Add(' multisession char(1) default NULL, ');
      Form1.MyCommand1.SQL.Add(');');
      Form1.MyCommand1.Execute;
  finally
    Form1.MyCommand1.Free;
  end;
 

老实说,我忘记了“Form1.MyCommand1.SQL.Add(');'”这行实际上是干什么用的。我试过无数次修改它,但没有成功。

我显然在这里做错了什么,但正如我所说,已经很长时间了,在 80 岁时,灰色细胞不再像以前那样!

谁能帮帮我?

这应该有效:

   Form1.MyCommand1 := TMyCommand.Create(nil);
   try
      Form1.MyCommand1.Connection := Form1.MyConnection1;
      Form1.MyCommand1.SQL.Add('CREATE TABLE films (' +
                               ' series varchar(25) default NULL, ' +
                               ' id int(11) default NULL, ' +
                               ' dvd_no int(11) default NULL, ' +
                               ' title varchar(40) default NULL, ' +
                               ' actor1 varchar(30) default NULL, ' +
                               ' actor2 varchar(30) default NULL, ' +
                               ' director varchar(40) default NULL, ' +
                               ' writer varchar(40) default NULL, ' +
                               ' season varchar(30) default NULL, ' +
                               ' episodes varchar(30) default NULL, ' +
                               ' year varchar(4) default NULL, ' +
                               ' genre varchar(30) default NULL, ' +
                               ' rating varchar(15) default NULL, ' +
                               ' comment longtext default NULL, ' +
                               ' seen char(1) default NULL, ' +
                               ' multisession char(1) default NULL);';
      Form1.MyCommand1.Execute;
  finally
      Form1.MyCommand1.Free;
  end;

我不是 100% 确定最后一个分号。如果仍然出错,试试这个:

                               ' multisession char(1) default NULL)';