1) Get something like WinSQL (
www.indus-soft.com) and make sure that you can browse the DB manually.
2) Under your Data sources in the control panel, turn tracing in and run a test program. Very often this file will contain the "REAL" error which does not get passed back to VB.
Here is a sample VB update routine.
Public Sub reload_employee()
Dim emp As New ADODB.Recordset '<== Progress Solaris DB
Dim ss_emp As New ADODB.Recordset '<== Local Access DB
Dim sql_cmd As String
Dim inp_line As String, ins_rec As String
Dim entry() As String
Dim Num_Records As Long
On Error GoTo reload_employee_Error '---- Error Handler
do_alert "Delete Old"
' Select the data.
sql_cmd = "DELETE * FROM employee"
' Get the records.
Set rs = conn.Execute(sql_cmd, , adCmdText)
do_alert "Get updates from server"
sql_cmd = "SELECT clock,emp_id,first_name,last_name " _
& " FROM PUB.time_emp"
emp.CursorType = adOpenForwardOnly
emp.LockType = adLockReadOnly
emp.Open sql_cmd, conn_prod_time, , , adCmdText
ss_emp.CursorType = adOpenForwardOnly
ss_emp.LockType = adLockOptimistic
ss_emp.Open "employee", conn, , , adCmdTable
do_alert "Update Local database"
Do While Not emp.EOF
ss_emp.AddNew
ss_emp!clock_no = emp!clock
ss_emp!emp_id = emp!emp_id
ss_emp!full_name = emp!first_name & " " & emp!last_name
ss_emp.Update
emp.MoveNext
' DoEvents ' Yield to other processes.
Loop
emp.Close
ss_emp.Close
On Error GoTo 0
Exit Sub
reload_employee_Error:
Put_Err_Msg "", "Procedure reload_employee of Module Module1"
End Sub