Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1641
  • Last Modified:

VFPOLEDB select deleted records

Experts
I am using the VFPOLDB driver to connect to fox pro tables, to my understanding by default when running a select statement it will not return deleted records, how do you change this setting?  Is there something in the connection string that needs to be changed?
Thanks!
0
SZachmann
Asked:
SZachmann
  • 3
  • 2
1 Solution
 
DhaestCommented:
How can you return deleted records ?
Do those records have a special status ?
0
 
SZachmannAuthor Commented:
Dhaest,

Yes, in Foxpro "deleted" records are really just records that are marked for deletion meaning that they will be permanently deleted next time the "PACK" command is run on that table.  If you were to look at the raw records in VFP 8.0 for instance, you would see the records however there would be a small black mark next to the ones that are marked for deletion.  These are the records that the VFPOLEDB driver does not seem to return.
0
 
DhaestCommented:
Here's some example VB code to work with the deleted status of a row:

Source: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1566422&SiteID=1
  Try
 
   Dim cn1 As New OleDbConnection( _
    "Provider=VFPOLEDB.1;Data Source=C:\Temp\;")
   cn1.Open()
   '-- Make some VFP data to play with
   Dim cmd1 As New OleDbCommand( _
    "Create Table TestDBF (Field1 I, Field2 C(10))", cn1)
   Dim cmd2 As New OleDbCommand( _
    "Insert Into TestDBF Values (1, 'Hello')", cn1)
   Dim cmd3 As New OleDbCommand( _
    "Insert Into TestDBF Values (2, 'World')", cn1)
   Dim cmd4 As New OleDbCommand( _
    "Delete From TestDBF Where Field1 = 1", cn1)
   cmd1.ExecuteNonQuery()
   cmd2.ExecuteNonQuery()
   cmd3.ExecuteNonQuery()
   cmd4.ExecuteNonQuery()
   cn1.Close()
 
   Dim cn2 As New OleDbConnection( _
    "Provider=VFPOLEDB.1;Data Source=C:\Temp\;")
   cn2.Open()
 
   Dim cmd5 As New OleDbCommand( _
    "Select * From TestDBF", cn2)
   Dim da1 As New OleDbDataAdapter(cmd5)
   Dim ds1 As New DataSet
   Dim dr1 As DataRow
   da1.Fill(ds1)
   For Each dr1 In ds1.Tables(0).Rows
    Console.WriteLine( _
     dr1.Item(0).ToString() & ", " & dr1.Item(1).ToString)
   Next
   Console.ReadLine()
   cn2.Close()
 
   Dim cn3 As New OleDbConnection( _
    "Provider=VFPOLEDB.1;Data Source=C:\Temp\;")
   cn3.Open()
 
   Dim cmd6 As New OleDbCommand( _
    "Set Deleted Off", cn3)
   cmd6.ExecuteNonQuery()
   Dim cmd7 As New OleDbCommand( _
      "Select Deleted('TestDBF') As IsDeleted, TestDBF.* From TestDBF", cn3)
   Dim da2 As New OleDbDataAdapter(cmd7)
   Dim ds2 As New DataSet
   Dim dr2 As DataRow
   da2.Fill(ds2)
   For Each dr2 In ds2.Tables(0).Rows
    Console.WriteLine( _
    dr2.Item(0).ToString() & ", " & dr2.Item(1).ToString() & ", " & dr2.Item(2).ToString())
   Next
   Console.ReadLine()
   cn2.Close()
 
  Catch e As Exception
   MsgBox(e.ToString())
  End Try

Open in new window

0
 
SZachmannAuthor Commented:
I see, so basically you're opening your connection and executing several commands, each defined as a separate oledbcommand object.  I'm really wasn't familiar with doing that as I typically just expect to connect to a DB, run a single command (usually a select) and get my data.  I'll give that a try and let you know if it works, but it makes sense to me seeing the code.
0
 
SZachmannAuthor Commented:
I tested the code you sent and it worked perfectly.  Thanks for the help!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now