Visual Basic - Recordset consulta multiples tablas

Life is soft - evento anual de software empresarial
 
Vista:

Recordset consulta multiples tablas

Publicado por Tania (1 intervención) el 31/05/2009 21:06:16
Hola...tengo un problema.
Resulta q tengo un Data.Recordset al que le asigno una consulta sobre dos tablas que tienen un campo en común. El resultado lo muestro en una grid. Cuando quiero editar uno de los registros con un simple Data.Edit me dice q no se puede. Deduzco que será por las dos tablas. Entonces se me ocurrió crearme otro Data para editar el registro en cuestión(en funcion de la clave unica del registro). Peeeero....no sé si es que las actualizaciones las estoy haciendo mal pero cuando descargo el formulario que contiene los data, no sólo me actualiza el registro en cuestión, sino el primer registro de la base de datos. Es como si se quedara con registros en el aire, no supiera donde meterlos y los colocara en el primer registro de la bd.
Estoy usando access, y los Data los inicializo en tiempo de diseño a la base de datos y en tiempo de ejecucion a las tablas.

Alguien puede ayudarme?Hay alguna otra forma de hacer esta operación??

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Recordset consulta multiples tablas

Publicado por Esperanza (38 intervenciones) el 01/06/2009 12:50:50
Hola, el ejemplo que te envío actualiza una tabla en la que algunos registros vienen con códigos postales en blanco. Los muestro en un Datagrid y los voy actualizando.
Yo tenía problemas al editar el Datagrid, y lo he solucionado usando UpdateBatch.
Te pongo el trozo de programa en el que hago la actualización, le puedes echar un vistazo por si te sirve de algo. Lo único que tengo es un Datagrid, un botón de Aceptar y otro de Volver.

Option Explicit
Dim rs, rs1 As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim campo_ordenar As String

Private Sub Form_Load()
Set cnn = New ADODB.Connection
Set rs = New ADODB.Recordset
Set rs1 = New ADODB.Recordset
With cnn
.CursorLocation = adUseClient
.IsolationLevel = adXactReadUncommitted
.ConnectionTimeout = 30
.Mode = adModeReadWrite
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
ruta_trabajo & ";Persist Security Info=False"
.Open
End With
On Error GoTo ManejadorError
rs.Open "Select * from [Mi_Tabla] where Codigo_provincia = '00' Or " & _
"Codigo_provincia IS NULL Or Codigo_localicad = '000' Or Codigo_localicad IS NULL order by Direccion", cnn, adOpenStatic, adLockBatchOptimistic

If rs.BOF Then
MsgBox ("No hay ningún Código Postal para arreglar")
Unload Me
Exit Sub
End If
Set DataGrid1.DataSource = Nothing
Set DataGrid1.DataSource = rs
Definir_columnas

Private Sub aceptar_click()
If MsgBox("¿Quieres modificar los registros?", vbYesNo) = vbYes Then
rs.UpdateBatch
Else
rs.CancelBatch
End If
End Sub


Private Sub Definir_columnas()
' Establecemos el ancho de las columnas
Dim I
For I = 0 To 26
DataGrid1.Columns(I).Width = 0
Next
With DataGrid1
.Columns(4).Width = 1000
.Columns(9).Width = 3000
.Columns(11).Width = 3500
.Columns(12).Width = 1300
.Columns(13).Width = 700
.Columns(14).Width = 700
End With
'Cambiamos el título de algunas columnas
With DataGrid1
.Columns(4).Caption = "Num. Envío"
.Columns(9).Caption = "Titular"
.Columns(11).Caption = "Dirección"
.Columns(12).Caption = "Población"
.Columns(13).Caption = "C.P.Prov."
.Columns(14).Caption = "C.P.Loc."
End With
'Establezco el color de las letras
DataGrid1.ForeColor = &H80&
End Sub

Private Sub DataGrid1_HeadClick(ByVal ColIndex As Integer)

'Ordenamos el origen de los registros del control Adodc1 basándonos en la columna en la que el usuario hace click

campo_ordenar = DataGrid1.Columns(ColIndex).DataField

' El Open lo hago porque si no al volver a cargar el formulario no me carga los datos en el datagrid

rs.Close
rs.Open "Select * from [Mi_Tabla] where Codigo_provincia = '00' Or " & _
"Codigo_localicad = '000' order by " & campo_ordenar, cnn, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs
Definir_columnas
End Sub

Private Sub Volver_Click()
Unload Me
Actualizar_Provincia
Principal.Show
End Sub

ManejadorError:
If Err.Number <> 0 Then
MsgBox ("Error: " & Err.Number)
End If
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar