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

 

INSERT、UPDATE、DELETE を使用したデータ修正

Ultra Light では、ExecuteStatement メソッド (ULPreparedStatement クラスのメンバー) を使用して、SQL データ操作を実行できます。

 ♦ ローの挿入
注意

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();
 ♦ ローの削除
注意

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

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

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

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

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

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

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

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

    ul_s_long value_to_delete = 7;
    if( !prepStmt->SetParameterInt(1, value_to_delete) ) {
        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 deleted ...
        ul_u_long rowsDeleted = prepStmt->GetRowsAffectedCount();
    }
  6. 準備文のリソースをクリーンアップします。

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

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

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

    conn->Commit();
 ♦ ローの更新
注意

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();
 参照