Question: I have a routine which reads one recordset, and adds/updates rows in a similar recordset. The routine starts off by copying the columns to a new recordset:

Here's the code for creating the new recordset..

```
For X = 1 To aRS.Fields.Count
    mRS.Fields.Append aRS.Fields(X - 1).Name, aRS.Fields(X - 1).Type, aRS.Fields(X - _
          1).DefinedSize, aRS.Fields(X - 1).Attributes
Next X

```

Pretty straight forward. Notice the copying of the name, Type, DefinedSize & Attributes... 

Further down in the code, (and there's nothing that modifies any of the columns between.. ) I'm copying the values of a row to a row in the new recordset as such:

```
 For C = 1 To aRS.Fields.Count
     mRS.Fields(C - 1) = aRS.Fields(C - 1)
 Next C

```

When it gets to the last column which is a numeric, it craps with the "Mutliple-Step Operation Generated an error" message. 

I know that MS says this is an error generated by the provider, which in this case is ADO 2.8. There is no open connect to the DB at this point in time either. 

I'm pulling what little hair I have left over this one... (and I don't really care at this point that the column index is 'X' in one loop & 'C' in the other... I'll change it later when I get the real problem fixed...)

Answer: 
You have to set `Precision` and `NumericScale` for `adDecimal` and `adNumeric` fields before opening synthetic recordset like this

```
For X = 1 To aRS.Fields.Count
    With aRS.Fields(X - 1)
        Select Case .Type
        Case adChar, adWChar, adBinary, _
                adVarChar, adVarWChar, adVarBinary, _
                adLongVarChar, adLongVarWChar, adLongVarBinary
            mRS.Fields.Append .Name, .Type, .DefinedSize, .Attributes
        Case adDecimal, adNumeric
            mRS.Fields.Append .Name, .Type, , .Attributes
            mRS.Fields(mRS.Fields.Count - 1).Precision = .Precision
            mRS.Fields(mRS.Fields.Count - 1).NumericScale = .NumericScale
        Case Else
            mRS.Fields.Append .Name, .Type, , .Attributes
        End Select
    End With
Next

```

FYI: you might be get a recordset with a field that has no name from the database e.g.

```
SELECT 5, 'No name'

```

but ADO will not allow an empty name on `Append` method. You might also get a recordset with duplicate fields from the database e.g.

```
SELECT 5 AS Col, 'Second' AS Col

```

which in your case will bomb out on `Append` too.
Guess 2 : the correct line should be

```
mRS.Fields(C - 1).value = aRS.Fields(C - 1).value

```

---

My guess is you have have a null and you are not treating the dbnull type right.