在将数据库表的VarChar字段从size 20扩展到size 50之后,我必须更新数百个设计时创建的TFields的Size属性,并且我想要这样做一次(我不想再次做同样的工作,因为很快就会有人决定再次更改字段的大小)。
在我看来,最聪明的方法就是在运行时设置TField的Size属性:
const
C_MY_FIELD_SIZE = 50;
...
MyField.Size := C_MY_FIELD_SIZE;唯一的“问题”是,其他程序员将在设计时看到对象检查器的Size属性中显示一个误导性值。我想知道是否有一个等价的设计时解决方案
发布于 2020-12-29 08:18:47
是的,我使用,而不是TTables,问题之一是编辑框的最大大小。在您的示例中,该大小用于TField大小。好的,我所做的是在应用程序开始时,对数据库执行一个查询,该数据库获取表的所有字段的大小。在MsSqlServer中是:
select table_name, column_name, character_maximum_length
from information_schema.columns where data_type='varchar' or data_type='nvarchar'
order by TABLE_NAME该查询返回: tableName、字段、所有字段的字符大小。这样,就可以构建一个数组,或者一个列表来获取应用程序中缓存的信息。
例如,一个数组具有:
aLongs[i].sTable:=uppercase(qAux.fields[0].asstring);
aLongs[i].sField:=uppercase(qAux.fields[1].asstring);
aLongs[i].iLong:=qAux.fields[2].asinteger;然后:函数getSize(sMiFieldName:string):integer;它只需在数组中搜索字段的长度。需要缓存信息,因为通常情况下,查询检索列的大小会减慢。
对不起,我不能完全发布我的代码,那是一份简历,我希望你有这样的想法:在运行时获取大小,并将信息缓存到数组、列表、集合或其他什么地方。
https://stackoverflow.com/questions/65481085
复制相似问题