Я создал таблицу sqlite, используя следующую инструкцию:
"CREATE TABLE IF NOT EXISTS reminders (ID INTEGER PRIMARY KEY,Name VARCHAR(64), Event VARCHAR(64), Date VARCHAR(64), Bfr VARCHAR(64), Val VARCHAR(64),Num VARCHAR(64), Bod VARCHAR(400) ,Grp VARCHAR(64))";
Я успешно вставил данные и извлек данные из базы данных sqlite и отобразил напоминания в виде напоминаний слишком программно!
Но я поражен удалением записей из базы данных sqlite. Я имею в виду, что я использовал класс модели для хранения таких значений, как имя, событие, дата и т. Д. На странице добавления напоминания я назначил значения для переменных, объявленных вкласс модели, то есть
textField.text = remClass.Name и т. д.
Мое описание может показаться запутанным, но приведенная выше информация всегда полезна, чтобы легко ответить на этот вопрос.1011 * Я добавил страницу напоминания, где пользователь вводит данные и нажимает кнопку Сохранить, затем данные вставляются в базу данных. Существует страница «Просмотр напоминаний», где пользователь может просматривать сохраненное напоминание. В нем есть 3 различных способа просмотра напоминаний: viewAll, viewMonthly, viewGroup. Теперь все, что мне удалось отобразить уникальный идентификатор для каждого напоминания, используяg следующее утверждение:
ReminderClass *loadedReminder = [[ReminderClass alloc] init];
loadedReminder.reminderID = sqlite3_column_int(statement, 0);
Где класс напоминания - это класс модели, который содержит все значения, введенные на странице добавления напоминания.
Для отображения сохраненного напоминания я использовалмассив и добавил объект класса модели после извлечения каждой строки, то есть идентификатор, имя, событие, дата и т. д. и соответственно заполнил представление таблицы. Скажем, если я сохраню 3 напоминания, то разделы будут 3, как мудрый и так далее ...
Теперь, если я нажму кнопку редактирования на странице напоминаний группы представлений, то, как мы знаем, мы можем удалить строку (раздел) представления таблицы, нажав кнопку ориентации слева.
Если я удаляюстрока, скажем строка с напоминанием. Затем данные, соответствующие этому напоминанию, также должны быть удалены из базы данных sqlite.
Как это сделать, я прошел через эту ссылку , звучит похожек моему требованию. Но это не работает.
Наконец, я реализовал следующий код для удаления:
if (editingStyle == UITableViewCellEditingStyleDelete)
{
[self.grpArray objectAtIndex:indexPath.section];
if(sqlite3_open([databasePath UTF8String], &remindersDB)==SQLITE_OK)
{
sqlite3_stmt *compiledstatement;
int pk = sqlite3_column_int(compiledstatement, 0);
NSString *querySQL = [NSString stringWithFormat:@"delete from reminders where ID = %i",pk];
const char *sqlstmt=[querySQL UTF8String];
if(sqlite3_prepare_v2(remindersDB, sqlstmt, -1, &compiledstatement, NULL)==SQLITE_OK)
{
if(SQLITE_DONE != sqlite3_step(compiledstatement))
NSAssert1(0,@"Error while creating delete statement => %s",sqlite3_errmsg(remindersDB));
}
NSLog(@"delete DONE");
sqlite3_finalize(compiledstatement);
}
sqlite3_close(remindersDB);
[self.gTable reloadData];
}
КОД ПОЛУЧЕНИЯ:
-(void)loadgReminders
{
EventsReminderAppDelegate *appDelegate = (EventsReminderAppDelegate *)[[UIApplication sharedApplication]delegate];
NSLog(@"String = %@",appDelegate.groupString);
self.grpArray = nil;
self.grpArray = [[NSMutableArray alloc]init];
//Retrieve the group of reminder
const char *thePath = [self.databasePath UTF8String];
sqlite3_stmt *statment;
if (sqlite3_open(thePath, &remindersDB) == SQLITE_OK)
{
NSString *getQuery = [NSString stringWithFormat:@"SELECT * FROM reminders WHERE Grp = '%@' ORDER BY Date ASC",appDelegate.groupString];
const char *sqlite_stmt = [getQuery UTF8String];
if (sqlite3_prepare_v2(self.remindersDB, sqlite_stmt, -1, &statment, NULL) == SQLITE_OK)
{
while (sqlite3_step(statment) == SQLITE_ROW)
{
ReminderClass *remind = [[ReminderClass alloc]init];
remind.reminderID = sqlite3_column_int(statment, 0);
**NSLog(@"reminderID=%d",remind.reminderID);**
remind.Name = [[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statment, 1)];
remind.Event = [[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statment, 2)];
remind.Date = [[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statment, 3)];
remind.numDays = [[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statment, 4)];
remind.selString = [[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statment, 5)];
remind.number = [[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statment, 6)];
remind.msgBody = [[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statment, 7)];
remind.remGroup = [[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statment, 8)];
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc]init]autorelease];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [dateFormat dateFromString:remind.Date];
[dateFormat setDateFormat:@"MMMM dd"];
NSString *dateVal = [dateFormat stringFromDate:date];
remind.Date = dateVal;
[self.grpArray addObject:remind];
[remind release];
}
sqlite3_finalize(statment);
}
sqlite3_close(remindersDB);
}
}
ThПрежде чем я использовал NSLog для проверки правильности отображения значений идентификатора напоминания или нет, он отображается следующим образом:
Но что не так, когда я пытаюсь сделать то же самое с удалением вполучить значения идентификатора и назначить это значение идентификатора где id =?.
Это не работает, где я не прав?
Может кто-нибудь, пожалуйста, помогите мне?