2

テーブルに外部キー制約がありますが、ターミナルを使用してデータを挿入すると正常に機能しますが、xcodeプロジェクトで実行すると、問題が発生する可能性があります。プログラムを介してプラグマforeign_keys=ONを有効にするにはどうすればよいですか。以下のコードを挿入に使用していますが、外部キーが有効になっていないと思います。プログラムを介して外部キーを有効にするにはどうすればよいか教えてください。

+(BOOL)insertEmployee:(int)din :(NSString*)name{

NSArray *arrDocPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *strDestPath = [NSString stringWithFormat:@"%@/samplepillbox1.sqlite",[arrDocPath objectAtIndex:0]];

sqlite3 *dbEmployee;
if(sqlite3_open([strDestPath UTF8String], &dbEmployee)==SQLITE_OK)
{

    //NSString *insertQuery = [NSString stringWithFormat:@"insert into maintable_master(din,brand_name) values(%d,'%@')",din,name];
    //NSString *insertQuery = [NSString stringWithFormat:@"insert into doctor_master(din,firstname) values(%d,'%@')",din,name];
    NSString *insertQuery = [NSString stringWithFormat:@"insert into schedule_master(din,start_date) values(%d,'%@')",din,name];
    void *v;
    char *errmsg;
    if(sqlite3_exec(dbEmployee, [insertQuery UTF8String], 0, v, &errmsg)==SQLITE_OK)
    {
        NSLog(@"inserted successfully");
        return YES;
    }
}
return NO;}
4

1 に答える 1

4

より標準的なSQLステートメントを実行するのと同じように、プラグマを設定できるはずです。通常、データベース接続を開いた直後にプラグマを設定します。

したがって、コードはこれに沿って何かを見る必要があります。

// 1. open the connection
...

// 2. set the pragma
if (sqlite3_exec(dbEmployee, @"PRAGMA foreign_keys = ON", 0, v, &errmsg) != SQLITE_OK)
{
    NSLog(@"failed to set the foreign_key pragma");
    return -1;
}
于 2012-04-28T09:44:10.680 に答える