IBエラーについて

解決


studio-take  2012-08-15 19:07:17  No: 42771  IP: 192.*.*.*

Delhpi7ent + FB2.0.4でTIBDataSetを使って、書き込みを使用としたんですが、

arithmetic exception, numeric overflow, or string truncation
-Cannot transliterate character between character sets

という、エラーが出て
Locate('日付;文字列;整数;文字列',VarArrayOf([*,*,*,*]),[] )
というのを、
Locate('日付;文字列;文字列;整数',VarArrayOf([*,*,*,*]),[] )
にして、エラーを減らせたんですが、それでも

arithmetic exception, numeric overflow, or string truncation

で引っかかります。
特段、今までの使用方法とは変わってないので、どうして漏れてるのか分かりません。
Locate手前でShowMessage()して文字列等を確認したのですが、漏れるほどの引数でもなかったです。

解決の糸口をつかみたいので、ヒントでもいいので教えてください。
宜しくお願いします。

編集 削除
studio-take  2012-08-15 19:29:24  No: 42772  IP: 192.*.*.*

新規プロジェクトで、簡素なソースなら挿入できました。

で、アプリ本体側は、トランザクション内に3つのIBDataSetを置いて、3テーブルに書き込む予定だったんですが、どれを単体で動かしても

上記エラーが出ます。
ちなみにIBQueryやらIBDataSetがデータモジュール内に20以上あります。
多すぎると問題あったりするんでしょうか?

編集 削除
igy  2012-08-15 20:05:01  No: 42773  IP: 192.*.*.*

関係ないかもしれませんが・・・

Delphi7用のIBXはVer.7.11までアップデートがあったと思うのですが、
お使いのIBXのバージョンはいくつですか?

http://cc.embarcadero.com/Author.aspx?ID=102

編集 削除
studio-take  2012-08-15 20:17:24  No: 42774  IP: 192.*.*.*

すいません。
コンポーネントのバージョン確認ってどうやるんですか?

基本、何回も入れ直しているので、インストールCD初期状態です。

編集 削除
studio-take  2012-08-15 20:27:47  No: 42775  IP: 192.*.*.*

IBXバージョンアップしてみました。
ポップアップメニューが変わってたので、いけてると思うんですが。
やっぱり、
arithmetic exception, numeric overflow, or string truncation
出ました。
同等の機能を別のDLLで小さくまとめてみようと思います。
いろいろ詰め込みすぎているので。

編集 削除
igy  2012-08-15 20:31:30  No: 42776  IP: 192.*.*.*

>コンポーネントのバージョン確認ってどうやるんですか?

ソースコードだと、IBXConst.pas の IBX_Version かと・・・

編集 削除
igy  2012-08-15 20:42:43  No: 42777  IP: 192.*.*.*

>基本、何回も入れ直しているので、インストールCD初期状態です。

関係ないと思いますが、Update 7.1もありますので・・・

編集 削除
au  2012-08-16 08:53:22  No: 42778  IP: 192.*.*.*

実行しようとしてるクエリーをFirebirdでisqlなりIBConsoleなりを使って直接実行してもエラーでます?
character setがnoneのDBに文字列挿入しようとしたら同じようなエラーがでるとか見た記憶があるんで

編集 削除
studio-take  2012-08-16 10:23:18  No: 42779  IP: 192.*.*.*

現在3つのIBDataSetの2つまで通るようになりました。
原因は、複合主キーの設計と思うんですが、
前はPrimary Key(日付、文字列、整数、文字列)だったのを
Primary Key(日付、文字列、文字列、整数)の順番に変えました。

ただ、最後の1つは、主キーの順番を変えても出るので、調査中です。

ShowMessage()でカットしながら追いかけていたんですが、
データベースをOpenして、これはOK,

if Locate('',VarArrayOf([]),[]) then
のところで出ます。

編集 削除
igy  2012-08-16 21:17:20  No: 42780  IP: 192.*.*.*

関係ないかもしれませんが・・・

> FB2.0.4で

Ver.2.0.x に関しては、Ver.2.0.7 がありますが・・・

編集 削除
igy  2012-08-16 21:51:09  No: 42781  IP: 192.*.*.*

ついでですが・・・

> FB2.0.4

略さずに Firebird と したほうがよいかもしれませんね。

編集 削除
studio-take  2012-08-16 23:57:29  No: 42782  IP: 192.*.*.*

略しすぎ注意ですね。
バージョンも2.07にあげました。

でもまだ、手こずっています。
ブレイクポイントが効かなくなってて。
とりあえず、POSTメソッドでのエラーとわかりました。

同じデータセットを使ってる別の手続きは、動いているんですが。

編集 削除
studio-take  2012-08-17 00:12:08  No: 42783  IP: 192.*.*.*

すいません。
しょーもないオチでした。

VarChar(6) character set ascii
のフィールドに'CONVERT'と7桁入れていました。

みなさん、ご助言ありがとうございました。

編集 削除