以前はおせわになりました。
今回データベースに関する質問があります。
接続データベースは1つですが、テーブルを2個用意しています。
両者は連携していて、テーブル1の選択に応じてテーブル2の表示レコードを絞り込む設定です。
ソフトウェアで、あるファイルからデータベースへ登録するデータを読み込みSQLコマンドで登録させています。
この辺ではエラーはありません。
しかしながら、DBGridに登録された内容が表示されません。これはデータ更新などの処理をしていないからと思われます。
ただ、表示に関して、IBTable2の方のActiveがFalseであった(元々Activeのはずでした)ので、Trueに設定しようとすると、
”長さ48の文字列を長さ24しか格納できないフィールドに保存しました.”
と言うエラーが出て、Trueになりません。
DBGridに表示させる為には、IBTableをActiveにした上で、DBGridを更新する等の処理が必要なのだろうと思っています。
エラーに関しまして、"FlameRobin"でデータベース内容を確認しても該当するフィールドに文字数オーバーはありません。(長さ24の文字列フィールドは一つしか作っていません)登録したデータも24文字未満です。
なお、データベースのフィールド項目は編集した経緯がありますが、設計上は不整合は無いつもりなのですが。
コンポーネントの内部データとの不整合かもしれないと思い、
IBTableの項目の設定を一旦空にしてから再度全項目追加し直してもみましたが、改善されません。
DBGridのカラムエディタでも項目内容を全て削除してから全てを追加し直しています。
どこを確認すれば良いのか、アドバイスを頂ければと思います。
環境:
Windows7(32bit)
"DELPHI XE" + "Firebird Embedded"
コンポーネント:"IBTable", "IBQuery", "IBDatabase", "IBTransaction", "DataSource", "DBGrid", "DBNavigator"他を各2こずつ配置
です。
よろしくお願いします。
情報が無いので分かりませんが、FieldがAsciiのところにUTF8を登録しようとしているとか。。。。
HOta様
RESをありがとうございました。
"Character Set"の事と思いますが、何を選んで良いのか分からず、UTF8にしたつもりでしたが、確認したら何も設定されていませんでした。
但し、一方のテーブルにも同じフィールドが設定されているのですが、こちらは同様の設定で同様のデータが登録されていますが、こちらのIBTableのActiveはTrueに設定できています。この時点で、現在の登録データ内容とは異なりますが、DELPHIのIDE画面上でデータが表示されています。この開発中のプログラムを起動してもDBGridにそのデータは一切反映されません。
後からCharacter Setは変更できるのでしょうか?
FlameRobin上では変更できない様子でした。
なお、情報がありませんとありますが、あとどの様な情報を提供すれば良いでしょうか?状況は説明したつもりでしたが、
よろしくお願いします。
すみません
私のReplyが正確ではありません。
Character Setはデータベースのプロパティ設定として"UTF8"となっています。
各フィールド個別の"Charset"に項が何も設定されていないと言う事でした。
確認した範囲で他の全てのフィールドも"Charset"は何も設定されていなかったのでHOtaさんご指摘の点には該当しないと考えて良いのでしょう。
HOtaさん
ありがとうございました。
よくよく考えたら、HOtaさんのご指摘はデータベース側とアプリケーション側とでEncodingが合っていないのではと言う指摘だったのですね。
先に確認したのはデータベース側のCharacter SetでApplication側のDBコンポーネントのCharacter Setに関しては、全く考慮の範囲外でした。
アプリケーション側に何か要因がある様に思っていたにも拘らず、、、
コンポーネント側のCharacter SetをUTF8に設定したらエラーはなくなりました。
相変わらず、SQLコマンドで登録したデータ内容は直ちにはDBGridに反映されていませんが、一旦、アプリケーションを終了してから立ち上げるとその追加されたデータがDBGridに反映しています。これに関しては、自分でもう少し追ってみます。
今回はCharacter Setの違いでデータ長が変わっていたのが原因でした。2バイト文字であれば分かる気もしますが、今回の該当欄はASCII文字です。ASCII文字もEncodingでデータ長が変わるのですね。勉強になりました。
取り敢えず、エラーは解消されましたので解決とさせて頂きます。
ありがとうございました。
ツイート | ![]() |