2011-09-13 20 views
-1

私はデータベースを作成しました。私の見解では、すでに存在しているかどうかを確認しています。存在する場合は再試行します。そうでない場合はいいえ。このために私はこのコードを使用してい...ボタンアクションにデータベースとのデータの比較はどのようにですか?

+(BOOL)compareDataInDB:(NSString *)Start_text EndAddress:(NSString *)End_text Categories:(NSString *)Category_text{ 


BOOL flag=FALSE; 

if(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK) { 
    //int LastId="select Max(place_id) from Places"; 
    //  NSLog(@"%i",LastId); 
    const char *sql = "select * from Places where Start_text = Start_text and End_text = End_text and Category_text = Category_text"; 
    sqlite3_stmt *stmt; 
    int rtnVal = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); 
    if(rtnVal == SQLITE_OK) { 
     while (sqlite3_step(stmt) == SQLITE_ROW) { 
      flag=TRUE; 

     } 
    } 
    sqlite3_finalize(stmt); 
} 
sqlite3_close(db); 

if(flag==TRUE) 
    return YES; 
else 
    return NO; 

}

私はこのコード

-(IBAction)Find{ 
    BOOL tmp=[GlobalClass compareDataInDB:txtstart.text EndAddress:txtend.text Categories:txtCategory.text]; 
    if(tmp) 
    [GlobalClass storeDataInDB:txtstart.text EndAddress:txtend.text Categories:txtCategory.text]; 
    else 
     NSLog(@"exsit data in database"); 
} 

を使用していさて問題は、それは常にノーリターンということです。このコードのエラーは何ですか?そして、どのようにしてデータをデータベースから圧縮するのですか?

事前のおかげで...

+2

(フラグ== TRUE)がYESを返す場合は?これは冗談ですか? –

+0

@Mitch Wheatこれには何がありますか? – iRam11

+0

フラグがTRUEまたはFALSEの場合、それを比較する代わりにフラグを返すのはなぜですか?それは "間違った"部分です –

答えて

1

あなたはSQL文のために次のコードを使用する必要があります。

NSString *tempSQL = [[NSString alloc] initWithFormat:@"select * from Places where Start_text = '%@' and End_text = '%@' and Category_text = '%@'", Start_text, Start_text, Category_text]; 
const char *sql = [tempSQL cStringUsingEncoding:NSUTF8StringEncoding]; 
[tempSQL release]; 
0
+(BOOL)compareDataInDB:(NSString *)Start_text EndAddress:(NSString *)End_text Categories:NSString *)Category_text 
{  
    BOOL flag=NO; 

    if(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK) { 
     //int LastId="select Max(place_id) from Places"; 
     //  NSLog(@"%i",LastId); 
     const char *sql = "select * from Places where Start_text = Start_text and End_text = End_text and Category_text = Category_text"; 
     sqlite3_stmt *stmt; 
     int rtnVal = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); 
     if(rtnVal == SQLITE_OK) 
     { 
      sqlite3_bind_text(stmt, 1, [Start_text UTF8String], -1, SQLITE_TRANSIENT); 
      sqlite3_bind_text(stmt, 2, [End_text UTF8String], -1, SQLITE_TRANSIENT); 
      sqlite3_bind_text(stmt, 3, [Category_text UTF8String], -1, SQLITE_TRANSIENT); 

      while (sqlite3_step(stmt) == SQLITE_ROW) { 
       flag=YES; 
      } 
     } 
     sqlite3_finalize(stmt); 
    } 
    sqlite3_close(db); 

    return flag; 
    } 
関連する問題