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

SQL Anywhere 11.0.1 (日本語) » Ultra Light - C/C++ プログラミング » チュートリアル:C++ API を使用したアプリケーションの構築

 

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

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

♦  Ultra Light データベースを作成するには、次の手順に従います。
  1. INCLUDE 環境変数に、c:\vendor\visualstudio8\VC\atlmfc\src\atl を追加します。

  2. このチュートリアルで作成されるファイルを保存するディレクトリを作成します。

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

  3. Sybase Central で Ultra Light を使用して、次の特性を持つデータベース ULCustomer.udb を新しいディレクトリに作成します。

    Sybase Central での Ultra Light の使用については、データベース作成ウィザードを使用したデータベースの作成を参照してください。

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

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

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

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

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

  4. Ultra Light ライブラリをインクルードし、Ultra Light ネームスペースを使用します。

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

    #include <tchar.h>
    #include <stdio.h>
    #include "uliface.h"
    using namespace UltraLite;
    #define MAX_NAME_LEN 100
    ULSqlca Tutca;

    このコードでは、Tutca という名前の ULSqlca (Ultra Light SQL Communications Area) を定義しています。

    Ultra Light ネームスペースを使用してクラス宣言を簡素化する方法の詳細については、Ultra Light ネームスペースの使用を参照してください。

  5. データベースに接続するための接続パラメータを定義します。

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

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

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

    接続パラメータの詳細については、UltraLite_Connection_iface クラスを参照してください。

    特殊文字の処理

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

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

    Ultra Light は、アプリケーションにエラーを通知するためのコールバック・メカニズムを備えています。開発環境において、この関数は予期しないエラーを処理するメカニズムとして便利です。運用アプリケーションには、あらゆる一般的なエラー状況を処理するコードが含まれているのが普通です。アプリケーションでは、Ultra Light 関数を呼び出すごとにエラー確認するか、エラー・コールバック関数を使用するかを選択します。

    コールバック関数のサンプルを次に示します。

    ul_error_action UL_GENNED_FN_MOD MyErrorCallBack(
     SQLCA *  Tutca,
     ul_void * user_data,
     ul_char * message_param )
    {
        ul_error_action rc;
        
        (void) user_data;
    
        switch( Tutca->sqlcode ){
            // The following error is used for flow control - don't report it here
            case SQLE_NOTFOUND:
                rc = UL_ERROR_ACTION_CONTINUE;  
            break;
    
            default:
                if (Tutca->sqlcode >= 0) { // warning or success
                    rc = UL_ERROR_ACTION_DEFAULT; 
                } else { // negative is real error
                    _tprintf( _TEXT( "Error %ld: %s\n" ), Tutca->sqlcode, message_param );
                    rc = UL_ERROR_ACTION_CANCEL;
                }
            break;
         }
        return rc;
     }

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

    エラー処理の詳細については、エラー処理を参照してください。

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

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

    Connection * open_conn( DatabaseManager * dm ) {
      Connection * conn = dm->OpenConnection( Tutca, ConnectionParms );
    
      if( conn == UL_NULL ) {
          _tprintf( _TEXT("Unable to open existing database.\n") );
       }
      return conn;
    }
  8. 次のタスクを実行する main メソッドを実装します。

    • DatabaseManager オブジェクトをインスタンス化します。Ultra Light オブジェクトはすべて、DatabaseManager オブジェクトから作成されます。

    • エラー処理関数を登録します。

    • データベースへの接続を開きます。

    • データベースとの接続を閉じ、データベース・マネージャを終了します。

    int main() {
      ul_char buffer[ MAX_NAME_LEN ];
      
      Connection * conn;
    
      Tutca.Initialize();  
    
      ULRegisterErrorCallback(
        Tutca.GetCA(), MyErrorCallBack,
        UL_NULL, buffer, sizeof (buffer));
    
      DatabaseManager * dm = ULInitDatabaseManager( Tutca );
      
      conn = open_conn( dm );
      
      if( conn == UL_NULL ){
       dm->Shutdown( Tutca );
          Tutca.Finalize();
          return 1;  
      }
      // main processing code to be inserted here 
      dm->Shutdown( Tutca );
      Tutca.Finalize();
      return 0;
    }
  9. ソース・ファイルのコンパイルとリンクを行います。

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

    • コマンド・プロンプトを開き、チュートリアル・ディレクトリに変更します。

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

    • makefile で、ディレクトリをインクルード・パスに追加します。

      IncludeFolders=/I"$(SQLANY11)\SDK\Include"
    • makefile で、ディレクトリをライブラリ・パスに追加します。

      LibraryFolders=/LIBPATH:"$(SQLANY11)\UltraLite\win32\386\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
    • makefile を実行します。

      nmake

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

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

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