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

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

 

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

このレッスンでは、Ultra Light データベースを作成します。次に、作成したデータベースにアクセスする C++ アプリケーションを記述、コンパイル、実行します。

前提条件

このレッスンでは、必要なソフトウェアをすでにインストールしていることを前提としています。チュートリアル:C++ API を使用した Windows アプリケーションの構築を参照してください。

 ♦ タスク
  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 でデータベースから切断します。そうしないと、実行ファイルが接続できません。

  7. Microsoft Visual C++ で、[ファイル] » [新規作成] をクリックします。

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

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

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

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

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

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

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

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

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

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

    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_ERROR_LEN ];
                    error->GetString( etext, MAX_ERROR_LEN );
                    _tprintf( "Error %ld: %s\n", code, etext );
                    rc = UL_ERROR_ACTION_CANCEL;
                }
            break;
         }
        return rc;
     }

    Ultra Light では、ほとんどの場合はエラー SQLE_NOTFOUND を使用してアプリケーションのフローを制御しています。このエラーが通知されると、結果セットのループの終了がマークされます。上記の汎用エラーハンドラは、このエラー条件に対してはメッセージを出力しません。

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

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

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

    ソースファイルのコンパイル方法は、コンパイラによって異なります。以下の手順は、makefile で Microsoft Visual C++ コマンドラインコンパイラを使用する場合です。

    1. コマンドプロンプトを開き、チュートリアルフォルダに変更します。

    2. makefile という名前の makefile を作成します。

    3. makefile で、フォルダをインクルードパスに追加します。

      IncludeFolders=/I"$(SQLANY16)\SDK\Include"
    4. makefile で、フォルダをライブラリパスに追加します。

      LibraryFolders=/LIBPATH:"$(SQLANY16)\UltraLite\Windows\x86\Lib\vs8"
    5. makefile で、ライブラリをリンカオプションに追加します。

      Libraries=ulimp.lib

      Ultra Light ランタイムライブラリの名前は ulimp.lib です。

    6. makefile で、コンパイラオプションを設定します。次のように、1 行でこれらのオプションを入力してください。

      CompileOptions=/c /nologo /W3 /Od /Zi /DWIN32 /DUL_USE_DLL
    7. makefile で、次のようにアプリケージョンのリンク命令を追加します。

      customer.exe: customer.obj
         link /NOLOGO /DEBUG customer.obj $(LibraryFolders) $(Libraries)
    8. makefile で、次のようにアプリケーションのコンパイル命令を追加します。

      customer.obj: customer.cpp
         cl $(CompileOptions) $(IncludeFolders) customer.cpp
    9. vsvars32.bat を実行します。

      %VCINSTALLDIR%\Tools\vsvars32.bat
    10. makefile を実行します。

      nmake

      customer.exe という実行ファイルが作成されます。

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

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

結果

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

 参照