2013-02-12 2 views
0

데이터베이스가 있지만 데이터베이스에서 데이터를 제거하려고해도 아무 일도 일어나지 않습니다. 어떻게 작동해야합니까?데이터베이스에서 데이터를 제거 할 수 없습니다.

/file path to database 
    -(NSString*)filePath { 
     NSArray*paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     return [[paths objectAtIndex:0]stringByAppendingPathComponent:@"bp.sql"]; 
    } 

    //open database 
    -(void)openDB { 

     if(sqlite3_open([[self filePath]UTF8String], &db) !=SQLITE_OK) { 
      sqlite3_close(db); 
      NSAssert(0, @"Databese failed to open"); 
     } 

     else { 
      NSLog(@"database opemed"); 
     } 


    } 


    - (IBAction)del:(id)sender { 

     NSString*sql = [NSString stringWithFormat:@"DELETE key, theDate, customer, code1, code2 FROM summary WHERE key=\"%@\"",customerName]; 
     const char* query_stmt = [sql UTF8String]; 
     sqlite3_stmt*statement; 

     sqlite3_prepare_v2(db, query_stmt, -1, & statement, NULL); 
     if (sqlite3_step(statement) == SQLITE_DONE) 
     { 
      NSAssert(0, @"database object delete failed"); 

     } else { 
      NSLog(@"No error"); 

     } 
     sqlite3_finalize(statement); 
     sqlite3_close(db) 
+0

을 :

이 내가 그것을 할 방법입니까? 전체 행을 삭제하거나 행의 일부 값을 삭제하려고합니까? – zaph

+0

문제가 해결 되었습니까? – Rajneesh071

+0

네 문제가 해결되었습니다 :) – Thymen

답변

3

당신은 DELETE 쿼리를 사용하여 특정 열 값을 삭제할 수 없습니다 : 내가 DTA 데이터베이스

이 여전히 삭제 누르면 때문에 코드입니다. 전체 행을 제거하기위한 것입니다.

enter image description here

문제는 다음과 같은 쿼리입니다 :

NSString*sql = [NSString stringWithFormat:@"DELETE key, theDate, customer, code1, code2 FROM summary WHERE key=\"%@\"",customerName]; 

변경 그것에 :

NSString*sql = [NSString stringWithFormat:@"DELETE FROM summary WHERE key=\"%@\"",customerName]; 

당신이 UPDATE 쿼리를 사용하여 행의 특정 열 값을 제거해야하는 경우 .

는 세부

+0

도움을 주셔서 감사합니다 – Thymen

+0

@ user1980004 : 즐거움과 함께 :) Thanks for the help –

0

하면 파일 경로를 확인처럼 쓴 모든 기능에 대한 sqlite documentation을 확인하시기 바랍니다, opendb은 (어쩌면 당신의 델 함수 내에서) 동일한 기능에서 발생한다. 당신이 달성하려고하는 어떤이 도움이

-(void)updateStatus:(NSString *)queryString { 
    NSString *docsDir; 
    NSArray  *dirPaths; 
    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    docsDir  = [dirPaths objectAtIndex:0]; 

    strDatabasePath   = [NSString stringWithString:[docsDir stringByAppendingPathComponent:@"bp.sql"]]; 
    NSFileManager *filemgr = [NSFileManager defaultManager]; 

    if ([filemgr fileExistsAtPath: strDatabasePath] == YES) 
    { 
     const char *dbpath = [strDatabasePath UTF8String]; 
     if (sqlite3_open(dbpath, &sqlDatabase) == SQLITE_OK) 
     { 
      const char* beginString = "BEGIN;"; 
      sqlite3_stmt *compiledstatement; 
      sqlite3_prepare_v2(sqlDatabase, beginString, -1, &compiledstatement, NULL); 
      if (sqlite3_step(compiledstatement) == SQLITE_DONE) {} 
      else DLog(@"Failed!"); 
      sqlite3_finalize(compiledstatement); 

      DLog(@"QUERY : %@",queryString); 

      const char *selectStatement = [queryString UTF8String]; 

      sqlite3_prepare_v2(sqlDatabase, selectStatement, -1, &compiledstatement, NULL); 
      //sqlite3_bind_text(compiledstatement,1,[statusString UTF8String],-1,SQLITE_TRANSIENT); 

      if (sqlite3_step(compiledstatement) == SQLITE_DONE) {} 
      else DLog(@"Failed!"); 
      sqlite3_finalize(compiledstatement); 


      const char* endString="END;"; 
      sqlite3_prepare_v2(sqlDatabase, endString, -1, &compiledstatement, NULL); 
      if (sqlite3_step(compiledstatement) == SQLITE_DONE) {} 
      else DLog(@"Failed!"); 
      sqlite3_finalize(compiledstatement); 

      sqlite3_close(sqlDatabase); 
     } 
     else DLog(@"Failed to open table"); 
    } 
} 

NSString *queryString; 
queryString = [NSString stringWithFormat:@"DELETE key, theDate, customer, code1, code2 FROM summary WHERE key=\"%@\"",customerName]; 
[self updateStatus:queryString]; 

희망 ...

0
-(BOOL)DeleteWishList:(int)rowno 
{ 

NSString *queryString=[NSString stringWithFormat:@"delete from wishtable where _id=%d",rowno]; 

[self openDB]; 
char *err; 
if (sqlite3_exec(dBObject, [queryString UTF8String], NULL,NULL, &err)!= SQLITE_OK) 
{ 
    sqlite3_close(dBObject);  
    return NO; 
} 
else 
{ 
    return YES; 
} 

} 
관련 문제