不好意思,最后四十分,不过能解决的话,十天之内我有100分全送给你好了,有几个小问题请教高手(我结贴速度很快,相信答复过我问题的人有此感)

ccittbeauty 2003-08-21 08:11:11
1.用mshflexgrid控件,但不没有用ado绑定,用循环实现赋值,发觉很慢,
而且有个现象,如果有一次查询集合为空,以后无论查询记录集合rst是否为空,我的第一行(标题固定行)也和其它行的背景颜色一样了,不知是什么原因.
想请教一下,mshflexgrid到底支持显示多少行?能不能提高其填充速度?

2.用日历控件.dtppicker.value能不能赋给一个空值呢?或者是一个空字符??
当我想把空值赋给它时,总是提示 "mulitiselect不能设置空值"但在属性窗口中又找不到这个属性.用isnull判断后再赋值好像不执行,很奇怪.

3.做一个查询后返回一个记录集合rst,有没有什么办法再打开一个记录集合是是上一个记录集合的一个子查询?我知道SQL中可以用VIEW来实现,但我没试过,不知如何做,提示一下.

分数很少,很对不起,但新手请您多多帮助!!
...全文
36 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xayzmb 2003-08-26
  • 打赏
  • 举报
回复
1.当RS为空时,将GRID控件的固定行设为0
2.用len(trim(dtppicker.value))试试,如果=0,则为空
3. (1):保存上一次查询的条件,再次查询时,将两个条件一起用
(2):用select * into newTableName.....的方法建一个新的临时表,下一次对这个临时表
进行查询,用完后将表删除.
ccittbeauty 2003-08-25
  • 打赏
  • 举报
回复
自己再UP一下,就解贴了帮帮忙吧!
julieyan 2003-08-25
  • 打赏
  • 举报
回复
表格我个人认为用vsflexgrid比mshflexgrid要好的多,功能强大又美观。就是绑定到adodc上也可以做到很美观。
msflexgrid行数好像和内存等硬件相关。
hxy2003 2003-08-25
  • 打赏
  • 举报
回复
第二个问题:你可以结合文本框控件来处理.
ccittbeauty 2003-08-23
  • 打赏
  • 举报
回复
to:qifanghcy 谢谢你,是个好办法,可是我奇偶行不同色,不过先试试再说吧!
to feihong0233 我要的不是二次查询,可能是多次啊,用户如果想要多少次就多次?
所有最好每次都能得到一个字符串赋给一个变量,然后我再可以用啊. as temp是表示是个临时表吗?
我的意思是指最好有办法每次再从这个新的记录集合去找,这样免得SQL语句太长,但是我不会写,即能不能这样?
private sub cmdseek_click' 每次查找
i=i+1
conn.exectue SQL
end sub

create view Myview&"& cstr(i)&" as select myview&"& cstr(i-1) &"
if check1.value=vbchecked then
然后再SQL="select * form myview&"& cstr(i)&""
我只是有这种思路,不知道VB里面是否可以这样做呢?
我用的是SQL,谢谢你,再帮帮看,我就结贴了.
qifanghcy 2003-08-23
  • 打赏
  • 举报
回复
第一个问题有两种方法来实现!不过速度提升不了多少!
1.记录集转换成数组来进行赋值给表格.[我用的是三层架构,觉得这样的速度还可以]
2.开始赋值时,MsFlexGrid1.ReDraw=False 填充完成后:MsFlexGrid1.ReDraw=True!
如果是背景色会一样的话,你只要在开始填充前,让表格始终有几个空白行,这样就不会出现这种情况了!并且也会比较好看的!
第二个问题:这是日历控件自身的问题,无法解决[指我],但是你可以结合文本框控件来处理.
第三个问题:这个不好做,帮你UP一下!

呵呵...*^_^*
feihong0233 2003-08-23
  • 打赏
  • 举报
回复
第三个给你个SQL看看,
Access下的
SELECT * FROM (SELECT * FROM [Students] WHERE [Name]='喻泓飞') AS [Temp]
feihong0233 2003-08-23
  • 打赏
  • 举报
回复
第一个问题,我觉得解决grid不是办法,
考虑数据库底层的算法要比你自己的算法快,
所以你可以使用SQL语句分页查询。
比如第n页查询
SELECT TOP 10 * FROM [TableName] WHERE [ID] IN (SELECT TOP 10*n [ID] FROM [TableName] ORDER BY [ID]) ORDER BY [ID] ORDER BY [ID] DESC

第二个我想两个不是办法的办法,第一个你自己设定一个不会用到的时间,
比如49-10-1当用户输入这个时间的时候认为null保存到数据库,
第二个就是妳可以使用一个或着三个textbox代替日期控件,
三个比较好编程,一个看上去好看点。

第三个最好办,使用带条件的SELECT语句打开表就好了。
ccittbeauty 2003-08-23
  • 打赏
  • 举报
回复
怎么做?临时表可以删除吗?需不需要删除?能写些源码我看一下吗?
yoki 2003-08-23
  • 打赏
  • 举报
回复
3.可以用临时表来解决
将你的rst存成一个临时表,然后再针对此临时表查询
ccittbeauty 2003-08-23
  • 打赏
  • 举报
回复
用了我这种方法后,第一次使用是可以的,但第二次使用好像不对,视图好像只能建一次吧.
有没有别的方法,谢谢!!!
简单的测试源码如下.:
Dim Conn As ADODB.Connection
Dim Rst As ADODB.Recordset
Private i As Integer
Private BSTR(1 To 20) As String

Private Sub Check1_Click()
i = 0
End Sub

Private Sub Command1_Click()
i = i + 1
BSTR(i) = "Select * From 工作人员信息表 Where " & cblField.Text & "" & cblCondtion.Text & "'" & cblNum.Text & "'"
Call Form_Load

Rst.Open Seeks, Conn, adOpenKeyset, adLockOptimistic
With MSHFlexGrid1
Set .DataSource = Rst
.Refresh
Rst.Close
End With

End Sub

Private Sub Form_Load()
Set Conn = New ADODB.Connection
Set Rst = New ADODB.Recordset
Conn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=hospital;Data Source=DAISYDEW"
With MSHFlexGrid1
Rst.Open "SELECT * from 工作人员信息表 ", Conn, adOpenKeyset, adLockOptimistic
Set .DataSource = Rst
.Refresh
Rst.Close
End With
End Sub
Private Function Seeks() As String

Dim ASQL As String
If Check1.Value = vbChecked Then
If i > 1 Then
ASQL = "Create View myView" & CStr(i) & " As " & BSTR(i) '当I大于1时做.
Conn.Execute ASQL
Seeks = "select * from myView" & CStr(i) & ""
Else
If i > 0 Then
ASQL = "Create View myView" & CStr(i) & " As Select * From 工作人员信息表"
Debug.Print ASQL
Conn.Execute ASQL
Seeks = "select * from myView" & CStr(i) & ""
End If
End If
Else
Seeks = "Select * From 工作人员信息表 Where " & cblField.Text & "" & cblCondtion.Text & "'" & cblNum.Text & "'"
End If



End Function
hansblue 2003-08-22
  • 打赏
  • 举报
回复
帮你顶一下,我也觉得我的GRID刷新很慢,有什么办法可以解决的吗?
ccittbeauty 2003-08-21
  • 打赏
  • 举报
回复
谢谢你的回答,
3.
就是我设置了三个combox,分别为字段名,查询条件(=,<,like....),然后是所查的范围.
查询后的记录集放到grid中显示,现在我有一个checkbox,点击它后就是在当前的记录集合上再进行查询,如何做呢?用你的方法全不会执行很慢呢?因为我联接了三个表.

还有一个问题,mshflexgrid最多能显示多少行?我有10,000多行需要显示.能不能提高其它速度,不用分页实现.

谢谢.清楚了就结贴.
还想懒够 2003-08-21
  • 打赏
  • 举报
回复
1、那是MSHFlexgrid的一个BUG,救倒也有办法救,就是当你查询出记录为0的时候,就设置一些属性使它的focus不显示等等情况吧。
2、没救,日历控件你必须进行赋值,不赋值还真报错,必须赋的值还得像一个日期的模样,不然的话还不知道会出什么变故。
3、没太明白你的意思,是不是想在查询出来的情况下再进行查询?那就在where条件下再加上and 再加上查询条件就行了。VIEW一般用于不同表之间的复合查询,在后台实现的,其实可以看做成为一个虚拟表。
ccittbeauty 2003-08-21
  • 打赏
  • 举报
回复
很惨了,没人回答,自己顶一下.

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