2009年10月28日

(3)データベース移行 その2

2)データ移行

新旧DBとも、IBXを使用。
DBXのTSQLQueryは、ParamsのDataTypeを設定する必要があり、下記のような汎用的な
処理の適用が難しいと考え、IBXのTIBQueryを採用。
IBXのTIBQueryで行えば、値のコピーを基本的に
          aDstQry.Params[i].Value := aSrcQry.FieldByName(f).Value;
で行える。
特に問題なく完了。

・大まかな処理概要とポイント

begin
  try
    //新旧DBオープン
    {テーブル数文繰り返し}
    begin
      try
        //新DBのトランザクションスタート
        //対象新テーブルへのInsertクエリを、QryInsに設定
        //対象新テーブルのデータを全削除(再処理のため)

        //QrySelに旧テーブルデータのSelect文を設定し、オープン
        while not QrySel.Eof do
        begin
          ParamSet(QrySel, QryIns);  //後述
          QryIns.ExecSQL;
          QrySel.Next;
        end;

        //QrySelクローズ
        //トランザクションコミット

      except
        //エラー処理
      end;
    end;

    //新旧DBクローズ
  except
     //エラー処理
  end;
end;



procedure TBaseDM.ParamSet(var aSrcQry, aDstQry: TIBQuery);
var   i : integer;    f : string;
begin
  try
    for i := 0 to aDstQry.Params.Count - 1 do
    begin
      f := aDstQry.Params[i].Name;
      if Nil <> aSrcQry.FindField(f) then
      begin
        if aDstQry.Params[i].DataType = ftTimeStamp then
        begin
          if aSrcQry.FieldByName(f).IsNull then
            aDstQry.Params[i].Clear
          else
            aDstQry.Params[i].AsDateTime
                              := aSrcQry.FieldByName(f).AsDateTime;
        end
        else
          aDstQry.Params[i].Value := aSrcQry.FieldByName(f).Value;
      end;
    end;
  except
    raise;
  end;
end;
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/33233437
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック