gpt4 book ai didi

mysql - 如何在 SQL 中裁剪字段长度,使其不占用 DBGrid 的所有空间?

转载 作者:行者123 更新时间:2023-11-29 01:11:36 30 4
gpt4 key购买 nike

假设我有这张表:

name        varchar(255),
quantity integer,
value float

当我使用这段代码时:

select left(name, 99), quantity, value from table;

但是我在 dbgrid 的第一列和其他两个字段中得到了所有 255 个空格(我指的是宽度长度,而不是实际的空格字符),除非我使用滚动条,我的目标是让滚动条不再是必需的。

我如何正确地实现这个目标?我使用 Firebird 和 MySQL。

我不能通过 pascal 代码做到这一点,也不能在表组件的 Fields 对象上定义它,因为这些代码来自许多表,因为这是一个报告生成器,第一个字段并不总是相同的,并且对于每个报告我必须使用不同的 SQL 代码。

enter image description here

请每个人在回答之前阅读所有问题。前 3 个答案错误的地方是因为他们没有考虑到最后一段中所写的内容!

最佳答案

既然你说过你不能在 TField 上做这件事级别或在您的 Delphi 代码中,您可以使用 Trim()Left() ,根据您使用的数据库,在列上删除您不想显示的空格:

例如,在许多 SQL 方言中,您可以使用如下内容:

SELECT Col1, Col2, Trim(Col3) as Col3 FROM yourtable 
WHERE somecondition

有些人允许这样做:

SELECT Col1, Col2, Left(Col3, MaxCharWidthAllowed) as Col3 FROM yourtable 
WHERE somecondition

SELECT Col1, Col2, Substring(Col3, 1, MaxCharWidth) as Col3 FROM yourtable

作为快速测试(我没有 FB,但有 SQL Server 2008,所以我使用它),我在 SQL Server Management Studio 中创建了以下测试数据:

Test data in SSMS

然后我创建了一个新的 D2007 VCL Forms 应用程序,并执行了以下步骤:

  • 丢了一个 TADOConnection在表单( ADOConnection1 )上,并设置连接字符串到上面的测试数据
  • 丢了两个 TADOQuery表单上的组件( ADOQuery1ADOQuery2 ),并设置它们的 Connection属性为 ADOConnection1
  • 丢了两个 TDataSource表单上的组件( DataSource1DataSource2 )并连接它们的 DataSet匹配 ADOQuery1 的属性和 ADOQuery2
  • 丢了两个 TDBGrid组件( DBGrid1DBGrid2 )并设置它们的 DataSource匹配 DataSource1 的属性和 DataSource2 .
  • 已添加 SELECT * FROM testADOQuery1 的 SQL
  • 已添加 SELECT Substring(itemname, 1, 30) as itemname, quantity, value FROM test作为SQLADOQuery2 . 30的长度被任意选择为一个足够小的值,以证明列宽要小得多。
  • 设置ADOConnection1.ConnectedTrue , 并同时设置 TADOQuery.Active属性为 True .

上面的代码产生了这个输出(在设计时,没有编译或运行应用程序),顶部网格是 DBGrid1 :

Design-time output of above steps

如您所见,在 DBGrid2 中, 它连接到 ADOQuery2Substring在 SQL 中,第一列的大小正确为 30 个字符宽度。

关于mysql - 如何在 SQL 中裁剪字段长度,使其不占用 DBGrid 的所有空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14500904/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com