citect2018R2使用数据表控件显示大量查询结果

这一篇笔记我在新浪博客记录过,在这里也记录一次,新浪博客地址citect2018R2使用数据表控件显示大量查询结果_来自金沙江的小鱼_新浪博客 (sina.com.cn)

最近现场安装了CITECT 2018R2需要做报表的功能,先在家里电脑上做一下练习,很久没有使用这个功能了。以前做过练习,数据量大的时候,查询结果在控件显得有点慢,我做的练习中使用的方法很可能不是最优解,也有一些问题。先记录下来,以后能够改进的时候再写新的笔记。我打算做一个有些1000 0000条记录的数据表,然后测试大量数据在控件中显示如何做到时间最短。

为了做测试,我再电脑上的虚拟机安装了SQL SERVER2022和sql server manage studio 19以及施耐德的unity和citect2018R2。新建了一个数据库TestDB,把数据库文件大侠定义大一点,我也不知道后面那个有着1000 0000条记录的表会有多大的容量。
使用SQL 语句新建数据表,下面的SQL语句是从网上抄写的
create table [dbo].[table1]([gid][int]identity(1,1) not null,
[title][varchar](80) collate chinese_prc_ci_as null,
[fariqi][datetime]null,
[neibuyonghu][varchar](70) collate chinese_prc_ci_as null,
[reader][varchar](900)  collate chinese_prc_ci_as null,
)on [primary]
go
执行一下就会创建一个数据表table1
 
新建sql 语句向table1插入1000 0000条记录,下面的语句也是从网上抄写的。
declare @i int
set @i=1
while @i<=250000
begin
insert into table1(fariqi,neibuyonghu,reader,title) values('2004-2-5','通信科','通信科,办公室,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队, 户政科,治安支队,外事科','这是最先的25万条记录')
set @i=@i+1
end
GO
declare @i int
set @i=1
while @i<=250000
begin
insert into table1(fariqi,neibuyonghu,reader,title) values('2004-9-16','办公室','办公室,通信科,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支 队,户政科,外事科','这是中间的25万条记录')
set @i=@i+1
end
GO
declare @h int
set @h=1
while @h<=100
begin
declare @i int
set @i=2002
while @i<=2003
begin
declare @j int
set @j=0
while @j<50
begin
declare @k int
set @k=0
while @k<50
begin
insert into table1(fariqi,neibuyonghu,reader,title) values(cast(@i as varchar(4))+'-8-15 3:'+cast(@j as varchar(2))+':'+cast(@j as varchar(2)),'通信科','办公室,通信科,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,户政科,外事 科','这是最后的50万条记录')
set @k=@k+1
end
set @j=@j+1
end
set @i=@i+1
end
set @h=@h+1
end
GO
declare @i int
set @i=1
while @i<=9000000
begin
insert into table1(fariqi,neibuyonghu,reader,title) values('2004-5-5','通信科','通信科,办公室,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队, 户政科,治安支队,外事科','这是最后添加的900万条记录')
set @i=@i+1
end
GO
 
 
整个插入过程时间有点长,整个过程耗时大约为40分钟。我不知道是不是还有更加好的方法。
 
数据库的量准备完了,接下来练习一下读取数据看怎么快捷了。
在citect 2018R2新建一个项目程序,新建一个页面main,放置一个按钮和一个Microsoft Hierarchical FlexGrid Control控件。Microsoft Hierarchical FlexGrid Control控件需要授权,授权需要regsvr32注册控件,还要导入注册表文件。
 
[HKEY_CLASSES_ROOT\Licenses]
 
[HKEY_CLASSES_ROOT\Licenses\1F3D5522-3F42-11d1-B2FA-00A0C908FB55]
@="gcfjdjecpchcncdjpdejijgcrdoijjfcieod"
 
[HKEY_CLASSES_ROOT\Licenses\73A4C9C1-D68D-11d0-98BF-00A0C90DC8D9]
 
[HKEY_CLASSES_ROOT\Licenses\73A4C9C1-D68D-11d0-98BF-00A0C90DC8D9\16.0]
 
[HKEY_CLASSES_ROOT\Licenses\73A4C9C1-D68D-11d0-98BF-00A0C90DC8D9\16.0\Retail]
@="sbbcdcprktpjtapmmfdacmupasbhscddncgp"
 
 
补充说明一下,使用Microsoft Hierarchical FlexGrid Control控件是因为它支持ADO,citect上其它的控件不支持。
在CITECT2018R2项目程序新建一个CITECTVBA脚本
Sub DatagridShow()
Dim STRCON As STRING '数据库连接语句
Dim objcon As Object
Dim objcom As Object
Dim objrs As Object
Set objcon =createobject("ADODB.connection")
Set objrs=createobject("ADODB.recordset")
Set objcom= createobject("ADODB.command")
objcom.commandtype=1
strcon="Provider=SQLOLEDB;password=sa3390011;user id=sa;Initial Catalog=testDB;Data Source=DESKTOP-05Q4FPJ"
objcon.connectionstring=strcon
objcon.Cursorlocation=3
objcon.open
Set objcom.ActiveConnection=objcon
objcom.commandtext="select top 2000000 * from table1"
Set objrs=objcom.execute
main_AN5.clear
main_AN5.rows=objrs.recordcount+1
main_AN5.cols=objrs.fields.count+1
main_AN5.colWidth(1)=900
main_AN5.colWidth(2)=2500
main_AN5.colWidth(3)=2500
main_AN5.colWidth(4)=1500
main_AN5.colWidth(5)=6500
Set main_AN5.datasource=objrs
Set objrs=nothing
objcon.close
Set objcon=nothing
End Sub
 
画面按钮调用这个脚本,这是将2000000条记录显示在控件上,大约需要花费30秒时间。

 

我测试过,如果是100000条记录这样的规模,5秒左右可以出结果。

我把相关资料放入了百度网盘,分享出来
链接:https://pan.baidu.com/s/13CST-TD8kqra8WZCaeRiQw 
提取码:1234
posted @   来自金沙江的小鱼  阅读(170)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示