Actualización desde una base de dato a SQL

Tengo la siguiente rutina donde lo que quiero haacer es actualizar una base sql (el servidor es mysql) desde un .DBF
Mi problema es el siguiente : Cuando voy a querer actualizar el error es que hay campos duplicados cuando llega a la sentencia rs.UpdateBatch adAffectAll
Sospecho que todo esto ocurre por que no encuentra el registro (Siendo que si existe) en la base SQL y crea el registro.
¿Qué estoy haciendo mal?
Desde ya muchas gracias
--------------------------------
Dim varios As Variant
Dim texto As String
Dim mconn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim comando As Command
Dim codo As String
' Dim comm As Command
Set mconn = New ADODB.Connection
Set comando = New Command
mconn.Open "Provider=MSDASQL.1;Persist Security Info=False;User ID=root;Data Source=Ventas;Mode=Read|Write"
Set rs = New ADODB.Recordset
With rs
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockBatchOptimistic
.Open "select * from articulos order by codigo", mconn
End With
Frame1.Caption = "Importando Articulos"
ProgressBar1.Value = 0
Frame1.Visible = True
Frame1.Refresh
With Data1.Recordset
.MoveFirst
While Not .EOF
rs.Find "codigo = '" & .codigo & "'"
If rs.EOF Then
rs.AddNew
rs!codigo = Trim(.codigo)
End If
rs!nombre = .nombre
rs!rubro = .rubro
ProgressBar1.Value = Data1.Recordset.PercentPosition
.MoveNext
Wend
End With
Frame1.Visible = False
rs.UpdateBatch adAffectAll
rs.Close
Set rs = Nothing
Set mconn = Nothing
MsgBox ("Importacion de articulos concluida")
Respuesta
1
Me imagino que el Data1 contiene al DBF cierto, bueno yo prefiero hacerlo de otra manera a mi me funciona uso DAO y ADO
Hago referencia a las 2
Y luego declaro este código:
stSQL="Select * from ...."
Set BFOX = OpenDatabase(App.Path & "\", False, False, "dBASE IV;")
Set TFOX = BFOX.OpenRecordset(stSQL, dbOpenDynaset)
If TFOX.RecordCount > 0 Then
TFOX.MoveFirst
Do While Not TFOX.EOF
strSQL="select * from articulos where codigo = " & TFOX!Codigo & "
'usas tu conexion a SQL
rs.Open strSQL, mconn , adOpenKeyset, adLockOptimistic
if rs.RecordCount > 1 then
'Aca puede insertar o actualizar dependiendo de lo que quieras hacer
endif
Loop
Si quieres un ejemplo de esto escríbeme [email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas