首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FireDAC TFDTable CreateTable

FireDAC TFDTable CreateTable
EN

Stack Overflow用户
提问于 2017-03-01 11:01:01
回答 1查看 801关注 0票数 1

我正在尝试使用FireDAC的CreateTable()方法来在TFDTable服务器上创建一个表。

代码语言:javascript
复制
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方法时,它会抛出一个不存在表xxxx.Setting的错误:

代码语言:javascript
复制
Im Projekt DBCreator.exe ist eine Exception der Klasse EMySQLNativeException mit der Meldung '[FireDAC][Phys][MySQL] Table 'setting' already exists' aufgetreten.

到目前为止,这条错误信息是正确的,但真正有趣的事实是,该表已经成功创建并插入了代码。

使用SQLite而不是MySQL也会发生这种情况。

我正在使用Embarcadero C++ Builder XE10西雅图。

我该如何正确处理这件事?有什么方法可以抑制这种非常无用的错误信息吗?

编辑:原来只有在调试器运行时才会抛出EMySQLNativeException。所以我只点击了复选框来忽略这些异常,一切都很好。

使用TFDTable和CreateTable()创建数据库就像魅力一样。不幸的是,它只是完全没有文件记录(几乎所有@Borland/CodeGear/Embarcadero).

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-15 19:30:47

该异常由FireDAC引擎引发,是由于试图创建表而不检查是否已经存在造成的。它是内部处理的,引擎工作正常,所以您看到的是调试器异常消息。如果您调用CreateTable方法时启用了enabled参数:

代码语言:javascript
复制
Table->CreateTable( True, TFDPhysCreateTableParts() << tpTable << tpPrimaryKey << tpIndexes );

该表将首先被删除,由于这个原因,您将不会得到上述异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42529958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档