/*以下のように用意されていることを仮定しています */
/* personData :追加したい従業員の情報 */
/* query :検索式 */
/* returnQuery:リターン式 */
/* updateData :更新データ */
/* pResultId :レコードIDを保持する構造体配列 */
/* pUpdateId :更新用レコードIDを設定する構造体配列 */
/* コネクションハンドルの割当て */
ret = ShunAllocHandle(NULL, &ConH);
if(ret != SHUN_SUCCESS) {
error("ShunAllocHandle ", ConH);
return;
}
/* ホスト名・ポート番号・Shunsaku Fileを指定してコネクションを確立 */
ret = ShunConnect(ConH, "DirSvr1", 33101, "fileA");
if(ret != SHUN_SUCCESS) {
error("ShunConnect ", ConH);
return;
}
/* 追加用のデータ操作ハンドル割当て */
ret = ShunAllocHandle(ConH, &insertStmtH);
if(ret != SHUN_SUCCESS) {
error("ShunAllocHandle ", ConH);
return;
}
/* 自動コミットを無効に切替え */
ret = ShunSetConnectAttr(ConH, SHUN_ATTR_AUTOCOMMIT, SHUN_FALSE);
if(ret != SHUN_SUCCESS) {
error("ShunSetConnectAttr ", ConH);
return;
}
/* データ追加 */
ret = ShunInsert(InsertStmtH, 1, personData);
if(ret != SHUN_SUCCESS) {
error("ShunInsert ", insertStmtH);
return;
}
/*追加用のデータ操作ハンドルの解放 */
ret = ShunFreeHandle(insertStmtH);
if(ret != SHUN_SUCCESS) {
error("ShunFreeHandle ", insertStmtH);
return;
}
/* Shunsaku FileをfileDに切替え */
ret = ShunSetConnectAttr(ConH, SHUN_ATTR_SHUNSAKU_FILE, (int)" fileD");
if(ret != SHUN_SUCCESS) {
error("ShunSetConnectAttr ", ConH);
return;
}
/* 検索用のデータ操作ハンドル割当て */
ret = ShunAllocHandle(ConH, &searchStmtH);
if(ret != SHUN_SUCCESS) {
error("ShunAllocHandle ", ConH);
return;
}
/* 検索を実行 */
ret = ShunSearch(searchStmtH, 1, NULL, 0, 30, query, returnQuery,
NULL, &Hit_Cnt, &Return_Cnt, &Returnable_Cnt,
&Rec_Id_Out, &Data, &First_Pos, &Last_Pos);
if(ret != SHUN_SUCCESS) {
error("ShunSearch ", searchStmtH);
return;
}
/* レコードIDを保持 */
for(i=0; i< Return_Cnt; i++) {
pResultId[i] = Rec_Id_Out[i];
}
/* 検索用のデータ操作ハンドルの解放 */
ret = ShunFreeHandle(searchStmtH);
if(ret != SHUN_SUCCESS) {
error("ShunFreeHandle ", searchStmtH);
return;
}
/* 更新用のデータ操作ハンドル割当て */
ret = ShunAllocHandle(ConH, &updateStmtH);
if(ret != SHUN_SUCCESS) {
error("ShunAllocHandle ", ConH);
return;
}
/* 0番目のデータを更新対象とする */
pUpdateId[0] = pResultId[0];
/* データを更新 */
ret = ShunUpdateRecId(updateStmtH, 1, pUpdateId,updateData);
if(ret != SHUN_SUCCESS) {
error("ShunUpdateRecId", updateStmtH);
return;
}
/* 更新用のデータ操作ハンドルの解放 */
ret = ShunFreeHandle(updateStmtH);
if(ret != SHUN_SUCCESS) {
error("ShunFreeHandle ", updateStmtH);
return;
}
/* トランザクション終了 */
ret = ShunCommit(ConH);
if(ret != SHUN_SUCCESS) {
error("ShunCommit ", ConH);
return;
}
/* コネクションの切断*/
ret = ShunDisconnect(ConH);
if(ret != SHUN_SUCCESS) {
error("ShunDisconnect", ConH);
return;
}
/* コネクションハンドルの解放 */
ret = ShunFreeHandle(ConH);
if(ret != SHUN_SUCCESS) {
error("ShunAllocHandle ", ConH);
return;
}
/* エラー発生時の処理 */
void error(char* func, SHUNHANDLE handle) {
printf( "%s:abnormal end\n", func );
ShunGetErrorMessage(handle, &Err_Level, &Err_Msg);
printf("エラーレベル = %d\n", Err_Level);
printf("エラーメッセージ = %s\n", Err_Msg);
if(ConH != NULL)
{
ret = ShunRollback(ConH);
}
ret = ShunFreeHandle(ConH);
return;
} |