Q181857: PRB: RDO Run-time Error ‘40060’: Incorrect Type for Parameter

Article: Q181857
Product(s): Microsoft Visual Basic for Windows
Version(s): 
Operating System(s): 
Keyword(s): kbGrpDSVBDB
Last Modified: 09-JAN-2000

-------------------------------------------------------------------------------
The information in this article applies to:

- Microsoft Visual Basic Enterprise Edition for Windows, version 5.0 
-------------------------------------------------------------------------------

SYMPTOMS
========

When assigning the value of a field from one Resultset to another (such as,
rs2!FieldX = rs1!FieldY), you may get the following error:

  Run-time error '40060'
  Incorrect type for parameter

CAUSE
=====

FieldY has a NULL value.

RESOLUTION
==========

To resolve this problem, do one of the following:

- Use the following assignment expression:

        rs2!FieldX = rs1!FieldY.Value

- Assign the value of the field to a Variant variable as an intermediate step:

        MyVariant = rs1!FieldY
        rs2!FieldX = MyVariant

STATUS
======

Microsoft is researching this problem and will post new information here in the
Microsoft Knowledge Base as it becomes available.

MORE INFORMATION
================

Steps to Reproduce Behavior
---------------------------

1. Use ISQL/W or another tool to create a table using the following SQL
  statement:

        CREATE TABLE dbo.TestNull (
          ID int NOT NULL ,
          F1 varchar (10) NULL ,
          CONSTRAINT PK_TestAddNew_1__15 PRIMARY KEY  CLUSTERED
            (
            ID
            )
        )

2. Add a record, leaving F1 with a NULL value. You may do this in ISQL/W or
  VISDATA in Visual Basic.

3. In Visual Basic 5.0, create a new project.

4. Reference Microsoft Remote Data Objects 2.0.

5. Add a command button (Command1) and the following code:

        Private Sub Command1_Click()
        Dim cn As rdoConnection, rs1 As rdoResultset, rs2 As rdoResultset
          rdoEngine.rdoDefaultCursorDriver = rdUseServer
          Set cn = rdoEngine(0).OpenConnection("", rdDriverNoPrompt, False, _
            "Driver={SQL Server};Server=moonbase;uid=sa;pwd=;database=pubs")
          Set rs1 = cn.OpenResultset("SELECT * FROM TestNull", _
            rdOpenKeyset, rdConcurValues, rdExecDirect)
          rs1.MoveLast
          Set rs2 = cn.OpenResultset("SELECT * FROM TestNull", _
            rdOpenKeyset, rdConcurValues, rdExecDirect)
          rs2.Edit
          rs2!F1 = rs1!F1
          rs2.Update
          rs1.Close
          rs2.Close
          cn.Close
        End Sub

6. Run the project and click the command button and the error message will
  appear.

7. Change the line:

        rs2!F1 = rs1!F1

  -to-

         rs2!F1 = rs1!F1.Value

8. Run the project again, and the error will not appear.

(c) Microsoft Corporation 1998, All Rights Reserved. Contributions by Malcolm
Stewart, Microsoft Corporation


Additional query words: kbVBp500 kbVBp kbWinOS98 kbDSupport kbdse kbNoKeyWord

======================================================================
Keywords          : kbGrpDSVBDB 
Technology        : kbVBSearch kbAudDeveloper kbZNotKeyword6 kbZNotKeyword2 kbVB500Search kbVB500
Issue type        : kbprb

=============================================================================