2010-04-14 3 views
1

Я создаю приложение для упражнений, которое будет записывать используемый вес и количество «повторений», которые пользователь сделал в 4 «наборах» в день в течение 7 дней, чтобы пользователь мог просматривать их прогресс.Sqlite3 INSERT INTO Question × 377

Я создал таблицу базы данных с именем FIELDS с 2 столбцами ROW и FIELD_DATA, и я могу использовать приведенный ниже код для загрузки данных в db. Но код имеет SQL заявление, в котором говорится,

INSERT OR REPLACE INTO FIELDS (ROW, FIELD_DATA)VALUES (%d, '%@'); 

Когда я изменить Постулаты к:

INSERT INTO FIELDS (ROW, FIELD_DATA)VALUES (%d, '%@'); 

Ничего не происходит. То есть данные не записываются в db.

Ниже приведен код:

#define kFilname @"StData.sqlite3" 

- (NSString *)dataFilePath 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains 
    (NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    return [documentsDirectory stringByAppendingPathComponent:kFilname]; 
} 

-(IBAction)saveData:(id)sender; 
{ 

    for (int i = 1; i <= 8; i++) 
    { 
    NSString *fieldName = [[NSString alloc]initWithFormat:@"field%d", i]; 
    UITextField *field = [self valueForKey:fieldName]; 
    [fieldName release]; 

    NSString *insert = [[NSString alloc] initWithFormat: 
     @"INSERT OR REPLACE INTO FIELDS (ROW, FIELD_DATA) 
      VALUES (%d, '%@');",i, field.text]; 
    // sqlite3_stmt *stmt; 

    char *errorMsg; 

    if (sqlite3_exec (database, [insert UTF8String], 
     NULL, NULL, &errorMsg) != SQLITE_OK) 
    { 
     // NSAssert1(0, @"Error updating table: %s", errorMsg); 
     sqlite3_free(errorMsg); 
    } 
    } 
    sqlite3_close(database);  
} 

Так как же я могу изменить код, чтобы сделать то, что я хочу? Поначалу это было похоже на простое изменение сложения sql, но, очевидно, должно быть больше. Я новичок в программировании Objective-C и iPhone. Я не новичок в использовании операторов sql, поскольку я несколько раз создавал веб-приложения в ASP.

Любая помощь будет принята с благодарностью, это сводит меня с ума!

+0

Не могли бы вы дать нам краткое описание вашего datamodel? Я думаю, что есть проблема в том, как вы хотите хранить данные. – Zento

ответ

0

Предложения:

  • написать заявление вставки с закодированных значений, чтобы увидеть, если вставка работает
  • Ваше имя файла не содержит путь. принимает ли он текущий каталог при выполнении? с какого каталога он работает?
  • напишите сообщение, если возможно, посмотрите, какие значения вы получаете. Правильны ли они?
+0

Спасибо за ответ, Я использую плагин FireFox для SQLite Manager, чтобы узнать, введен ли данные. если я использую оператор sql с REPLACE в нем, данные отлично заменяют старые данные в базе данных. Если я удалю ИЛИ ЗАМЕНИТЬ, данные в таблице не будут изменены. Приложение работает с документами. База данных находится в/Users/dave/Library/Application Support/iPhone Simulator/User/Applications/32A716E5-F .../Documents/StData.sqlite3 (Изменена пронумерованная папка). Я импортировал db в Xcode и скопировал его в Documents, но он по-прежнему идет по указанному выше пути. Но он заменяет, но не вставляет. – user316717

+0

Я думаю, вы неправильно поняли, что делает этот вариант. Если существует другая соответствующая запись, она не будет вставляться, если вы не добавите опцию «или заменить». На сайте sqlite.org есть достаточно хорошая документация, которая объясняет это. – Jay