2011-09-13 3 views
1

名前、住所、電話番号の3つのテーブルを作成しました。 名前テキストフィールドに入力した名前に基づいてデータを削除します。私はこれを正常に行うことが、問題は、私は私のデータベースのラベルにない名前を入力すると、まだ「削除された連絡先」を示すことである...ここでYourTable名=「NameToDeleteから削除私のコードsqliteからデータを削除する方法

-(void)deleteContact{ 
     const char *dbPath=[databasePath UTF8String]; 
     sqlite3_stmt *statement; 
     if (sqlite3_open(dbPath, &contactDB)==SQLITE_OK) 
      { 

    NSString *querySQL=[NSString stringWithFormat:@"delete from 
       contacts where name=\"%@\"",name.text]; 
    const char *query_stmt=[querySQL UTF8String]; 
     sqlite3_prepare_v2(contactDB, query_stmt,-1,&statement, NULL); 
     (sqlite3_step(statement)==SQLITE_OK); 

      [email protected]"Contact Deleted"; 
    [email protected]""; 
    [email protected]""; 
    [email protected]""; 

     sqlite3_finalize(statement); 

    } 
sqlite3_close(contactDB); 

[name resignFirstResponder]; 
} 

答えて

2

削除するものがない場合でも削除はOKです。 削除するものがあるかどうかを知る必要がある場合は、これを確認する必要があります。

NSString *sql = [NSString stringWithFormat:@"select count (*) from contacts where name=\"%@\"", name.text]; 
sqlite3_stmt *stmt; 
int res = sqlite3_prepare_v2(database, [sql UTF8String], -1, &stmt, NULL); 
if (res != SQLITE_OK) { 
    NSLog(@"sqlite3_prepare_v2() failed"); 
    return; 
} 
int count = 0; 
if (sqlite3_step(stmt) == SQLITE_ROW) { 
    count = sqlite3_column_int(stmt, 0); 
} 
sqlite3_finalize(stmt); 

if (count == 0) { 
    // nothing to delete, do whatever you like 
} else { 
    // do real delete 
    // your code for that seems to be OK 
} 
+0

@valeriy ..ありがとうございます – NoviceDeveloper

+0

@MUKESHそれを言及しないでください。あなたに適した答えに投票してください。 –

+0

@NoviceDeveloper prpare_v2が失敗したため正しいコードを投稿してもらえますか?(感謝の意) –

2

です"
は、テーブルYourTableのNameToDeleteに等しいフィールド名を持つすべてのレコードを削除します。

+0

ありがとうございますが、私の問題は私のデータベースにはない名前を入力してもステータスはまだ連絡先が削除されています。 – NoviceDeveloper

+1

Mukesh、たぶんそれは "sqlite3_step(statement)== SQLITE_OK"は発火したクエリにエラーがなく、論理的に正しい場合に肯定的な結果が得られるからです。クエリがレコードを削除したかどうかはチェックしません。クエリは正しいので、毎回OKステータスを返します。データベースにない名前を送信したときでも、正しい操作を実行しています。 –

+0

私は、SQLite_OKの代わりに他のフラグを使用してステータスを '連絡先の削除'として設定する必要があると思います。 –

関連する問題