TADOQuery在查询语句中如果使用UNION连接两个表时,为何在TDBGrid控件中显示的字段宽度超宽?(50分)

  • 主题发起人 风逍遥
  • 开始时间

风逍遥

Unregistered / Unconfirmed
GUEST, unregistred user!
TADOQuery在查询语句中如果使用UNION连接两个表时,为何在TDBGrid控件中显示的
字段宽度超宽?比如让ADOQuery1的连接字串指向ADO事例中的DBDEMOS.udl,它指向
一个ACCESS数据库,将库中的表country复制一份取名country1,然后给ADOQuery1的
SQL.Text赋值:
select * from country
union
select * from country1
打开ADOQuery1,结果在DBGrid1中看到显示的name字段很宽,为1534。Capital、
Continent的宽度也为1534,Area,Population则为64。
请问这是什么原因?如何解决?

 
你看看原来是多少,
不行的话在 select 中列出字段名
 
好像这是ACCESS的问题。总是把自定义的表达式设为LongChar(255)。

 
可以直接设置DBGRID里的字段的WIDTH属性啊
或者把字段变成永久字段,那样就不用加代码实现
 
jsxjd:原来的宽度应该不大,就像area的宽度为64就对。列出字段的做法其问题依旧。
kingdeezj:如果说是ACCESS的问题,为何使用dBASE数据库时也出现这样的现象?还有
就是如果不用union关键字,就不会出现这种现象,如何解释?
delphilove:你的说法对的,但我的DBGrid是一个通用查询结果显示模块,查询使用SQL
语句,所以既不能使用永久性字段,也不能直接设置DBGRID里的字段的WIDTH属性。

应该是打开数据源后动态设定每个字段的宽度,但那样的话的确比较麻烦,尤其是字段
很多时。有没有什么简单的办法?请有使用ADO经验的富翁指点迷津……
 
for i:=0 to dbgrid.FieldCount-1 do
dbgrid.Columns.Width:=200;

要不把字段的显示宽度保存到数据库中
procedure SetDBGridWidth(ADBGrid:TDBGridEh{;ICount:integer=1});
//设制DBGridEh的各列的宽度
var
i:integer;
begin
for i:=0 to adbgrid.FieldCount-1 do
if rsTabFields.Locate(SField_Name,
adbgrid.Fields.FieldName,[]) then
begin
if (rsTabFields.FieldByName(SField_AccessPopedom).AsInteger<iUserGrade) or
(rsTabFields.FieldByName(SField_BrowseWidth).AsInteger<=0) then
adbgrid.Columns.Visible:=false
else
adbgrid.Columns.Width:=rsTabFields.FieldByName(SField_BrowseWidth).AsInteger;
end;
end;
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1425701
 
可以通过改变DBGrid属性来修改啊
 
顶部