FireDAC TFDTable 创建表
FireDAC TFDTable CreateTable
我正在尝试使用 FireDAC 的 TFDTable class 的 CreateTable() 方法在我的 MySQL 服务器上创建一个 table。
void __fastcall TFormMain::ButtonCreateTableClick(TObject *Sender)
{
TFDTable *Table = new TFDTable(this);
try
{
Table->Connection = FDConnection;
Table->TableName = "Setting";
Table->Exclusive = true;
//Table->FieldDefs->Add( "SettingCode", ftString, 99 );
//Table->FieldDefs->Add( "SettingValue", ftString, 255 );
TField *Field;
Field = new TStringField( this );
Field->Name = "FieldSettingCode";
Field->FieldName = "SettingCode";
Field->Size = 100;
Field->DataSet = Table;
Field = new TStringField( this );
Field->Name = "FieldSettingValue";
Field->FieldName = "SettingValue";
Field->Size = 255;
Field->DataSet = Table;
// Fires "Table 'Setting' doesn't exist" error
Table->CreateTable( false, TFDPhysCreateTableParts() << tpTable << tpPrimaryKey << tpIndexes );
Table->Open();
Table->Insert();
Table->FieldByName("SettingCode")->Value = "test2";
Table->FieldByName("SettingValue")->Value = "testValue2";
Table->Post();
// Table->CreateDataSet();
}
__finally
{
Table->Free();
}
}
只要我调用 CreateTable 方法,它就会抛出 table xxxx.Setting 不存在的错误:
Im Projekt DBCreator.exe ist eine Exception der Klasse EMySQLNativeException mit der Meldung '[FireDAC][Phys][MySQL] Table 'setting' already exists' aufgetreten.
到目前为止一切顺利:此错误消息是正确的 - 但真正有趣的事实是,table 已成功创建并已插入代码。
使用 SQLite 而不是 MySQL 也会发生这种情况。
我正在使用 Embarcadero C++ Builder XE10 Seattle。
我该如何正确处理?
有没有办法抑制这个非常无用的错误消息?
编辑:
原来EMySQLNativeException只有在调试器为运行时才会抛出。所以我只是单击复选框以忽略这些异常,一切都很好。
使用 TFDTable 和 CreateTable() 创建数据库非常有效。不幸的是,它根本没有记录(就像几乎所有@Borland/CodeGear/Embarcadero)...
该异常由 FireDAC 引擎抛出,是由于尝试创建 table 而未检查是否已存在而引起的。它在内部处理并且引擎正常运行,因此您看到的是调试器异常消息。如果您在启用重新创建参数的情况下调用了 CreateTable 方法:
Table->CreateTable( True, TFDPhysCreateTableParts() << tpTable << tpPrimaryKey << tpIndexes );
table 将首先被删除,因此您不会得到上述异常。
我正在尝试使用 FireDAC 的 TFDTable class 的 CreateTable() 方法在我的 MySQL 服务器上创建一个 table。
void __fastcall TFormMain::ButtonCreateTableClick(TObject *Sender)
{
TFDTable *Table = new TFDTable(this);
try
{
Table->Connection = FDConnection;
Table->TableName = "Setting";
Table->Exclusive = true;
//Table->FieldDefs->Add( "SettingCode", ftString, 99 );
//Table->FieldDefs->Add( "SettingValue", ftString, 255 );
TField *Field;
Field = new TStringField( this );
Field->Name = "FieldSettingCode";
Field->FieldName = "SettingCode";
Field->Size = 100;
Field->DataSet = Table;
Field = new TStringField( this );
Field->Name = "FieldSettingValue";
Field->FieldName = "SettingValue";
Field->Size = 255;
Field->DataSet = Table;
// Fires "Table 'Setting' doesn't exist" error
Table->CreateTable( false, TFDPhysCreateTableParts() << tpTable << tpPrimaryKey << tpIndexes );
Table->Open();
Table->Insert();
Table->FieldByName("SettingCode")->Value = "test2";
Table->FieldByName("SettingValue")->Value = "testValue2";
Table->Post();
// Table->CreateDataSet();
}
__finally
{
Table->Free();
}
}
只要我调用 CreateTable 方法,它就会抛出 table xxxx.Setting 不存在的错误:
Im Projekt DBCreator.exe ist eine Exception der Klasse EMySQLNativeException mit der Meldung '[FireDAC][Phys][MySQL] Table 'setting' already exists' aufgetreten.
到目前为止一切顺利:此错误消息是正确的 - 但真正有趣的事实是,table 已成功创建并已插入代码。
使用 SQLite 而不是 MySQL 也会发生这种情况。
我正在使用 Embarcadero C++ Builder XE10 Seattle。
我该如何正确处理? 有没有办法抑制这个非常无用的错误消息?
编辑: 原来EMySQLNativeException只有在调试器为运行时才会抛出。所以我只是单击复选框以忽略这些异常,一切都很好。
使用 TFDTable 和 CreateTable() 创建数据库非常有效。不幸的是,它根本没有记录(就像几乎所有@Borland/CodeGear/Embarcadero)...
该异常由 FireDAC 引擎抛出,是由于尝试创建 table 而未检查是否已存在而引起的。它在内部处理并且引擎正常运行,因此您看到的是调试器异常消息。如果您在启用重新创建参数的情况下调用了 CreateTable 方法:
Table->CreateTable( True, TFDPhysCreateTableParts() << tpTable << tpPrimaryKey << tpIndexes );
table 将首先被删除,因此您不会得到上述异常。