Как передать строковое значение в функцию - PullRequest
0 голосов
/ 10 декабря 2011

Я хочу передать строковое значение в функцию

Код функции

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 ]

3 голосов
/ 10 декабря 2011

Я попробовал следующий код, и я не получаю никакого несоответствия аргумента 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 в конце). Это эквивалентно использованию возвращаемого типа void в C. Для справки, вы всегда должны определять тип возврата ваших функций в VB6, в противном случае будет использоваться Variant. Тип возврата может быть оштрафован в функциях с использованием ключевого слова «As» в конце объявления:

    Добавление приватной функции (ByVal n1 как целое число, ByVal n2 как целое число) как целое число

И последнее, что я хотел бы добавить, это то, что вам никогда не следует объединять переменные в SQL-запросы, подобные этой. По крайней мере, код завершится сбоем, если имя содержит апостроф (например, попробуйте назвать его «Я очень хорошо»), и в худшем случае вы будете открыты для атак с использованием SQL-инъекций, где кто-то может использовать это запускать специально созданные запросы к вашей базе данных. Хотя я не знаком с RDO, вам следует проверить MSDN - в этой статье 1023 * упоминается, как создавать запросы параметров с помощью RDO.

1 голос
/ 10 декабря 2011

Для вызова функции, объявленной как

Private Function AssignDiv(Div As String, Dep As String)

вам нужно что-то вроде

AssignDiv Div, "WhatEverDep"

Ваш

Assign Div

совершенно неправильно.

Вы изменили свою декларацию на

Private Function AssignDiv(Div As String)

но имя функции все еще неверно.

Вы снова изменили свой код. Теперь имена и параметры совпадают, поэтому, если вы все еще получаете сообщение об ошибке, это не вызвано кодом, который вы опубликовали.

0 голосов
/ 12 декабря 2011

для начала я не понимаю, почему вы устанавливаете значение 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...