存储过程中:Create Proc BrowserTable @TableName varchar(20), @TableFiled varchar(50) as exec('Select ' + @TableFiled + ' from ' + @TableName) VB中:dim Cn as new ADODB.Connction dim rs as new adodb.recordsetset rs = Cn.exec ("BrowserTable '" & strTableName & "','"& strFiled &"'")'strTableName 为表名 'strFiled 为表中的字段名,如多个字段可:ID,Name之类的。
我换了这句就不行啦,在VB里调用,说必须声明@dian变量。 exec('select * from tab_he where ' + @kk + ' like ''%'' + @dian + ''%''')
Create Proc BrowserTable as --需要这样定义变量的。 declare @kk varchar(50) declare @dian varchar(50)exec('select * from tab_he where ' + @kk + ' like ''%'' + @dian + ''%''')
我干脆贴出来了,这个问题问了N久都没搞懂: SQL: CREATE Proc BrowserTable as declare @kk varchar(20) declare @dian varchar(20)Set NoCount On exec('select * from tab_he where ' + @kk + ' like ''%'' + @dian + ''%''') Set NoCount Off GOVB里调用: Set rs = cn.Execute("BrowserTable 用户名,l") Set VSFlexGrid1.DataSource = rs错误提示说:BrowserTable没有参数,却为该过程提供了参数。
'你的存储过程结构错了,我给你修改了下CREATE Proc BrowserTable @kk varchar(20), @dian varchar(20) as Set NoCount On declare @Sql_str nchar(100) set @Sql_str='select * from tab_he where ' + @kk + ' like ''%' + @dian +'%''' EXECUTE sp_executesql @sql_strSet NoCount Off GO
呵呵,终于没出错了,但还是差一点。 为什么我用: Set VSFlexGrid1.DataSource = rs 就可以,如果是用VB自带的表就不行:Set dataGrid1.DataSource = rs错误提示:行集合不能作为标签
dataGrid1不支持 ADO.Recordset 数据集合用ADO控件 ADODC1.recordSource="exec BrowserTable 用户名,l" ADODC1.refresh Set dataGrid1.DataSource =ADODC1不过这样的写法有SQL注入漏洞,最好用传递参数的办法.
Adodc1.RecordSource = cn.Execute("BrowserTable 用户名,l") Adodc1.Refresh set datagrid1.DataSource =adodc1像上面那样写还是不行哩,提示:类型不匹配,上面的第一句错。 如果改成:set adodc1.recordsource也不行,属性无效。大家帮下,怎么把存储过程的内容在datagrid里显示出来
@TableName varchar(20),
@TableFiled varchar(50)
as exec('Select ' + @TableFiled + ' from ' + @TableName)
VB中:dim Cn as new ADODB.Connction
dim rs as new adodb.recordsetset rs = Cn.exec ("BrowserTable '" & strTableName & "','"& strFiled &"'")'strTableName 为表名
'strFiled 为表中的字段名,如多个字段可:ID,Name之类的。
exec('select * from tab_he where ' + @kk + ' like ''%'' + @dian + ''%''')
as --需要这样定义变量的。
declare @kk varchar(50)
declare @dian varchar(50)exec('select * from tab_he where ' + @kk + ' like ''%'' + @dian + ''%''')
SQL:
CREATE Proc BrowserTable
as
declare @kk varchar(20)
declare @dian varchar(20)Set NoCount On
exec('select * from tab_he where ' + @kk + ' like ''%'' + @dian + ''%''')
Set NoCount Off
GOVB里调用:
Set rs = cn.Execute("BrowserTable 用户名,l")
Set VSFlexGrid1.DataSource = rs错误提示说:BrowserTable没有参数,却为该过程提供了参数。
@kk varchar(20),
@dian varchar(20)
as Set NoCount On
declare @Sql_str nchar(100)
set @Sql_str='select * from tab_he where ' + @kk + ' like ''%' + @dian +'%'''
EXECUTE sp_executesql @sql_strSet NoCount Off
GO
为什么我用:
Set VSFlexGrid1.DataSource = rs
就可以,如果是用VB自带的表就不行:Set dataGrid1.DataSource = rs错误提示:行集合不能作为标签
ADODC1.recordSource="exec BrowserTable 用户名,l"
ADODC1.refresh
Set dataGrid1.DataSource =ADODC1不过这样的写法有SQL注入漏洞,最好用传递参数的办法.
Adodc1.Refresh
set datagrid1.DataSource =adodc1像上面那样写还是不行哩,提示:类型不匹配,上面的第一句错。
如果改成:set adodc1.recordsource也不行,属性无效。大家帮下,怎么把存储过程的内容在datagrid里显示出来
我用:
ADODC1.recordSource="exec BrowserTable 用户名,l"
ADODC1.refresh
Set dataGrid1.DataSource =ADODC1
实际测试通过了啊