title: Set OriginalValue property in VB6 classic ADO fabricated recordset
body: <p>In classic ADO in VB6, in a recordset that's come from an external source, say, <code>Set Rs = Conn.Execute("SELECT * FROM Table")</code>, each Field has an <code>OriginalValue</code> property, so that after an update to a record you can still see what the original value of each field was.</p>
  
  <p>However, I'm working with a recordset built like so:</p>
  
  <pre><code>Set Rs = New ADODB.Recordset
  Rs.Fields.Append "Name", adVarChar, 100, adFldMayBeNull
  Rs.Open
  Rs.AddNew
  Rs.Fields("Name").Value = "rudolph"
  Rs.Update
  </code></pre>
  
  <p>But in this recordset, even if I change the value of a field, the OriginalValue property stays blank. Is there any way besides throwing the whole recordset to an XML stream, modifying the XML, and recreating the recordset to get OriginalValue to have the value I want?</p>
  
  <p>I'm working with some previews of data changes where I have two recordsets, one representing the current values and one representing the original values. It's a pain, when needing to compare to see if something has changed, to have two objects instead of just one with two properties.</p>
  
  <p>I know there is metadata inside a recordset about what its source table is, whether it's updatable, what the primary keys are, and what kind of properties the provider supports (such as <code>NextRecordset</code>), but some of them could be hard to access in a fabricated recordset such as I'm working with.</p>
  
  <p>Also, could some locking setting such as <code>adLockBatchOptimistic</code> somehow be needed?</p>