お世話になります。
初めて質問させていただきます。
FireBirdを使用してDelphi XE2で開発しています。
FireBird のバージョンは WI-V2.5.1.26351 Firebird 2.5 になります。
元々SJIS_0208で作成したDBで運用していたのですが、ある項目を曖昧検索していて以下のエラーが出るようになり
Dynamic SQL Error
SQL error code = -303
arithmetic exception, numeric overflow, or string truncation
string right truncation
どうも、機種依存文字が原因のようだと気がついて、UNICODEにすれば直るかと思い、UTF-8でDBを作成して
同じ構造のテーブルを作成してデータをインポートしたところ、malformed stringのエラーが出ました。
対応としてAnsitoUTF8()で文字列を変換したらこのエラーは出なくなったのですが、SJIS_0208で運用していた
時にはインポート時にエラーが出なかったのに、arithmetic exception,・・・・がかなり出るようになりました。
そこで、テーブルの文字列の項目長を倍に変更して再度インポートしても同様のエラーが出てしまい困って
います。エラーメッセージは以前と同様ですが念のため下記に附記しておきます。
Dynamic SQL Error
SQL error code = -303
arithmetic exception, numeric overflow, or string truncation
string right truncation
インポートするデータは基幹システムの1ヶ月分の検収データで数万件になります。
エラーになったレコードの項目値を見ても特に問題になるような所も見あたりませんし、以前SJIS_0208で
作成したDBの時にはエラー無しでインポート出来ていたので、プログラムも変えてませんし、どうして良いか
分らなくなって困っています。
プログラムは、現在テスト中ですので多少いじくっていますが以下の様なプログラムです。
with IBQuery1 do
begin
close;
SQL.Clear;
SQL.Add('INSERT INTO KENSHU (SEIKYU_DENPYOU,TENKI_DATE,KOUBAI_DENPYOU,'+
'MEISAI,QUANTITY,HINMOKU_CD,HINMOKU_TXT,NET_VALUE,CURRENCY,PER,'+
'PAY_BASE_DATE,SUPPLIER_CD,SUPPLIER_NAME,DC,AMOUNT,KOUBAI_GR,KOUBAI_GR_TXT,'+
'PLANT,SASIZU,SMEISAI)');
SQL.Add('VALUES(:P1,:P2,:P3,:P4,:P5,:P6,:P7,:P8,:P9,:P10,:P11,:P12,' +
':P13,:P14,:P15,:P16,:P17,:P18,:P19,:P20)');
ParamByName('P1').AsString := seikyuNo;//AnsitoUTF8(seikyuNo);
ParamByName('P2').AsDateTime := tenkidate;
ParamByName('P3').AsString := koubaiNo;//AnsitoUTF8(koubaiNo);
ParamByName('P4').AsString := meisaigyo;//AnsitoUTF8(meisaigyo);
ParamByName('P5').AsBCD := kazu;
ParamByName('P6').AsString := hin;//AnsitoUTF8(hin);
ParamByName('P7').AsString := hinmei;//AnsitoUTF8(hinmei);
ParamByName('P8').AsBCD := kakaku;
ParamByName('P9').AsString := tuka;//AnsitoUTF8(tuka);
ParamByName('P10').AsInteger := Per;
ParamByName('P11').AsDateTime := payDate;
ParamByName('P12').AsString := vCD;//AnsitoUTF8(vCD);
ParamByName('P13').AsString := vName;//AnsitoUTF8(vName);
ParamByName('P14').AsString := DC;//AnsitoUTF8(DC);
ParamByName('P15').AsBCD := kingaku;
ParamByName('P16').AsString := K_Gr;//AnsitoUTF8(K_Gr);
ParamByName('P17').AsString := K_GrName;//AnsitoUTF8(K_GrName);
ParamByName('P18').AsString := plant;//AnsitoUTF8(plant);
ParamByName('P19').AsString := sasizu;//AnsitoUTF8(sasizu);
ParamByName('P20').AsString := smeisai;//AnsitoUTF8(smeisai);
try
execSQL;
kk := kk + 1;
//MenuForm.IBCTransaction1.Commit;
except
on E: Exception do
begin
err := E.Message;
memo1.Lines.Add(err);
err := vCD + ',' + vName + ',' + seikyuNo + ',' + smeisai + ',' + koubaiNo + ',' + meisaigyo + ',' + hinmei;
memo1.Lines.Add(err);
end;
//MenuForm.IBCTransaction1.Rollback;
end;
end;
なにか、ヒントでも戴けないでしょうか。
どうぞ、宜しくお願いします。
|