0

アプリを実行するときに問題が発生しました。「互換性のないポインター型が「constchar*」をタイプ「sqlite3_stmt*」(別名「structsqlite3_stmt *」)のパラメーターに渡します」という警告が表示されます。

次の行でのみ発生します。

if (sqlite3_prepare_v2(database, sql, -1, &databasePath, NULL)!=SQLITE_OK)

while (sqlite3_step(sql) == SQLITE_ROW)

szStore = [NSString stringWithUTF8String:(char*)sqlite3_column_text(sql, 0)];

szReg = [NSString stringWithUTF8String:(char*)sqlite3_column_text(sql, 1)];

sqlite3_finalize(sql); 

関数は次のとおりです。

-(IBAction)setInput:(id)sender
{
NSString *strStoreNumber;
NSString *strRegNumber;

strStoreNumber = StoreNumber.text;
strRegNumber = RegNumber.text;
lblStoreNumber.text = strStoreNumber;
lblRegNumber.text = strRegNumber;

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,         NSUserDomainMask, YES);
NSString* documentsDirectory = [paths lastObject];
//    NSString* databasePath = [documentsDirectory   stringByAppendingPathComponent:@"tblStore.sqlite"];
NSString* databasePath = [[NSBundle mainBundle] pathForResource:@"tblStore" ofType:@"sqlite"];

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 
{

NSLog(@"Opened sqlite database at %@", databasePath);

//...stuff
} 
else 
{
NSLog(@"Failed to open database at %@ with error %s", databasePath,     sqlite3_errmsg(database));
sqlite3_close (database);
}

NSString *querystring;

// create your statement
querystring = [NSString stringWithFormat:@"SELECT strStore FROM tblStore WHERE strStore = %@;", strStoreNumber];  

const char *sql = [querystring UTF8String];

NSString *szStore = nil;
NSString *szReg = nil;


if (sqlite3_prepare_v2(database, sql, -1, &databasePath, NULL)!=SQLITE_OK) //queryString =    Statement
{
NSLog(@"sql problem occured with: %s", sql);
NSLog(@"%s", sqlite3_errmsg(database));
}
else
{
// you could handle multiple rows here

while (sqlite3_step(databasePath) == SQLITE_ROW) // queryString = statement
{            
    szStore = [NSString stringWithUTF8String:(char*)sqlite3_column_text(databasePath, 0)];
    szReg = [NSString stringWithUTF8String:(char*)sqlite3_column_text(databasePath, 1)];
} // while        

}

sqlite3_finalize(databasePath);

// Do something with data...  
}

どんな助けや洞察も大歓迎です。ありがとう!

4

1 に答える 1

0

代わりに、データベースパスがステートメントハンドルポインタに渡されます。交換

if (sqlite3_prepare_v2(database, sql, -1, &databasePath, NULL)!=SQLITE_OK)

sqlite3_stmt *statement = nil;
if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL)!=SQLITE_OK)

ファイナライズラインをに設定します

sqlite3_finalize(statement);

sqlite3_prepare_v2のドキュメントには、このメソッドの詳細が記載されています。

于 2012-05-05T09:13:13.810 に答える