Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » Ultra Light C/C++ プログラミング » チュートリアル » チュートリアル:C++ API を使用した Windows アプリケーションの構築

 

レッスン 1 :データベースの作成とデータベースへの接続

最初に、ローカル Ultra Light データベースを作成します。次に、作成したデータベースにアクセスする C++ アプリケーションを記述、コンパイル、実行します。

 ♦ Ultra Light データベースの作成
  1. VCINSTALLDIR 環境変数に Visual C++ インストール環境のルートフォルダーを設定します (変数がまだ存在しない場合)。

  2. %VCINSTALLDIR%\VC\atlmfc\src\atlINCLUDE 環境変数に追加します。

  3. このチュートリアルで作成されるファイルを保存するフォルダーを作成します。

    以降、このチュートリアルではこのフォルダーが C:\tutorial\cpp\ であることを前提に説明します。別の名前のフォルダーを作成した場合は、C:\tutorial\cpp\ の代わりにそのフォルダーを使用してください。

  4. Sybase Central で Ultra Light を使用して、デフォルトの特性を持つデータベース ULCustomer.udb を新しいフォルダーに作成します。

  5. ULCustomer という名前のテーブルをデータベースに追加します。次の ULCustomer テーブル仕様を使用します。

    カラム名 データ型 (サイズ) カラムの NULL 値の許可 デフォルト値 プライマリキー
    cust_id integer いいえ オートインクリメント 昇順
    cust_name varchar(30) いいえ なし
  6. Sybase Central でデータベースから切断します。そうしないと、実行ファイルが接続できません。

 ♦ Ultra Light データベースへの接続
  1. Microsoft Visual C++ で、[ファイル] » [新規作成] をクリックします。

  2. [ファイル] タブで、[C++ ソース ファイル] をクリックします。

  3. チュートリアルのフォルダーに、そのファイルを customer.cpp として保存します。

  4. Ultra Light ライブラリをインクルードします。

    以下のコードを customer.cpp にコピーします。

    #include <tchar.h>
    #include <stdio.h>
    #include "ulcpp.h"
    #define MAX_NAME_LEN 100
  5. データベースに接続するための接続パラメーターを定義します。

    次のコードでは、接続パラメーターはハードコードされています。実際のアプリケーションでは、ロケーションは実行時に指定されることもあります。

    以下のコードを customer.cpp にコピーします。

    static ul_char const * ConnectionParms =
        "UID=DBA;PWD=sql;DBF=C:\\tutorial\\cpp\\ULCustomer.udb";
    注意

    ファイル名ロケーションの文字列にバックスラッシュ文字が含まれる場合は、バックスラッシュ文字をもう 1 つ追加してエスケープする必要があります。

  6. アプリケーションでデータベースエラーを処理するメソッドを定義します。

    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 を使用してアプリケーションのフローを制御しています。このエラーが通知されると、結果セットのループの終了がマークされます。上記の汎用エラーハンドラーは、このエラー条件に対してはメッセージを出力しません。

  7. データベースの接続を開くメソッドを定義します。

    データベースファイルがなかった場合は、エラーメッセージが表示されます。そうでない場合は、接続が確立されます。

    static ULConnection * open_conn( void ) 
    {
        ULConnection * conn = ULDatabaseManager::OpenConnection( ConnectionParms );
        if( conn == UL_NULL ) {
          _tprintf("Unable to open existing database.\n");
       }
      return conn;
    }
  8. 次のタスクを実行する 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;
    }
  9. ソースファイルのコンパイルとリンクを行います。

    ソースファイルのコンパイル方法は、コンパイラーによって異なります。以下の手順は、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 という実行ファイルが作成されます。

  10. アプリケーションを実行します。

    コマンドプロンプトで customer と入力します。

    アプリケーションがデータベースに接続したら、切断します。エラーメッセージが表示されなければ、アプリケーションは正常に実行されています。

 参照