MySQLのデータをDBGridで表示させています。
その際、text型のデータは「MEMO」もしくは「Memo」と表示され
実際に登録されているデータの内容が表示できません。
これは相性(!?)の問題で表示できない状況なのでしょうか?
ご存知の方いらっしゃいましたら教えていただけないでしょうか?
宜しくお願いいたします。
MySQLは使用した事が無く、良く知りませんが
興味あってインターネットで調べると
MySqlのText型は文字列を格納するデータ型
ですが、「最大長65535バイト」なので、
基本的にGridに表示できないと思います。
ちがってたらごめんなさい。
SQLServerにもText型はありますが同じ事
だと思います。
また、一般的にはあまり使用しないほうが良い
ともありますが、そんなにたくさんの文字を
入力されるのですか?
Syakeさんレスありがとうございます。
どうやらテーブルの設計に問題があったみたいですね。
そんなにたくさんの文字を入力するというようなことはないと思います。
なので言ってしまえばtext型である必要はないように思えます。
ただ問題はテーブルの設計をしたのが私ではないというところ・・・・。
設計した本人もこのような不都合があるとは想定していなかったと思いますので、
もう一度よく相談してみたいと思います。
アドバイスありがとうございました!
テーブル設計に問題があるとは思いませんが、、、
DBMemoコンポーネントで対応すれば素直に表示できますし、
「Delphi4データベース構築 実戦テクニック」という本に
DBGridにメモ項目の1行を表示させるサンプルコードが
紹介されています。
項目コンポーネントからメモ項目のOngetTextイベントハンドラに
1行表示させる処理を書けば、1行分は見ることは出来るようです。
下記のサンプルコードは、Table1のBikouフィールドのOnGetText
イベントでの例です。
procedure TForm1.Table1BikouGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
var
BlobBikou: TBlobStream;
SL: TStringList;
begin
// BlobStreamを作成する
BlobBikou := TBlobStream.Create(TBlobField(Sender), bmRead);
// StringListを作成する
SL := TStringList.Create;
// BlobStreamから読み込む
SL.LoadFromStream(BlobBikou);
// 1行以上であれば
if SL.Count > 0 then
// 1行目をTextパラメータに渡す
Text := SL[0];
// BlobStreamを解放
BlobBikou.Free;
// StringListを解放
SL.Free;
end;
>テーブル設計に問題があるとは思いませんが、、、
そうですね。
Text型で格納しなければならないようなデータ
ならば、DBCtrlGridと言う手もあります。
そのような事がなければ、VarChar型で十分かな
と思いました。
また、無駄に資源を消費して、後に困ることも
あるかななどと老婆心で思ってしまいました。
(処理も楽だし・・・(^_^;))
適切な回答ではなかったですね。
すいません。
ツイート | ![]() |