Foxtable(狐表)用户栏目专家坐堂 → 麻烦老爹检查一下代码,超出数组边界?发现BUG。二楼


  共有15821人关注过本帖树形打印复制链接

主题:麻烦老爹检查一下代码,超出数组边界?发现BUG。二楼

帅哥哟,离线,有人找我吗?
菜鸟foxtable
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
麻烦老爹检查一下代码,超出数组边界?发现BUG。二楼  发帖心情 Post By:2010/10/28 11:24:00 [只看该作者]

Dim cmd As New SQLCommand
cmd.C
Dim dt As datatable
If Vars("类型") = "查询" Then
    cmd.CommandText = "" & Vars("查询") & "" & " where 1<>1"
Else If Vars("类型") = "存储" Then
    cmd.CommandText = Vars("查询")
End If

dt = cmd.ExecuteReader()

Dim lst As String
For Each dc As DataCol In dt.dataCols
    lst = dc.name & "|" & lst
Next
Tables("Bsfilter").Cols("listed").Combolist = "" & lst & ""

 

 

 

上面代码是提取后台数据表的所有列名,做为某列的列表项目。

 

当语句为select * from Vw_zycybrjk这样类型的正常,而语句是存储过程exec PROC_DI_zygfbrjsxd时报错。

 

这两个查询语句在SQL执行框里运行正常。


此主题相关图片如下:未命名.jpg
按此在新窗口浏览图片

 

如果把思路改成预先将所有数据Fill到某窗口某表,则正常。

 

   If Vars("类型") = "存储" Then
       Dim lst1 As String
       For Each c As col In Tables("主窗口_Table1").Cols
          lst1 = c.name & "|" & lst1
       Next
       Tables("Bsfilter").Cols("listed").Combolist = "" & lst1 & ""

   End If

[此贴子已经被作者于2010-10-28 11:50:02编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2010/10/28 11:42:00 [只看该作者]

Dim cmd As New SQLCommand
cmd.C
cmd.CommandText = "exec PROC_DI_zygfbrjsxd"
cmd.ExecuteReader()
简化后就是存储过程不能执行。。。。

 

发现有个似乎BUG的东西。在SQL excuter里执行存储过程语句无效,不能正常弹出预览窗口。

 

只能先执行一个常规的查询语句弹出预览窗口后,在预览窗口里执行存储过程才行。

 

似乎一楼的问题就是由于这个原因造成的吧?

 

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图未命名.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2010-10-28 11:49:38编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2010/10/28 13:30:00 [只看该作者]

是不是这里:

 

For Each dc As DataCol In dt.dataCols
    lst = dc.name & "|" & lst
Next

改为:

 

For Each dc As DataCol In dt.dataCols

   if lst = nothing

       lst = dc.name

   else
      lst = dc.name & "|" & lst

    end if
Next
否者您得到的列表项目最后多一个“|”


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/10/28 14:45:00 [只看该作者]

这不是bug,SQL执行窗口判断所执行的SQL语句,如果是Select开头,才弹出窗口显示结果。

一楼的问题我看看,目前你想办法用Select语句吧,我也建议用Select语句。

[此贴子已经被作者于2010-10-28 14:52:33编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2010/10/28 15:45:00 [只看该作者]

以下是引用狐狸爸爸在2010-10-28 14:45:00的发言:

这不是bug,SQL执行窗口判断所执行的SQL语句,如果是Select开头,才弹出窗口显示结果。

一楼的问题我看看,目前你想办法用Select语句吧,我也建议用Select语句。

[此贴子已经被作者于2010-10-28 14:52:33编辑过]

一楼这个问题要解决,我做的东西就是针对任意的SQL数据库,两种类型的语句应该通用才对。


 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2010/10/28 15:49:00 [只看该作者]

以下是引用程兴刚在2010-10-28 13:30:00的发言:

是不是这里:

 

For Each dc As DataCol In dt.dataCols
    lst = dc.name & "|" & lst
Next

改为:

 

For Each dc As DataCol In dt.dataCols

   if lst = nothing

       lst = dc.name

   else
      lst = dc.name & "|" & lst

    end if
Next
否者您得到的列表项目最后多一个“|”

程版,多一个|不影响的,不过您的代码更合理。


 回到顶部