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 文を準備します。

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

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

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

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

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

    if( !prepStmt->SetParameterString(1, "some value") ) {
        const ULError * ulerr;
        ulerr = conn->GetLastError();
        // write code to handle the error
        return;
    }
  5. 準備文を実行し、データをデータベースに挿入します。

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



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

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

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

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

    conn->Commit();

結果

MyColumn1 の値が文字列 "some value" に設定されている場合、MyTable に新しいローが追加されます。