2012-05-04 10 views
0

私のアプリを実行するときに次の警告が表示されます: "'const char *'を 'sqlite3_stmt *'型のパラメータに渡す互換性のないポインタ型aka 'struct sqlite3_stmt *') "と入力します。iOSでSQLiteを使用する...奇妙な警告

それが唯一の次の行に発生します。ここでは

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... 
} 

すべてのヘルプや洞察力をいただければ幸いです。ありがとう!

答えて

0

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

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

sqlite3_finalize(statement); 

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

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

を交換しsqlite3_prepare_v2上のドキュメントは、この方法の詳細を提供します。

+0

これは機能しましたが、アプリを実行するといくつかのエラーが発生します。私はこのことがうまくいくかのように見えるので、私がそれを理解できなければ、別の質問を作成します。すべての助けをありがとう! – Skizz