注册 登录
编程论坛 VB6论坛

查询ACCESS 数据库和MSHFlexGrid1显示问题

zyangc 发布于 2016-11-08 22:02, 7525 次点击
查询ACCESS 数据库 有字段类型为 是/否
MSHFlexGrid1 表格中怎么显示为下面单选框
只有本站会员才能查看附件,请 登录


我的现在显示为
只有本站会员才能查看附件,请 登录


程序代码:
Private Sub Command1_Click()
    Call OpenConn
    sql = "SELECT iif(审核标志=-1,'是','否') as 审核标志 from 发票 WHERE 户号 = '" & Text1.Text & "'"
    rs.Open sql, cn, 3, 3
    If rs.RecordCount = 0 Then
        MsgBox "无此记录,请重新输入!", 32, "系统"
        Text1.Text = ""
    Else
        If rs.RecordCount > 0 Then
            Set MSHFlexGrid1.DataSource = rs
        End If
    End If
    CloseConn
End Sub


现在能显示是/否,但是MSHFlexGrid1就这一列数据
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2016-11-9 00:37编辑过]

25 回复
#2
xss_wl2016-11-09 11:35
MSHFlexGrid对于是/否,真/假等数据可以以复选框(你图片中的是复选框,而不是你所谓的单选框,单选框显示的是一个圆形)的形式显示出来,但由于没有你的具体数据,我这里也不好给你弄示例代码给你参考了。
#3
zyangc2016-11-09 13:10
回复 2楼 xss_wl
数据文件
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2016-11-9 16:56编辑过]

#4
xss_wl2016-11-09 22:14
看看我给你做出来的效果,是

[此贴子已经被作者于2016-11-18 13:39编辑过]

#5
zyangc2016-11-10 00:40
回复 4楼 xss_wl
是需要这样的,这样显示就可以了,MSHFlexGrid不用更改数据

还有个问题,查询一个表把其中的一个字段 值更新到另外一个表的字段值要怎么写,查了很多资料都没效果
只有本站会员才能查看附件,请 登录
#6
zyangc2016-11-10 03:29
回复 4楼 xss_wl
不在窗体载入数据时候rsFirst.AbsolutePage = intPageNumber  这里出错
程序代码:
Dim cn      As New ADODB.Connection  
Dim rs1     As New ADODB.Recordset '原始记录集  
Dim rs2     As New ADODB.Recordset '每个页面的记录集  
Dim intPage As Integer '当前页数  
  
Private Sub Command1_Click()  
    Dim s As String  
  
    If intPage < rs1.PageCount Then  '指定页面,每点一下就是下一个页面  
        intPage = intPage + 1  
    Else  
        MsgBox "已经是最后一页"  
    End If  
    Call rsPage(rs1, intPage)  '调用分页显示  
End Sub  
  
Private Sub Form_Load()  
    intPage = 0  
    hfg.FixedCols = 0  
    hfg.Height = hfg.RowHeight(0) * 6 + 290 + 20  
    hfg.Width = hfg.CellWidth * 6 + 30 * 6  
    cn.Open "Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=book;Data Source=ZHENG"  
    rs1.Open "select * from 书名", cn, adOpenKeyset, adLockOptimistic, adCmdText  
    rs1.PageSize = 6  
End Sub  
  无数据时候rsFirst.AbsolutePage = intPageNumber  这里出错
Private Sub rsPage(ByRef rsFirst As Recordset, ByVal intPageNumber As Integer)  
    Dim i As Integer, j As Integer  
  
    For i = 0 To rsFirst.Fields.Count - 1 '创建新表rs2,加入相关字段  
        rs2.Fields.Append rsFirst.Fields(i).Name, rsFirst.Fields(i).Type, rsFirst.Fields(i).DefinedSize, rsFirst.Fields(i).Attributes  
    Next i  
  
    rs2.Open  
    rsFirst.AbsolutePage = intPageNumber  
  
  
    For i = 1 To rsFirst.PageSize  '把相应页的数据复制到新表rs2中  
        rs2.AddNew  
  
        For j = 0 To rsFirst.Fields.Count - 1  
            rs2.Fields(j) = rsFirst.Fields(j)  
        Next j  
  
        rs2.Update  
        rsFirst.MoveNext  
  
        If rsFirst.EOF Then Exit For    '判断是否到结尾,因为最后一面,可能不是整个大小  
    Next i  
  
    Set hfg.DataSource = rs2  
    rs2.Close  
