如何将字符串值传递给函数

时间:2011-12-10 10:16:53

标签: vb6

我想将字符串值传递给函数

功能代码

Private Function Assign(Div As String)

        sSQL = "Insert into table2 Select * from table1 Where Divi_Code = '" & Div & "'"
        Rdoconn.Execute sSQL, rdExecDirect

End Function

按钮单击代码

Dim Div as string
Div = "Hai,Howareyou"
Assign Div  'Getting Error as "ByRef arguement type mismatch"

以上代码出现错误,因为获取错误为"ByRef arguement type mismatch"

3 个答案:

答案 0 :(得分:3)

我尝试了以下代码,但我没有得到任何ByRef参数不匹配。

Private Function Assign(Div As String)
    ssql = "Insert into table2 Select * from table1 Where Divi_Code = '" & Div & "'"
    MsgBox ssql
End Function

Private Sub Command1_Click()
    Dim Div As String
    Div = "Hai,Howareyou"
    Assign Div
End Sub

我真的很困惑为什么你的代码会给你一个错误。但是,您应该在代码中更改一些内容,我相信这将解决您的问题:

  • 函数参数应声明为ByVal。在VB6中,除非指定,否则参数默认为ByRef。这意味着如果由于任何原因修改了参数Div,函数调用可能在父过程中具有副作用。 始终使用ByVal,除非您确实需要修改参数值:

    私人功能分配(ByVal Div As String)

  • 您是否有任何理由将“分配”声明为“函数”?您打算返回一个值吗?如果没有,您应该使用Private Sub而不是Private Function(和End Sub)。这相当于在C中使用void返回类型。作为参考,您应该始终在VB6中定义函数的返回类型,否则将假定为Variant。可以使用声明末尾的“As”关键字在函数中对返回类型进行罚款:

    私有函数添加(ByVal n1为整数,ByVal n2为整数)为整数

我想补充的最后一件事是你永远不应该将变量连接到像这样的SQL查询。至少,如果名称包含撇号,代码将崩溃(例如:尝试用“我很好”调用它),最坏的情况是,你将开放SQL注入攻击,有人可以使用它在您的数据库上运行特制查询。虽然我不熟悉RDO,但您应该查看MSDN - this article提及如何使用RDO创建参数查询。

答案 1 :(得分:1)

调用声明为

的函数
Private Function AssignDiv(Div As String, Dep As String)

你需要像

这样的东西
AssignDiv Div, "WhatEverDep"

你的

Assign Div

是完全错误的。

您已将声明更改为

Private Function AssignDiv(Div As String)

但功能名称仍然错误。

您再次更改了代码。现在名称和参数匹配,因此如果仍然出现错误,则不是由您发布的代码引起的。

答案 2 :(得分:0)

开头我不明白为什么你设置Div值然后将它传递给你的函数,你也可以直接在按钮点击上传递它,然后我也看不到sSQL是实际上定义为字符串,请尝试以下代码:

Public Function Assign(strDiv As String)           
Dim sSQL As String
sSQL = "Insert into table2 Select * from table1 Where Divi_Code = '" & strDiv & "'"         
Rdoconn.Execute sSQL, rdExecDirect
End Function

然后点击按钮点击:

Private Sub Command1_Click()
Call Assign("Hai,Howareyou")
End Sub