Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Tabla1.Campo --> Variable --> Tabla2.Campo

Estas en el tema de Tabla1.Campo --> Variable --> Tabla2.Campo en el foro de Visual Basic clásico en Foros del Web. Hola amigos Tengo dos Tablas (en dos bases diferentes), y la Tabla2 debe actualizarse con los valores de la Tabla1 cuando se cumpla cierta condición. ...
  #1 (permalink)  
Antiguo 07/06/2005, 06:29
jorevale
Invitado
 
Mensajes: n/a
Puntos:
Tabla1.Campo --> Variable --> Tabla2.Campo

Hola amigos

Tengo dos Tablas (en dos bases diferentes), y la Tabla2 debe actualizarse con los valores de la Tabla1 cuando se cumpla cierta condición.

Ando intentando hacer lo siguiente:

Base1.Tabla1 ---> Variable ---> Base2.Tabla2

Todo se define en tiempo de ejecución. Las cadenas de conexión también se crean a partir de variables.

Pero evidentemente no me funciona. Podéis sugerirme una vía diferente ó el error de ésta?

Gracias



Set CN1 = New Connection
With CN1
' Proveedor de datos Microsoft OLE DB para Microsoft Jet
.Provider = "Microsoft.jet.OLEDB.3.51"
.ConnectionString = VIP1 & VDrive1 & VDir1 & VFile1
End With
Set CN2 = New Connection
With CN2
' Proveedor de datos Microsoft OLE DB para Microsoft Jet
.Provider = "Microsoft.jet.OLEDB.3.51"
.ConnectionString = VIP1 & VDrive1 & VDir1 & VFile2
End With
' Abrir la conexión 1 y el conjunto de registros
CN2.Open
Set RS2 = New Recordset
With RS2
.Source = "Select * from " & VTable2
.ActiveConnection = CN2
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
End With
CN1.Open
Set RS1 = New Recordset
With RS1
.Source = "Select * from " & VTable1
' where rs1.FEC_ENT > VDate1
.ActiveConnection = CN1
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
V = 1
.Open
Do While V = 1
If .EOF Then
Exit Do
V = 0
End If
.MoveFirst
VID_Aviso = RS1.ID_AVISO
VNombre = RS.Nombre
VFijo = .Fijo
VMóvil = .Móvil
VDirección = .Dirección
VLocalidad = .Localidad
' etcetera


If .EOF Then
Exit Do
V = 0
End If
.MoveNext
Loop
End With
End Sub


Private Sub Update()
active Connection = CN2
With RS2
.AddNew
.ID_AVI = VID_Aviso
.Nombre = VNombre
.Fijo = VFijo
.Móvil = VMóvil
.Dirección = VDirección
.Localidad = VLocalidad
End With
active Connection = CN1
End Sub
  #2 (permalink)  
Antiguo 07/06/2005, 10:01
 
Fecha de Ingreso: abril-2005
Mensajes: 137
Antigüedad: 19 años
Puntos: 0
Cita:
Iniciado por jorevale
Hola amigos

Tengo dos Tablas (en dos bases diferentes), y la Tabla2 debe actualizarse con los valores de la Tabla1 cuando se cumpla cierta condición.

Ando intentando hacer lo siguiente:

Base1.Tabla1 ---> Variable ---> Base2.Tabla2

Todo se define en tiempo de ejecución. Las cadenas de conexión también se crean a partir de variables.

Pero evidentemente no me funciona. Podéis sugerirme una vía diferente ó el error de ésta?

Gracias



Set CN1 = New Connection
With CN1
' Proveedor de datos Microsoft OLE DB para Microsoft Jet
.Provider = "Microsoft.jet.OLEDB.3.51"
.ConnectionString = VIP1 & VDrive1 & VDir1 & VFile1
End With
Set CN2 = New Connection
With CN2
' Proveedor de datos Microsoft OLE DB para Microsoft Jet
.Provider = "Microsoft.jet.OLEDB.3.51"
.ConnectionString = VIP1 & VDrive1 & VDir1 & VFile2
End With
' Abrir la conexión 1 y el conjunto de registros
CN2.Open
Set RS2 = New Recordset
With RS2
.Source = "Select * from " & VTable2
.ActiveConnection = CN2
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
End With
CN1.Open
Set RS1 = New Recordset
With RS1
.Source = "Select * from " & VTable1
' where rs1.FEC_ENT > VDate1
.ActiveConnection = CN1
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
V = 1
.Open
Do While V = 1
If .EOF Then
Exit Do
V = 0
End If
.MoveFirst
VID_Aviso = RS1.ID_AVISO
VNombre = RS.Nombre
VFijo = .Fijo
VMóvil = .Móvil
VDirección = .Dirección
VLocalidad = .Localidad
' etcetera


