DBの大きい数値データを登録するには

解決


ゆうこりん  2006-04-01 22:24:48  No: 20801

DBにCSVから読み込んだ8〜10桁の数字文字列を登録するときに下記のようなエラーが表示されます。
※またエラー処理で次のデータに進みたいです
ご存知の方ご指導よろしくお願いします。

DB:interbase(FireBird)
LIMITSUM DECIMAL(10,0)

エラー内容
SQL error code=-206
Column unknown
LIMITSUM
Client SQL dialect 1 does not support reference to BIGINT datatype

procedure TForm1.Button1Click(Sender:TObject);
var
  SL1:TStringList;
  SL2:TStringList;
  i,j:Word;
begin

  try
    IBDatabase1.Connected:=Active;
    SL1:=TstringList.Create;
    SL2:=TstringList.Create;

    if Opendialog1.Execute then begin
      SL1.LoadFromFile(Opendialog1.FileName);
      for i:=0 to SL1.Count-1 do begin
        SL2.CommaText := SL1[i];
        IBQuery1.Close;
        IBQuery1.SQL.Clear;
        IBQuery1.SQL.Add('insert into customer');
        IBQuery1.SQL.Add('(LIMITSUM)');
        IBQuery1.SQL.Add('VALUES');
        IBQuery1.SQL.Add('(:LIMITSUM)');
        IBQuery1.ParamByName('LIMITSUM').AsInteger:=StrTOInt(SL2[30]);
        Try
          IBQuery.ExecSQL;
        except begin
          エラー処理
          エラーレコードを登録しないで次のレコードに進みたい
        end;
      end;
    end;
  end;
  Finally
    SL1.Free;
    SL2.Free;
    IBQuery1.Active := False;
    IBDatabase1.Connected:=False;
  end;
end;


HOta  2006-04-02 00:12:04  No: 20802

InterBaseで作成した項目がInteger型ではないですか?
dialect 1で作成しているIntger型では桁数が足らなくなったようです。
項目を他の型にするしかないですね。


ゆうこりん  2006-04-03 07:12:29  No: 20803

HOtaさんありがとうございます。

DECIMAL(10,0)からInteger型にしてみます。
ありがとうございました。


HOta  2006-04-03 16:31:32  No: 20804

DECIMAL(10,0)でエラーが起きているなら、InterBase側のエラーではないですね。
>        IBQuery1.ParamByName('LIMITSUM').AsInteger:=StrTOInt(SL2[30]);
でInteger型で登録しようとしているからではないですか?これをAsFloatにしてみたらどうでしょう。
もう少し、情報を見せてください。


ゆうこりん  2006-04-04 02:47:21  No: 20805

HOtaさんありがとうございます。
DECIMAL(10,0)からInteger型に変更したらOKでした。

StrTOInt(SL2[30]);のStrTOIntでエラーにならないか
SL2[30]をStrTOIntの前にチェックする方法はありませんか?

よろしくお願いいたします。


igy  2006-04-04 05:45:00  No: 20806

StrToInt 関数は有効な数値でない場合、EConvertError 例外を生成するので、
try..except 文で、例外生成時の処理を記述することができます。

あるいは、有効な数値でない場合に、-1とか0とか決まった値を
格納するのであれば、StrToIntDef 関数を使用することもできます。


ゆうこりん  2006-04-04 19:40:39  No: 20807

igyさん、ありがとうございます。

StrToIntDef 関数というのがあるんですね!
知りませんでした。

ありがとうございました。


ななし  2006-04-06 18:37:25  No: 20808

完了


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

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






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