最初に、ローカル Ultra Light データベースを作成します。次に、作成したデータベースにアクセスする C++ アプリケーションを記述、コンパイル、実行します。
VCINSTALLDIR 環境変数に Visual C++ インストール環境のルートフォルダーを設定します (変数がまだ存在しない場合)。
%VCINSTALLDIR%\VC\atlmfc\src\atl を INCLUDE 環境変数に追加します。
このチュートリアルで作成されるファイルを保存するフォルダーを作成します。
以降、このチュートリアルではこのフォルダーが C:\tutorial\cpp\ であることを前提に説明します。別の名前のフォルダーを作成した場合は、C:\tutorial\cpp\ の代わりにそのフォルダーを使用してください。
Sybase Central で Ultra Light を使用して、デフォルトの特性を持つデータベース ULCustomer.udb を新しいフォルダーに作成します。
ULCustomer という名前のテーブルをデータベースに追加します。次の ULCustomer テーブル仕様を使用します。
カラム名 | データ型 (サイズ) | カラムの NULL 値の許可 | デフォルト値 | プライマリキー |
---|---|---|---|---|
cust_id | integer | いいえ | オートインクリメント | 昇順 |
cust_name | varchar(30) | いいえ | なし |
Sybase Central でデータベースから切断します。そうしないと、実行ファイルが接続できません。
Microsoft Visual C++ で、[ファイル] » [新規作成] をクリックします。
[ファイル] タブで、[C++ ソース ファイル] をクリックします。
チュートリアルのフォルダーに、そのファイルを customer.cpp として保存します。
Ultra Light ライブラリをインクルードします。
以下のコードを customer.cpp にコピーします。
#include <tchar.h> #include <stdio.h> #include "ulcpp.h" #define MAX_NAME_LEN 100 |
データベースに接続するための接続パラメーターを定義します。
次のコードでは、接続パラメーターはハードコードされています。実際のアプリケーションでは、ロケーションは実行時に指定されることもあります。
以下のコードを customer.cpp にコピーします。
static ul_char const * ConnectionParms = "UID=DBA;PWD=sql;DBF=C:\\tutorial\\cpp\\ULCustomer.udb"; |
ファイル名ロケーションの文字列にバックスラッシュ文字が含まれる場合は、バックスラッシュ文字をもう 1 つ追加してエスケープする必要があります。
アプリケーションでデータベースエラーを処理するメソッドを定義します。
Ultra Light は、アプリケーションにエラーを通知するためのコールバックメカニズムを備えています。開発環境において、このメソッドは予期しないエラーを処理するメカニズムとして便利です。運用アプリケーションには、あらゆる一般的なエラー状況を処理するコードが含まれているのが普通です。アプリケーションでは、Ultra Light メソッドを呼び出すごとにエラー確認するか、エラーコールバック関数を使用するかを選択します。
コールバック関数のサンプルコードを次に示します。
ul_error_action UL_CALLBACK_FN MyErrorCallBack( const ULError * error, ul_void * user_data ) { ul_error_action rc; an_sql_code code = error->GetSQLCode(); (void) user_data; switch( code ){ // The following error is used for flow control - don't report it here case SQLE_NOTFOUND: rc = UL_ERROR_ACTION_CONTINUE; break; default: if (code >= 0) { // warning or success rc = UL_ERROR_ACTION_DEFAULT; } else { // negative is real error ul_char etext[ MAX_NAME_LEN ]; error->GetString( etext, MAX_NAME_LEN ); _tprintf( "Error %ld: %s\n", code, etext ); rc = UL_ERROR_ACTION_CANCEL; } break; } return rc; } |
Ultra Light では、ほとんどの場合はエラー SQLE_NOTFOUND を使用してアプリケーションのフローを制御しています。このエラーが通知されると、結果セットのループの終了がマークされます。上記の汎用エラーハンドラーは、このエラー条件に対してはメッセージを出力しません。
データベースの接続を開くメソッドを定義します。
データベースファイルがなかった場合は、エラーメッセージが表示されます。そうでない場合は、接続が確立されます。
static ULConnection * open_conn( void ) { ULConnection * conn = ULDatabaseManager::OpenConnection( ConnectionParms ); if( conn == UL_NULL ) { _tprintf("Unable to open existing database.\n"); } return conn; } |
次のタスクを実行する main メソッドを実装します。
エラー処理メソッドを登録します。
データベースへの接続を開きます。
データベースとの接続を閉じ、データベースマネージャーを終了します。
int main() { ULConnection * conn; ULDatabaseManager::Init(); ULDatabaseManager::SetErrorCallback( MyErrorCallBack, NULL ); conn = open_conn(); if ( conn == UL_NULL ) { ULDatabaseManager::Fini(); return 1; } // Main processing code goes here ... do_insert( conn ); do_select( conn ); do_sync( conn ); conn->Close(); ULDatabaseManager::Fini(); return 0; } |
ソースファイルのコンパイルとリンクを行います。
ソースファイルのコンパイル方法は、コンパイラーによって異なります。以下の手順は、makefile で Microsoft Visual C++ コマンドラインコンパイラーを使用する場合です。
コマンドプロンプトを開き、チュートリアルフォルダーに変更します。
makefile という名前の makefile を作成します。
makefile で、フォルダーをインクルードパスに追加します。
IncludeFolders=/I"$(SQLANY12)\SDK\Include" |
makefile で、フォルダーをライブラリパスに追加します。
LibraryFolders=/LIBPATH:"$(SQLANY12)\UltraLite\Windows\x86\Lib\vs8" |
makefile で、ライブラリをリンカオプションに追加します。
Libraries=ulimp.lib |
Ultra Light ランタイムライブラリの名前は ulimp.lib です。
makefile で、コンパイラーオプションを設定します。次のように、1 行でこれらのオプションを入力してください。
CompileOptions=/c /nologo /W3 /Od /Zi /DWIN32 /DUL_USE_DLL |
makefile で、次のようにアプリケージョンのリンク命令を追加します。
customer.exe: customer.obj link /NOLOGO /DEBUG customer.obj $(LibraryFolders) $(Libraries) |
makefile で、次のようにアプリケーションのコンパイル命令を追加します。
customer.obj: customer.cpp cl $(CompileOptions) $(IncludeFolders) customer.cpp |
vsvars32.bat を実行します。
%VCINSTALLDIR%\Tools\vsvars32.bat |
makefile を実行します。
nmake |
customer.exe という実行ファイルが作成されます。
アプリケーションを実行します。
コマンドプロンプトで customer と入力します。
アプリケーションがデータベースに接続したら、切断します。エラーメッセージが表示されなければ、アプリケーションは正常に実行されています。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |