そういえば昔お菓子を管理するアプリを作っていたので
すこし紹介しようと思います。
会社のデスクにおいて、お菓子のストックを管理し、
対象のお菓子の在庫をwebビューで表示するアプリです。
バーコード読み取り機能もなにげにあるアプリです。
コンビニで買ってきたお菓子をテキストに入力し、
登録を押すと、右のpikerveiwに追加します。
PikerViewをスクロールした際、対象のお菓子をWebViewに表示する処理は
下記のように書きます。
データベースを生成したり、色々やってます。
- (void) pickerView: (UIPickerView*)pView didSelectRow:(NSInteger) row inComponent:(NSInteger)component {
NSLog(@"row=%d, component=%d", row, component);
int row1 = [picker selectedRowInComponent:0];
sqlite3* db;
NSString* work_path;
NSString* database_filename;
NSString* database_path;
NSString* template_path;
NSString* okasiname;
// データベース名をここでは “testDB.sqlite” とします。
database_filename = @"new.sqlite";
// データベースファイルを格納するために文書フォルダーを取得します。
work_path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
// データベースファイルのパスを取得します。
database_path = [NSString stringWithFormat:@"%@/%@", work_path, database_filename];
// 文書フォルダーにデータベースファイルが存在しているかを確認します。
NSFileManager* manager = [NSFileManager defaultManager];
if (![manager fileExistsAtPath:database_path])
{
NSError* error = nil;
// 文書フォルダーに存在しない場合は、データベースの複製元をバンドルから取得します。
template_path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:database_filename];
// バンドルから取得したデータベースファイルを文書フォルダーにコピーします。
if (![manager copyItemAtPath:template_path toPath:database_path error:&error])
{
// データベースファイルのコピーに失敗した場合の処理です。
NSLog(@"DB読み込み失敗");
} else {
NSLog(@"DB読み込み成功");
}
}else {
NSLog(@"DB発見");
}
// 文書フォルダーに用意されたデータベースファイルを開きます。
if (sqlite3_open([database_path UTF8String], &db) == SQLITE_OK)
{
// データベースファイルを SQLite で開くことに成功しました。
NSLog(@"DBopen成功");
}
sqlite3_stmt *statement;
const char *sql = "select * from cate2;";
if (sqlite3_prepare_v2(db, sql, -1, &statement, NULL) != SQLITE_OK)
{
NSLog(@"error message ‘%s’.", sqlite3_errmsg(db));
}else{
NSLog(@"SQLコンパイル成功");
//NSString *pliceStr2 = [ NSString stringWithFormat: @"%d", row ];
//sqlite3_bind_text (statement, 1, [pliceStr2 UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_step(statement);
//管理画面のテキストに抽出データ格納
//if (row == 0){okasiname = @"tomono2";}
if (row1 == 0){okasiname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];}
else if (row1==1) {okasiname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 2)];}
else if (row1==2) {okasiname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 3)];}
else if (row1==3) {okasiname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 4)];}
else if (row1==4) {okasiname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 5)];}
else if (row1==5) {okasiname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 6)];}
else if (row1==6) {okasiname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 7)];}
else if (row1==7) {okasiname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 8)];}
else if (row1==8) {okasiname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 9)];}
else if (row1==9) {okasiname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 10)];}
//prepare済みSQLステートメントを廃棄します。
sqlite3_finalize(statement);
//データベースを閉じます。
sqlite3_close(db);
}
usertxt.text = okasiname;
NSString *work_path2 = @"http://jan.bizwing.jp/?word=";
NSString *work_path3 =[NSString stringWithFormat:@"%@%@",work_path2,okasiname];
NSURLRequest* req = [NSURLRequest requestWithURL:[NSURL URLWithString:work_path3 ]];
[webView loadRequest:req];
//int row2 = [picker selectedRowInComponent:1];
//int row3 = [picker selectedRowInComponent:2];
NSLog(@"selected , %d", row1);
// NSLog(@"selected %d, %d, %d", row1, row2, row3);
}
登録ボタンの処理も載せておきます。
登録処理の中でデータベースを作り、アップデートしています。
なにげに色々書いてあるので役立つかもしれません。
- (IBAction)insertButton:(id) sender {
// キーボードを隠す
[self textFieldResignFirstResponder];
sqlite3* db;
NSString* work_path;
NSString* database_filename;
NSString* database_path;
NSString* template_path;
NSString* chk;
chk=calText.text;
if (chk == @""){
UIAlertView *alert = [ [UIAlertView alloc] initWithTitle:@"未入力"
message:@"登録お菓子を入力してください"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
else{
// データベース名をここでは “testDB.sqlite” とします。
database_filename = @"new.sqlite";
// データベースファイルを格納するために文書フォルダーを取得します。
work_path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
// データベースファイルのパスを取得します。
database_path = [NSString stringWithFormat:@"%@/%@", work_path, database_filename];
// 文書フォルダーにデータベースファイルが存在しているかを確認します。
NSFileManager* manager = [NSFileManager defaultManager];
if (![manager fileExistsAtPath:database_path])
{
NSError* error = nil;
// 文書フォルダーに存在しない場合は、データベースの複製元をバンドルから取得します。
template_path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:database_filename];
// バンドルから取得したデータベースファイルを文書フォルダーにコピーします。
if (![manager copyItemAtPath:template_path toPath:database_path error:&error])
{
// データベースファイルのコピーに失敗した場合の処理です。
NSLog(@"DB読み込み失敗");
} else {
NSLog(@"DB読み込み成功");
}
}else {
NSLog(@"DB発見");
}
// 文書フォルダーに用意されたデータベースファイルを開きます。
if (sqlite3_open([database_path UTF8String], &db) == SQLITE_OK)
{
// データベースファイルを SQLite で開くことに成功しました。
NSLog(@"DBopen成功");
}
//******************************トランケート************************************
sqlite3_exec(db, "BEGIN", NULL, NULL, NULL );
//******************************トランケート************************************
sqlite3_stmt *statement;
// const char *sql = "SELECT osaihu,bank,allmoney,warkmoney,overwarkH,overwarkM,moneyH,overwarkmoney,cledit,nextwarkmoney FROM osaihuDB WHERE osaihuid = 0;";
const char *sql;
if ([picker selectedRowInComponent:0] ==0) {sql = "update cate2 set name0 = ?;";}
else if([picker selectedRowInComponent:0]==1){sql = "update cate2 set name1 = ?;";}
else if([picker selectedRowInComponent:0]==2){sql= "update cate2 set name2 = ?;";}
else if([picker selectedRowInComponent:0]==3){sql= "update cate2 set name3 = ?;";}
else if([picker selectedRowInComponent:0]==4){sql = "update cate2 set name4 = ?;";}
else if([picker selectedRowInComponent:0]==5){sql= "update cate2 set name5 = ?;";}
else if([picker selectedRowInComponent:0]==6){sql = "update cate2 set name6 = ?;";}
else if([picker selectedRowInComponent:0]==7){sql= "update cate2 set name7 = ?;";}
else if([picker selectedRowInComponent:0]==8){sql = "update cate2 set name8 = ?;";}
else if([picker selectedRowInComponent:0]==9){sql = "update cate2 set name9 = ?;";
}
if (sqlite3_prepare_v2(db, sql, -1, &statement, NULL) != SQLITE_OK)
{
NSLog(@"error message ‘%s’.", sqlite3_errmsg(db));
}else{
NSLog(@"SQLコンパイル成功");
sqlite3_bind_text (statement, 1, [calText.text UTF8String], -1, SQLITE_TRANSIENT);
//sqlite3_bind_text (statement, 1, [calText.text UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_step(statement);
//管理画面のテキストに抽出データ格納
//add
//okasiname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)];
sqlite3_exec(db, "COMMIT", NULL, NULL, NULL );
//prepare済みSQLステートメントを廃棄します。
sqlite3_finalize(statement);
//データベースを閉じます。
sqlite3_close(db);
UIAlertView *alert = [ [UIAlertView alloc] initWithTitle:@"登録"
message:@"登録完了しました"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
picker.delegate = self;
}
0 件のコメント:
コメントを投稿