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++ プログラミング » アプリケーション開発 » Ultra Light C++ アプリケーション開発 » SQL 文を使用したデータの作成と修正 » INSERT、UPDATE、DELETE を使用したデータ修正

 

テーブル内のローの更新

Ultra Light では、? 文字を使用してクエリのパラメータを示します。INSERT 文、UPDATE 文、DELETE 文では必ず、準備文での順序位置に従ってそれぞれの ? が参照されます。たとえば、最初の ? はパラメータ 1、2 番目の ? はパラメータ 2、のようになります。

前提条件

この作業を実行するための前提条件はありません。

 ♦ タスク
  1. 次のコードで ULPreparedStatement を宣言します。

    ULPreparedStatement * prepStmt;
  2. 実行する SQL 文を準備します。

    次のコードは、UPDATE 文の実行を準備します。

    prepStmt = conn->PrepareStatement("UPDATE MyTable SET MyColumn = ? WHERE MyColumn = ?");
  3. 文を準備するときにエラーをチェックします。

    たとえば、SQL 構文のエラーのチェックには次のコードが便利です。

    if( prepStmt == NULL ) {
        const ULError * ulerr;
        ulerr = conn->GetLastError();
        // write code to handle the error
        return;
    }
  4. 準備文で ? 文字を置き換える値を設定します。

    次のコードは、エラーチェック時に ? 文字を整数値に設定します。たとえば、パラメータの順序が準備文内のパラメータ数の範囲外である場合は、エラーがキャッチされます。



    bool success;
    success = prepStmt->SetParameterInt( 1, 25 );
    if( success ) {
        success = prepStmt->SetParameterInt( 2, -1 );
    }
    if( !success ) {
        const ULError * ulerr;
        ulerr = conn->GetLastError();
        // write code to handle the error
        return;
    }
  5. 準備文を実行し、データベースのデータを更新します。

    次のコードは、文の実行後に発生する可能性があるエラーをチェックします。たとえば、ユニークインデックス内に重複したインデックスの値が見つかると、エラーが返されます。

    success = prepStmt->ExecuteStatement();
    if( !success ) {
        const ULError * ulerr;
        ulerr = conn->GetLastError();
        // write code to handle the error
    } else {
        // if you are interested in the number of rows updated ...
        ul_u_long rowsUpdated = prepStmt->GetRowsAffectedCount();
    }
  6. 準備文のリソースをクリーンアップします。

    次のコードは、準備文のオブジェクトで使用されたリソースを解放します。このオブジェクトには、Close メソッドを呼び出した後はアクセスしないでください。

    prepStmt->Close();
  7. データをデータベースにコミットします。

    次のコードは、データをデータベースに保存し、データの損失を防ぎます。アプリケーションがコミット呼び出しを完了する前に、デバイスアプリケーションが予期せず終了すると、手順 5 のデータが失われます。

    conn->Commit();

結果

このシナリオでは、MyColumn 値が -1 である場合、My Table のローエントリが更新されます。この値は 25 に更新されます。