MySQLのtext型を表示させるには?

解決


ペニ丸  2004-09-07 18:36:41  No: 10814

MySQLのデータをDBGridで表示させています。
その際、text型のデータは「MEMO」もしくは「Memo」と表示され
実際に登録されているデータの内容が表示できません。

これは相性(!?)の問題で表示できない状況なのでしょうか?
ご存知の方いらっしゃいましたら教えていただけないでしょうか?
宜しくお願いいたします。


Syake  2004-09-07 19:42:01  No: 10815

MySQLは使用した事が無く、良く知りませんが
興味あってインターネットで調べると

MySqlのText型は文字列を格納するデータ型
ですが、「最大長65535バイト」なので、
基本的にGridに表示できないと思います。
ちがってたらごめんなさい。
SQLServerにもText型はありますが同じ事
だと思います。

また、一般的にはあまり使用しないほうが良い
ともありますが、そんなにたくさんの文字を
入力されるのですか?


ペニ丸  2004-09-07 20:01:14  No: 10816

Syakeさんレスありがとうございます。
どうやらテーブルの設計に問題があったみたいですね。

そんなにたくさんの文字を入力するというようなことはないと思います。
なので言ってしまえばtext型である必要はないように思えます。
ただ問題はテーブルの設計をしたのが私ではないというところ・・・・。

設計した本人もこのような不都合があるとは想定していなかったと思いますので、
もう一度よく相談してみたいと思います。

アドバイスありがとうございました!


@っしー  2004-09-07 20:56:34  No: 10817

テーブル設計に問題があるとは思いませんが、、、
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;


Syake  2004-09-08 00:57:30  No: 10818

>テーブル設計に問題があるとは思いませんが、、、
そうですね。
Text型で格納しなければならないようなデータ
ならば、DBCtrlGridと言う手もあります。
そのような事がなければ、VarChar型で十分かな
と思いました。
また、無駄に資源を消費して、後に困ることも
あるかななどと老婆心で思ってしまいました。
(処理も楽だし・・・(^_^;))

適切な回答ではなかったですね。
すいません。


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

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






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