以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  麻烦老爹检查一下代码,超出数组边界?发现BUG。二楼  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=8454)

--  作者:菜鸟foxtable
--  发布时间:2010/10/28 11:24:00
--  麻烦老爹检查一下代码,超出数组边界?发现BUG。二楼

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
--  发布时间: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编辑过]

--  作者:程兴刚
--  发布时间: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
否者您得到的列表项目最后多一个“|”


--  作者:狐狸爸爸
--  发布时间:2010/10/28 14:45:00
--  

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

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

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

--  作者:菜鸟foxtable
--  发布时间: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
--  发布时间: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
否者您得到的列表项目最后多一个“|”

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