나는이 문제를 어떻게 해결할 수 있을지 잘 모르겠다.IOS sqlite 업데이트 쿼리 문제
테이블 뷰에 표시되는 이벤트 데이터베이스가 있으며 해당 항목 중 하나를 선택하면 세부 정보가 "즐겨 찾기"로 저장되는 옵션과 함께 db의 열을 업데이트하고 나는 1
내가으로 실행 한 문제로 설정 그들의 "마음에 드는"이 모든 인스턴스를 찾는 두 번째 테이블보기를 1
로 설정이 난 단지 얻는 방법을 알아 낸 것입니다 "updateItem"데이터베이스 쿼리는 선택한 항목의 경로에서 작동하지 않습니다. 각 tableview는 다른 경로에 같은 항목을 표시하므로 "updateItem"쿼리는 "즐겨 찾기"테이블보기를 사용할 때 데이터베이스의 잘못된 항목을 업데이트합니다.
나는 UpdateItemAtID 메서드에서 aryDatabase를 사용하고 있고 즐겨 찾기 쿼리는 aryDatabaseFav를 사용한다는 것을 알고 있습니다. 내가 즐겨 찾기 tableview 주위에 두 번째 배열을 만들어야 만 했어, 아마 원래의 aryDatabase 배열로 2 개의 다른 배열을 갖는 것보다 원하는 모든 것을 가질 수있는 더 좋은 방법이있다.
여기에 두 개의 SELECT 문과 업데이트 쿼리에 대한 코드가 있습니다. 항목 경로를 필요로 할 수있는 더 좋은 방법이 있습니까?
-(void)readItems {
if (!database) return; // earlier problems
if (!selStmt)
{
const char *sql = "SELECT * FROM Events;";
if (sqlite3_prepare_v2(database, sql, -1, &selStmt, NULL) != SQLITE_OK)
{
selStmt = nil;
}
}
if (!selStmt)
{
NSAssert1(0, @"Can't build SQL to read items [%s]", sqlite3_errmsg(database));
}
// loop reading items from list
[aryDatabase removeAllObjects]; // clear list for rebuild
int ret;
while ((ret=sqlite3_step(selStmt))==SQLITE_ROW)
{ // get the fields from the record set and assign to item
//bindings omitted
[aryDatabase addObject:se]; // add to list
[se release]; // free item
}
sqlite3_reset(selStmt); // reset (unbind) statement
selStmt = nil;}
-(void)readFavItems {
if (!database) return; // earlier problems
if (!selStmt)
{
const char *sql = "SELECT * FROM Events WHERE mySchedule = 1;";
if (sqlite3_prepare_v2(database, sql, -1, &selStmt, NULL) != SQLITE_OK)
{
selStmt = nil;
}
}
if (!selStmt)
{
NSAssert1(0, @"Can't build SQL to read items [%s]", sqlite3_errmsg(database));
}
// loop reading items from list
[aryDatabaseFav removeAllObjects]; // clear list for rebuild
int ret;
while ((ret=sqlite3_step(selStmt))==SQLITE_ROW)
{ // get the fields from the record set and assign to item
//bindings omitted
[aryDatabaseFav addObject:se]; // add to list
[se release]; // free item
}
sqlite3_reset(selStmt); // reset (unbind) statement
selStmt = nil;}
-(void)updateItemAtID:(NSIndexPath *)path {
singleEvent *i = (singleEvent *)[aryDatabase objectAtIndex:path.row];
int ret;
const char *sql = "UPDATE events SET mySchedule = ? WHERE _id = ?;";
if (!updStmt)
{ // build update statement
if ((ret=sqlite3_prepare_v2(database, sql, -1, &updStmt, NULL))!=SQLITE_OK)
{
NSAssert1(0, @"Error building statement to update items [%s]", sqlite3_errmsg(database));
}
}
// bind values to statement
NSInteger m = i.intId;
sqlite3_bind_int(updStmt, 1, m);
NSInteger p = i.intPk;
sqlite3_bind_int(updStmt, 2, p);
if ((ret=sqlite3_step(updStmt)) != SQLITE_DONE)
{
NSAssert1(0, @"Error updating values [%s]", sqlite3_errmsg(database));
}
sqlite3_reset(updStmt);
}