Я попробовал следующий код, и я не получаю никакого несоответствия аргумента 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.