If .EOF Then
Exit Do
V = 0
End If
.MoveNext
Loop
End With
End Sub


Private Sub Update()
active Connection = CN2
With RS2
.AddNew
.ID_AVI = VID_Aviso
.Nombre = VNombre
.Fijo = VFijo
.Móvil = VMóvil
.Dirección = VDirección
.Localidad = VLocalidad
End With
active Connection = CN1
End Sub
mira
estas utilizando mal tus recordsets
los campos los deben citar asi: Recordset("campo") ó Recordset!campo (en primer lugar)
luego: para pasar los valores de una tabla a otra pues no te alargues tanto:
Si ya tiene el conjunto de registros en el RS1 puedes hacerlo simple
RS1.MoveFirst
While Not RS1.EOF
Set RS2=New ADODB.Recordset
RS2.Open "Select * From Tabla2",CN1, adOpenKeySet, adLockOptimistic
RS2.AddNew
RS2!ID_AVI = RS1!ID_Aviso
RS2!Nombre = RS1!Nombre
RS2!Fijo = RS1!Fijo
RS2!Móvil = RS1!Móvil
RS2!Dirección = RS1!Dirección
RS2!Localidad = RS1!Localidad
RS2.Update
RS1.MoveNext
Wend

con eso simplificas mucho tu trabajo
  #3 (permalink)  
Antiguo 08/06/2005, 02:44
jorevale
Invitado
 
Mensajes: n/a
Puntos:
Hola amigo

En realidad no me funciona. Te diré lo que he hecho

Tengo dos controles:
ADODC1:
- Cadena de conexión: Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=C:\AUTI\Tabla1.mdb
- Origen de registros: SELECT * FROM AVISOS ORDER BY ID_AVISO


ADODC2:
- Cadena de conexión: Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=C:\AUTI\Tabla2.mdb
- Origen de registros: SELECT * FROM AVISOS ORDER BY ID_AVISO

(La estructura de ambas bases es idéntica, por lo que en ambas hay una tabla AVISOS con un campo ID_AVISO índice autonumérico.

La intención es que revise en Tabla 1 y mueva hacia Tabla 2 cuando un CampoX (Si/No) esté marcado a Si, lo cual significa que el aviso está terminado.


He puesto el código que me mandaste en el boton actualizar:

Private Sub cmdActualizar_Click()
RS1.MoveFirst
While Not RS1.EOF
RS2.Open
RS2.AddNew
RS2!ID_Aviso = RS1!ID_Aviso
RS2!Nombre = RS1!Nombre
RS2!Fijo = RS1!Fijo
RS2!Móvil = RS1!Móvil
RS2!Dirección = RS1!Dirección
RS2!Localidad = RS1!Localidad
RS2.Update
RS1.MoveNext
Wend
End Sub

Podrías ayudarme con el resto (evento load del formulario y demás), porque no me aclaro y ya llevo rato con esto...

Gracias
  #4 (permalink)  
Antiguo 08/06/2005, 03:16
jorevale
Invitado
 
Mensajes: n/a
Puntos:
Bueno, ya lo he logrado con el siguiente código:

(De todas formas, si hay alguna forma mejor de hacerlo, por favor, dimelo)

Private Sub Prueba()
Set CN2 = New Connection
With CN2
.Provider = "Microsoft.jet.OLEDB.3.51"
.ConnectionString = "C:\AUTI\AST\ACUM.mdb"
End With
CN2.Open
Set RS2 = New Recordset
RS2.Source = "Select * from AVISOS"
RS2.ActiveConnection = CN2
RS2.CursorType = adOpenStatic
RS2.CursorLocation = adUseClient
RS2.LockType = adLockOptimistic

Set CN1 = New Connection
With CN1
.Provider = "Microsoft.jet.OLEDB.3.51"
.ConnectionString = "C:\AUTI\AST\AUTI.mdb"
End With
CN1.Open
Set RS1 = New Recordset
RS1.Source = "Select * from AVISOS"
RS1.ActiveConnection = CN1
RS1.CursorType = adOpenStatic
RS1.CursorLocation = adUseClient
RS1.LockType = adLockOptimistic
RS1.Open
RS1.MoveFirst
RS2.Open
While Not RS1.EOF
RS2.AddNew
' RS2!ID_Aviso = RS1!ID_Aviso
RS2!Nombre = RS1!Nombre
RS2!Fijo = RS1!Fijo
RS2!Movil = RS1!Movil
RS2!Direccion = RS1!Direccion
RS2!Localidad = RS1!Localidad
RS2.Update
RS1.MoveNext
Wend
End Sub
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:23.