End Sub


[此贴子已经被作者于2016-11-10 03:32编辑过]

#7
xss_wl2016-11-10 09:08
以下是引用zyangc在2016-11-10 00:40:32的发言:

是需要这样的,这样显示就可以了,MSHFlexGrid不用更改数据

还有个问题,查询一个表把其中的一个字段 值更新到另外一个表的字段值要怎么写,查了很多资料都没效果

复选框的更改是否要同步更新到后台数据库,可以通过属性进行选择。
#8
xss_wl2016-11-10 09:59
回复 6楼 zyangc
楼主想通

[此贴子已经被作者于2016-11-18 13:41编辑过]

#9
zyangc2016-11-10 14:12
回复 8楼 xss_wl
分页功能不是必须的,只是想好看一点,那个复选框的代码要怎么写?
#10
xss_wl2016-11-10 15:10
回复 9楼 zyangc
你认为牛头对马嘴,会好看?
#11
zyangc2016-11-10 15:40
回复 10楼 xss_wl
那两个功能已经自己解决了,就那个 复选框 要怎么显示出来能说下吗?
#12
xss_wl2016-11-10 16:47
回复 11楼 zyangc
下面是4楼图片所示的示例程序,因为还没有制作成安装包,这个程序必须在安装有VB6的电脑环境下才能运行。
只有本站会员才能查看附件,请 登录

程序在Win7 64位环境下编写,经实验在WinXP,Win7 32位,Win7 64位以及Win10 64位环境下均能完美运行。
只有本站会员才能查看附件,请 登录
#13
zyangc2016-11-10 18:48
回复 10楼 xss_wl
你没理解我的意思,

MSHFlexGrid1 只是一个显示查询结果的功能

数据更新不在MSHFlexGrid1里操作的

只有本站会员才能查看附件,请 登录


你觉的这样一个窗口显示一千多条数据好看吗?

数据更新功能是用在下面窗口的,表1 存的是用户资料 表2 存的是用户数据

我是要把表2中的一个字段 对应 用户更新到表1

只有本站会员才能查看附件,请 登录


这个功能也已经解决了

现在就剩第一个问题了,就是那个多选框要怎么显示出来的
#14
xss_wl2016-11-10 20:28
回复 13楼 zyangc
你也误会我的意思了,我不是给你做出整个程序来,只是实现复选框显示在表格的功能,现在已经实现了。至于复选框的选择要不要同步更新到数据库的字段值,设置一个属性就可以解决。
#15
xss_wl2016-11-11 08:41
以下是引用zyangc在2016-11-10 18:48:45的发言:

你没理解我的意思,

MSHFlexGrid1 只是一个显示查询结果的功能

数据更新不在MSHFlexGrid1里操作的



你觉的这样一个窗口显示一千多条数据好看吗?

数据更新功能是用在下面窗口的,表1 存的是用户资料 表2 存的是用户数据

我是要把表2中的一个字段 对应 用户更新到表1



这个功能也已经解决了

现在就剩第一个问题了,就是那个多选框要怎么显示出来的

呵呵,可能楼主还只是初学者吧,一个表格显示一千多条记录有什么不好看?那还只算是小数据量。对于比较大型的企业,业务量多的情况下,当客户选择“显示全部”功能时,一个表格显示数千甚至数万条记录都很正常。
#16
xzlxzlxzl2016-11-11 10:48
回复 15楼 xss_wl
数万条记录?不知道版主采取了什么方法,我在SQL查询器里想一次性显示5000条以上记录都要好几分钟。估计SQL查询器还使用了多线程,所以还能够逐渐显示记录,不至于枯燥等待,VB是单线程,必须完全处理好才显示,我曾经为等一个3万条记录显示出来等了20多分钟,期间就像当机了。无奈,后改成了每100条、100条的分页显示才使显示全部记录有了实用性。
#17
xss_wl2016-11-11 11:48
回复 16楼 xzlxzlxzl
MySQL你用过吗,现在有哪个比较大型的企业会使用Access数据库的?可能你没有编写过大型企业进销存方面的经验,有这个疑问也很正常。
#18
xss_wl2016-11-11 11:56
回复 16楼 xzlxzlxzl
我曾经接触过好几个企业,他们光数据库服务器就就好几台,查询数据时在软件上采用了负载平衡技术,数万条记录查询出来也就十来秒时间。
#19
新手VB2016-11-11 17:41
回复 4楼 xss_wl
我也需要这样的效果,请分享下,谢谢!
#20
风吹过b2016-11-11 20:53
我用 Access 做过几万条记录的。
经过测试 , 显示速度太慢了,然后自己做显示部分。

