I am trying to pull data from a specific row when the user tries to make two or more entries on the same date(date being the primary key).
In my .h file
@interface PunchClock : UIViewController{
sqlite3 *db;
}
-(NSString *) filePath;
-(void)openDB;
-(void) createTable: (NSString *) tableName
withField1:(NSString *) field1
withField2:(NSString *) field2
withField3:(NSString *) field3;
In my .m file (not sure if any of the follow code is needed for deciphering my problem, but ill post it anyways)
-(void) createTable: (NSString *) tableName
withField1:(NSString *) field1
withField2:(NSString *) field2
withField3:(NSString *) field3;
{
char *err;
NSString *sql=[NSString stringWithFormat:@" CREATE TABLE IF NOT EXISTS '%@'('%@' TEXT PRIMARY KEY,'%@' TEXT,'%@' TEXT);",tableName,field1,field2,field3];
if(sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK){
sqlite3_close(db);
NSAssert(0, @"Could not create table");
}else{
NSLog(@"table created");
}
}
-(NSString *) filePath{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"PunchClock.sql"];
return path;
}
-(void)openDB{
if(sqlite3_open([[self filePath] UTF8String], &db) != SQLITE_OK){
sqlite3_close(db);
NSAssert(0, @"Database failed to open");
}else{
NSLog(@"database opened");
}
}
Now here is where my problem is. I can successfully insert data BUT when the user inputs data on the same date(field 1 being date , my primary key) I want to pull that data out update it and update the table. Im stuck at the part where I pull the data from the row(check comments for clarification):
- (IBAction)save:(id)sender {
{
NSString *HoursWorked = [NSString stringWithFormat:@"%f", final];
NSString *TotalEarned = [NSString stringWithFormat:@"%f", paidFloat];
NSString *sql = [NSString stringWithFormat:@"INSERT INTO HourLog ('Date', 'HoursWorked','TotalEarned') VALUES ('%@', '%@', '%@')", dbDate , HoursWorked, TotalEarned];
char *err;
if(sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK){
sqlite3_close(db);
// NSAssert(0,@"Could not update table");
//primary key already exists
[self openDB];
NSString *currentHoursWorked = HoursWorked;
NSString *currentTotalEarned = TotalEarned;
NSString *previousHoursWorked;
NSString *previousTotalEarned;
NSString *sql = [NSString stringWithFormat:@"SELECT FROM HourLog WHERE Date = '%@'", dbDate];
sqlite3_stmt *statement;
// the if statement below is not being executed for some reason? Can someone see why?
if(sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil)==SQLITE_OK){
char *field2 = (char *) sqlite3_column_text(statement, 1);
NSString *field2Str = [[NSString alloc]initWithUTF8String:field2];
previousHoursWorked = field2Str;
char *field3 = (char *) sqlite3_column_text(statement, 2);
NSString *field3Str = [[NSString alloc]initWithUTF8String:field3];
previousTotalEarned = field3Str;
}
sqlite3_finalize(statement);
sqlite3_close(db);
NSLog(@"%@", previousHoursWorked);
NSLog(@"%@", previousTotalEarned);
}else{
NSLog(@"table updated");
}
}
}