このレッスンを完了するには、コンピューターに SQL Anywhere をインストールする必要があります。このレッスンでエラーまたは警告を受け取った場合は、インストール環境が適切に設定されていること、および正しい環境変数が設定されていることを確認してください。
これで、Names アプリケーションを使用して Ultra Light データベースに名前を追加および削除できるようになりました。次に、コンピューター上の統合データベースサーバーに同期を追加します。
Sybase Central を開きます。
[ツール] » [SQL Anywhere 12] » [データベースの作成] をクリックします。
[ようこそ] 画面および [ロケーションの選択] 画面で、[次へ] をクリックします。
データベースファイルを保存するロケーションを選択し、Names.db という名前を付けます。[完了] をクリックします。
その他のオプションはデフォルトのままにしておきます。
データベースが作成されたら、ポップアップウィンドウを閉じます。
同期を行うには、まず統合データベースにテーブルを作成する必要があります。
左側のリストが [タスク] または [検索] になっている場合は、[表示] » [フォルダー] を選択して、[フォルダー] に変更します。
[フォルダー] ウィンドウ枠で、Names データベースの [テーブル] 要素を、[control] キーを押したままクリックして、[新規] » [テーブル] をクリックします。
テーブルに Names という名前を付けて、[完了] をクリックします。
これにより、テーブルが作成され、テーブルのプライマリキーカラムに名前を付ける場所にカーソルが位置付けられます。
テーブルのプライマリキーに id という名前を付け、uniqueidentifier 型にします。
[値] 見出しの下の [...] ボタンをクリックし、[ユーザー定義の値] にデフォルト値 (NEWID()) を設定します。
[リテラル文字列] オプションがオフであることを確認して、[OK] をクリックします。
ツールバーの [新しいカラム] ボタンをクリックして、もう 1 つカラムを追加します。
新しいカラムに name という名前を付け、サイズ 254 の VARCHAR 型にします。
name カラムの [NULL] オプションをオフにします。
name カラムの [ユニーク] オプションをクリックします。
ツールバーの [保存] ボタンをクリックします。
データベースを切断します。
Mobile Link を設定するには、統合データベース用の ODBC データソースがシステムに必要です。最初に SQL Anywhere ODBC ドライバーをインストールしてから、ODBC データソースを設定してください。
ターミナルを開きます。
次のコマンドを実行して、SQL Anywhere 設定ファイルを読み込みます。
source ./sa_config.sh |
設定ファイルを読み込むことによって、dbdsn ユーティリティを使用できます。
次のコマンドを実行して、ODBC データ名ソースを作成します。
dbdsn -w "Names" -c "UID=dba;PWD=sql;DBF=/Users/user/Names.db" |
データベースのロケーションが異なる場合は、DBF オプションを変更してください。
Mobile Link で同期を実行するには、同期スクリプトを設定する必要があります。設定を簡単に行うために、Sybase Central では、多くの一般的な形式の同期のためのスクリプトテンプレートを提供しています。
Sybase Central を起動します。
[ツール] » [Mobile Link 12] » [新しいプロジェクト] をクリックします。
プロジェクトに NamesProject という名前を付け、[次へ] をクリックします。
[統合データベースをプロジェクトに追加] をオンにします。NamesCondb の [データベースの表示名] を指定します。接続文字列として UID=dba;PWD=sql;DSN=Names
を指定します。[編集] ボタンをクリックして、この文字列を指定することもできます。[次へ] をクリックします。
[新しいモデルを作成する] をクリックして [次へ] をクリックします。
[リモートスキーマ名をプロジェクトに追加] をクリックして名前を入力し、[Ultra Light スキーマ] を選択して [完了] をクリックします。
このウィンドウでは、Mobile Link システム設定をインストールするかどうかを尋ねられます。このリモートスキーマは実際には使用されませんが、リモートスキーマが iPhone 上にあるため、このオプションが最も単純です。
Mobile Link がまだインストールされていないというメッセージが表示され、今すぐインストールするかどうかを確認されます。[はい] をクリックします。
これにより、Mobile Link に必要なテーブルといくつかのストアドプロシージャーがデータベースに作成されます。
モデル名として NamesModel と入力し、[次へ] をクリックします。
Mobile Link の要件を確認し、3 つのチェックボックスをすべてクリックして、[次へ] をクリックします。
同期が正しく機能するために、Mobile Link では、テーブルのプライマリキーに関していくつかのことを前提としています。Names アプリケーションでは、これらの前提にすでに従っているため、変更は必要ありません。
[NamesCondb] 統合データベースをクリックして [次へ] をクリックします。
[いいえ、新しいリモートデータベーススキーマを作成します] をクリックし、[次へ] をクリックします。
テーブルのリストで Names テーブルを選択し、[次へ] をクリックします。
その他のリストされているテーブルは Mobile Link によってバックグラウンドで使用されるため、同期の設定では無視しても問題ありません。
[ダウンロードタイプ] として Timestamp-based download をクリックします。
このオプションでは、最後の同期以降の変更のみを同期することによって、同期の適切なデフォルト実装が提供されます。このオプションでは、必要のないデータが転送されないため、iPhone の帯域幅が節約されます。
その他の設定はすべてデフォルトのままにして、[完了] をクリックします。
Mobile Link のテンプレートとして利用可能なその他のオプションを確認する場合は、ウィザードのすべての手順をクリックして進みます。
同期モデルが作成されたため、左側の [フォルダー] ビューに表示されます。[フォルダー] ビューが表示されていない場合は、[表示] » [フォルダー] をクリックします。
同期モデルを展開するには、次の手順に従います。
[フォルダー] ビューで、[control] キーを押したまま NamesModel をクリックし、[展開] をクリックします。
[統合データベース] と [Mobile Link サーバー] をオンのままにして、[リモートデータベースと同期クライアント] をオフにし、[次へ] をクリックします。
リストで NamesCondb を選択し、[次の SQL ファイルに変更を保存する] と [統合データベースに接続して変更を直接適用する] をクリックします。[次へ] をクリックします。
プロンプトが表示されたら、新しいフォルダーの作成を受け入れます。
Mobile Link のユーザーとパスワードを入力します。
Mobile Link ユーザーは、SQL Anywhere データベースユーザーとは区別されます。dba 以外のユーザー名を使用してください。このチュートリアルでは、それぞれ "user" と "password" を使用します。これらの値はチュートリアルでこの後使用します。
[Mobile Link 認証用にこのユーザーを統合データベースに登録する] がオンであることを確認して、[完了] をクリックします。
プロンプトが表示されたら、新しいフォルダーの作成を受け入れます。
展開ウィンドウに展開が完了したことが表示されたら、[閉じる] をクリックして終了します。
同期モデルが展開され、統合データベースには Mobile Link が機能するために必要なすべての情報が設定されました。展開によって、Mobile Link サーバーを起動するためのスクリプトも作成されました。
ターミナルを開きます。
展開によって起動スクリプトが保存されたターミナルセッションにナビゲーションします。デフォルトでは、~/NamesProject/NamesModel/mlsrv です。
スクリプトが実行できる状態であることを確認します。
chmod u+x NamesModel_mlsrv.sh |
Mobile Link サーバーを起動します。
./NamesModel_mlsrv.sh "DSN=Names" |
統合データベースに対して Mobile Link サーバーが実行されるようになりました。
アプリケーションがサーバーと同期できるようにするには、まず同期を有効にする必要があります。DataAccess クラスの openConnection メソッドで、データベースの作成 (ULDatabaseManager::Init) を含む if-block の後に次の行を追加します。
ULDatabaseManager::EnableTcpipSynchronization(); |
これで、データベースが同期を予期するようになったため、次のメソッドを DataAccess クラスに追加できます。また、メソッドシグネチャーをヘッダーファイルに追加します。
- (void)synchronize { NSString * result = nil; ul_sync_info info; // Initialize the sync info struct connection->InitSyncInfo(&info); // Set the sync parameters info.user_name = (char*)"user"; // Set to your username info.password = (char*)"password"; // Set to your password info.version = (char*)"NamesModel"; info.stream = "tcpip"; info.stream_parms = (char*)"host=localhost"; // Display the network activity indicator in the status bar [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; // Sync and get the result if (connection->Synchronize(&info)) { result = @"Sync was successful."; } else { // Get the error message and log it. char errorMsg[80]; connection->GetLastError()->GetString(errorMsg, 80); NSLog(@"Sync failed: %s", errorMsg); result = [NSString stringWithFormat:@"Sync failed: %s", errorMsg]; } // Stop showing the activity indicator [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; [[[[UIAlertView alloc] initWithTitle:@"Synchronization" message:result delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil] autorelease] show]; } |
これはクライアントが実行できる最も簡単な同期です。エンタープライズアプリケーションでは、コールバックメソッドを設定して同期の進行状況を取得したり、アプリケーションをブロックしないように、同期を別のスレッドで実行したりする場合があります。
また、現在の実装では、同期はメインのイベントスレッドで実行されます。このようにメインスレッドをブロックすることはおすすめしません。次のレッスンでは、別のスレッドを使用して同期を実行します。また、コールバックメソッドを追加して、同期を確認し、進行状況を表示します。
ユーザーが同期のタイミングを選択できるようにするには、ナビゲーションバーにボタンを追加します。ボタンを押すと、RootViewController の次のメソッドが呼び出されます。
- (void)sync { [[DataAccess sharedInstance] synchronize]; [self.tableView reloadData]; } |
ボタンを作成するには、次のコードを RootViewController の viewDidLoad メソッドに追加します。
// Little button with the refresh sign on the left in the nav bar self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(sync)]; |
アプリケーションをビルドして実行できるようになりました。[再表示] ボタンを押すと、iPhone 上のデータベースが SQL Anywhere の統合データベースと同期されます。
同期を行う前に、iPhone で表示する統合データベースにデータを挿入するか、または統合データベースに表示するデータを iPhone 上で挿入する必要があります。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |