dbExpressおよびdbGoについて


  2013-02-06 16:13:32  No: 43762

お世話になります。

WindowsXP+Delphi2007+Office2003環境下でOracleテーブルデータをAccessへコピー処理を実行しています。
Oracleを読み込むのにTSQLConnection、TSQLQuery、TDataSetProvider、TClientDataSet、TDataSource
Accessを読み込むのにTADOConnection、TADOQuery  を使用しています。

そして下記のようなコードを実行したところ、今まで取り扱ったデータについては
開発環境、および実行環境で問題なく動いていましたが、
今回取り扱ったデータ(とても長い文字列データでカラム数十あり、それぞれ数千〜数万バイトの文字列が格納されています)
については、前者は問題なしで後者は1件のみレコードコピーされませんでした。
下記プログラムではAccessテーブルデータをOracleへコピーする処理も実行しているため
上記のような部品の使い方をしていますが、Oracle→AccessについてはTClientDataSetは
不要だと思い、TDataSetProviderへのTSQLQueryの設定を解除したら実行環境でも問題なく動作するようになりましたが、
なぜにこの変更で動くようになったのか分かりません。(開発環境と実行環境の差異?)
上記対処で解決した理由または下記コードの問題など分かる方教えて頂けませんか。

*****実行しているプログラムの抜粋*****

function TmodData.OracleToMdb: Boolean;
var
  arySFields: TStringList;
  aryDFields: TStringList;
  strText, strValue: String;
  intCount, intTable, intPlus: Integer;
begin
  Result := False;
  //Self.sqlTable.SchemaName:= Self.clsIniFIle.Scheme;
  if Self.ConnectOracle True then Exit;
  if Self.ConnectAccess True then begin Self.sqlConnection.Close;Exit; end;

  for intTable := 0 to Self.clsIniFIle.OTableAry.Count - 1 do
  begin
    Self.sqlTable.TableName := Self.clsIniFile.Scheme + . + Self.clsIniFIle.OTableAry[intTable];
    Self.adoTable.TableName := Self.clsIniFIle.MTableAry[intTable];
    arySFields := TStringList.Create;
    aryDFields := TStringList.Create;
    arySFields.CommaText := Self.clsIniFIle.OFieldsAry[intTable];
    aryDFields.CommaText := Self.clsIniFIle.MFieldsAry[intTable];
    Self.adoTable.Open;
    Self.adoTable.First;
    while not Self.adoTable.Eof do Self.adoTable.Delete;
    Self.sqlTable.Open;
    Self.sqlTable.First;
    while not Self.sqlTable.Eof do
    begin
      Self.adoTable.Append;
      for intCount := 0 to arySFields.Count - 1 do
        Self.adoTable.FieldByName(aryDFields.Strings[intCount]).Value := Self.sqlTable.FieldByName(arySFields.Strings[intCount]).Value;
      Self.adoTable.Post;
      Self.sqlTable.Next;
    end;
    aryPlus.Free;
    arySFields.Free;
    aryDFields.Free;
    Self.adoTable.Close;
    Self.sqlTable.Close;
    Application.ProcessMessages;
  end;
  Self.adoConnection.Close;
  Self.sqlConnection.Close;
  Result := True;
end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加