2015-03-04 3 views
0

У меня есть две разные базы данных, Databse1 и Database2. В этой базе данных содержится одинаковая таблица имен «tblSubUnit», и в этой таблице есть одно имя столбца «Избранное», теперь я хотите заменить столбец Database1 Table столбец таблицы Database2 (избранное). Поэтому, пожалуйста, помогите мне, как заменить/обновить это.Обновление/Замена двух столбцов таблицы базы данных

  1. Я создал функцию для этого, чтобы прикрепить эту две базы данных. Но после того, как я не смог обновить/заменить столбец, пожалуйста, помогите мне заблаговременно.

Код:

- (void)UpdateFavoriteData:(NSString*)query{ 

    NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0]; 

    NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]; 

    if(path==nil){ 
     path = [[NSBundle mainBundle] pathForResource:@"Base" ofType:@"lproj"]; 
    } 
    NSString *l_DatabasePathFromApp = [path stringByAppendingPathComponent:self.m_DatabaseName]; 

    sqlite3 *bookLoansDB; 
    if (sqlite3_open([self.m_DatabasePath UTF8String], &bookLoansDB) == SQLITE_OK) { 
     NSString *attachSQL = [NSString stringWithFormat: @"ATTACH DATABASE \'%s\' AS FavoriteData", [l_DatabasePathFromApp UTF8String]]; 
     char *errorMessage; 
     if (sqlite3_exec(bookLoansDB, [attachSQL UTF8String], NULL, NULL, &errorMessage) == SQLITE_OK) { 
      sqlite3_stmt *selectStmt; 

      NSString *selectSQL = @"UPDATE [FavoriteData.SubUnit], [main.SubUnit] SET [FavoriteData.SubUnit].[Faverite] = [main.SubUnit].[Faverite]"; 
      if (sqlite3_prepare_v2(bookLoansDB, [selectSQL UTF8String] , -1, &selectStmt, nil) == SQLITE_OK) { 
       if(sqlite3_step(selectStmt) == SQLITE_DONE) { 
       } 
      } 
      else { 
       NSLog(@"Error while Update statement: '%s'", sqlite3_errmsg(bookLoansDB)); 
      } 
     } 
     else { 
      NSLog(@"Error while attaching databases: '%s'", errorMessage); 
     } 
    } 
    else { 
     sqlite3_close(bookLoansDB); 
    } 

} 

Я пытался так много обновлений запросов, но такой же результат получил каждый раз, когда «Ошибка при заявлении Update», поэтому, пожалуйста, помогите мне, как обновить одну базы данных таблицы столбец с другим столбцом таблицы базы данных данные.

+0

возможно дубликат [SQL - Обновление таблицы с помощью поля другой таблицы] (http://stackoverflow.com/questions/5930698/sql-update-a-table-using-a-field-of -another-table) –

+0

Нет, все было по-другому. У меня есть две разные базы данных. –

+0

Но ваша проблема - синтаксис инструкции UPDATE. –

ответ

0

Я получил решение, я, наконец, получил правильный запрос для этого. см. ниже ответ.

- (void)UpdateFavoriteData:(NSString*)query{ 

    NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0]; 

    NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]; 

    if(path==nil){ 
     path = [[NSBundle mainBundle] pathForResource:@"Base" ofType:@"lproj"]; 
    } 
    NSString *l_DatabasePathFromApp = [path stringByAppendingPathComponent:self.m_DatabaseName]; 


    sqlite3 *bookLoansDB; 
    if (sqlite3_open([self.m_DatabasePath UTF8String], &bookLoansDB) == SQLITE_OK) { 
     NSString *attachSQL = [NSString stringWithFormat: @"ATTACH DATABASE \'%s\' AS FFavorite", [l_DatabasePathFromApp UTF8String]]; 
     char *errorMessage; 
     if (sqlite3_exec(bookLoansDB, [attachSQL UTF8String], NULL, NULL, &errorMessage) == SQLITE_OK) { 
      sqlite3_stmt *selectStmt; 

      NSString *selectSQL = @"update FFavorite.SubUnit set Faverite = (SELECT main.SubUnit.Faverite FROM main.SubUnit WHERE FFavorite.SubUnit.unit_id = main.SubUnit.unit_id)"; 
      if (sqlite3_prepare_v2(bookLoansDB, [selectSQL UTF8String] , -1, &selectStmt, nil) == SQLITE_OK) { 
       if(sqlite3_step(selectStmt) == SQLITE_DONE) { 
       } 
      } 
      else { 
       NSLog(@"Error while creating select statement: '%s'", sqlite3_errmsg(bookLoansDB)); 
      } 
     } 
     else { 
      NSLog(@"Error while attaching databases: '%s'", errorMessage); 
     } 
    } 
    else { 
     sqlite3_close(bookLoansDB); 
    } 

} 
Смежные вопросы