这个界面,有滚动条,但显示的数据只会显示当前可见的部分,当移动滚动条时,才会刷新数据。
做到最后,差点被一个滚动条搞死。  VB的滚动条, 0-3W+ ,当数据超过这个最大值,就会导致滚动条出问题。

#21
新手VB2016-11-12 10:09
回复 20楼 风吹过b
请问老师有没有做过这个复选框的,我当时就是因为这个复选框搞不定,最后还是选择access做前台了。
#22
风吹过b2016-11-12 10:44
我是自己做显示,使用的是 print命令显示的,不涉及到显示界面的编辑。
如果仅显示,这么效果可以做的,只是我没用到过。
#23
xzlxzlxzl2016-11-12 11:46
我只做过access、sql server应用,mysql还真没做过,好像也没多少人用vb连接mysql吧。
据我所知,mysql只是个小型关系数据库,也就是做web应用的一些php程序员热衷,有部分优势,但肯定没有做大型数据库的sql server优势多吧;而所谓多服务器负载平衡技术,似乎很高大上,也不过是为了应付多用户并发访问的服务器端技术,不是专门针对提高记录显示速度的。就我看:如果控件要一次性把上万条记录全部缓冲进来再显示,无论使用什么数据库技术,也需要用户有足够的耐心的,但如果在上万条记录中只显示100条以内记录所需时间还是很短的,只是vb没有这样的控件,所以很多人采取了显示部分记录的方式实现所想即所得(如分页和风版主所说的方法),毕竟再大的电脑屏幕也不会一屏显示超过50条记录,估计现在已经有很多这类框架了吧。

题主问题可用复选框控件数组嵌入MSHFlexGrid1对应表格中解决,类似于在MSHFlexGrid1表格中嵌入文本框解决MSHFlexGrid1不能输入的方法。

[此贴子已经被作者于2016-11-12 11:58编辑过]

#24
xss_wl2016-11-12 19:44
回复 23楼 xzlxzlxzl
楼主已经结帖,本来没有继续交流下去的必要。你说的那些疑问表示你没有开发多用户、大数据量的软件经验。所以不打算和你交流大数据量下的软件设计技术。仅仅举一个简单例子,我们不说Excel2007以及Excel2013等Excel版本,就拿老版本的Excel2003来说,它就提供了3万多行的表格供用户输入和显示数据。按你的理解,这又是一个对你难以理解的事情了。
#25
xss_wl2016-11-12 20:56
负载均衡技术是用于多用户并发访问?我只能对你呵呵了。看来负载均衡技术对你来讲确实是高大上的技术。
#26
xzlxzlxzl2016-11-13 18:14
很正常的技术讨论,怎么变成言语攻击了?这素质...
“负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。
通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。均衡负载能够平均分配客户请求到服务器列阵,籍此提供快速获取重要数据,解决大量并发访问服务问题。”,这是百度里的原话,坛友们可自行甄别,网址:http://baike.baidu.com/link?url=uHMLq_nW3DnBsd_CgkDXsA4_NBjLvQzGZFo5xJI4h3Dtmr7uw_XP4zYOFoFCPpQqXkIQEFBtluk9b4GwH6y_EXjK8OHRt_Z6CV035Zl1Mr7LAgRfDdxG_qBpF_SnclQu5cvVcpMaZKRYQUKG7lqfVK
我学习编程,很大部分来自百度,难免有不足之处,xss_wl大神有高见,完全可以不吝赐教,无需费力打手势的。
至于用打开excel表格来驳斥我的观点,是不是太low了,况且真的有人试着打开过有3万条记录的excel表格吗?我记得我曾经用记事本打开一个100M的文本都要等好几分钟的,也许xss_wl版主用的是神级电脑,快是自然的。

我说用vb控件一次性显示上万条记录速度太慢是基于我实际开发中所碰到的,所以拿出来供网友们参考,绝无和xss_wl版主抬杠之意,我知道xss_wl版主厉害,堪称宇宙第一!

[此贴子已经被作者于2016-11-13 18:15编辑过]

1