SQL数据表在DBGrid1显示不出来!

qq_37067263 2016-12-16 09:42:38


如上图
...全文
363 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
santiaodahan 2016-12-19
  • 打赏
  • 举报
回复
改进一下代码,下面写法的好处是可以处理所有memo字段,无需其他代码。

if Field is TMemoField then    //或if Field.DataType=ftMemo then
begin
     TDBGrid(Sender).Canvas.FillRect(Rect);
     TDBGrid(Sender).Canvas.TextOut(Rect.Left+2, Rect.Top+2, Field.AsString);
end;
在数据集里处理也很好,在数据集的AfterOpen事件中写(定义GetText过程,写一句Text:=Sender.AsString;):

if not DataSet.IsEmpty then
     with DataSet.Fields do
          for i:=0 to Count-1 do
               if Fields[i] is TMemoField then
               TMemoField(Fields[i]).OnGetText:=GetText;
doloopcn 2016-12-18
  • 打赏
  • 举报
回复
MEMO字段需要在字段的ONGETTEXT事件中加入代码,如: procedure TForm1.ADOQuery1IDGetText(Sender: TField; var Text: string; DisplayText: Boolean); begin Text:=Sender.AsString; end; 如果字段不是在项目中已经建立,则需要在QUERY打开后,将字段的Query.FieldByName('aField‘).OnGetText:=你编写的事件; 这样MEMO文本字段的文本便可显示在DBGRID上了
santiaodahan 2016-12-17
  • 打赏
  • 举报
回复
xm、dh应该是姓名、电话吧,还有QQ,这些字段有必要用长文本类型吗?短文本就行。显示长文本可以自绘,在DBGrid的OnDrawDataCell事件里添加如下代码(其他字段参考添加):

     with TDBGrid(Sender).Canvas do
     begin
          if Field.FieldName='xm' then
          TextOut(Rect.Left+2, Rect.Top+2, Field.AsString);
          if Field.DisplayText='(Memo)' then
          TextOut(Rect.Left+2, Rect.Top+2, '      ');
     end;
l402943019 2016-12-17
  • 打赏
  • 举报
回复
楼上正解 数据类型不对 你试试 assting 试下
lyhoo163 2016-12-16
  • 打赏
  • 举报
回复
DEMO类型的数据,DBGrid一般是显示不出来的。需要TDBMEMO控件单独显示。一些第三方的DBGrid控件,可以部分显示。

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