Trabajar con tablas vinculadas y SQL

Con algo de trabajo he creado una base que funciona a la perfección, esto es en forma local, pero mi interés es que se pueda migrar a SQL (en el mejor de los casos) o que se divida para que funcione en varios equipos al mismo tiempo.
El problema que tengo es al manejar recordset's dentro de los informes ya que tengo lo siguiente:
Private Sub EncabezadoDelInforme_Print(Cancel As Integer, PrintCount As Integer)
Dim DB As Database, tabla, tabla1, tabla2, tabla3, tabla4, tabla5, tabla6 As Recordset
Set DB = CurrentDb
Set tabla = DB.OpenRecordset("Clientes")
tabla.Index = "primarykey"
tabla.Seek "=", Me.Cliente
Me.nombre_cliente = tabla(2)
Me.Nombre_corto = tabla(3)
Me.direccion = tabla(4)
Set tabla = DB.OpenRecordset("Inventario")
tabla.Index = "primarykey"
tabla.Seek "=", Me.Serie
Me.IPos = tabla(2)
Me.ITanq = tabla(3)
Me.INDesc = tabla(4)
Me.IIDe = tabla(5)
Me.IMarca = tabla(6)
Me.IModelo = tabla(7)
Me.IKF = tabla(8)
Me.IUKF = tabla(9)
Set tabla = DB.OpenRecordset("Tipo Medidor")
tabla.Index = "primarykey"
tabla.Seek "=", Me.INDesc
Me.ITipo = tabla(1)
'Patrón con el que se calibró el instrumento.
Set tabla1 = DB.OpenRecordset("Patrones")
tabla1.Index = "primarykey"
tabla1.Seek "=", Me.Patrón
Me.PExped = tabla1(3)
Me.PSerie = tabla1(2)
Me.PPatrón = tabla1(4)
Set tabla2 = DB.OpenRecordset("Inventario de Patrones")
tabla2.Index = "primarykey"
tabla2.Seek "=", Me.PSerie
Me.PDesc = tabla2(2)
Me.PMarca = tabla2(3)
Me.PModelo = tabla2(4)
Me.Procedi = tabla2(5)
'Patrón con el que fué calibrado el patrón.
Set tabla3 = DB.OpenRecordset("Patrones")
tabla3.Index = "primarykey"
tabla3.Seek "=", Me.PPatrón
Me.PPSerie = tabla3(2)
Set tabla4 = DB.OpenRecordset("Inventario de Patrones")
tabla4.Index = "primarykey"
tabla4.Seek "=", Me.PPSerie
Me.PPDesc = tabla4(2)
Set tabla5 = DB.OpenRecordset("Empleados")
tabla5.Index = "primarykey"
tabla5.Seek "=", Me.calibró
Me.NCalibró = tabla5(1)
Me.PCalibró = tabla5(2)
tabla5.Seek "=", Me.aprobó
Me.NAprobó = tabla5(1)
Me.PAprobó = tabla5(2)
End Sub
Esto funciona en forma local, pero al vincular con tablas SQL me envía el mensaje:
"Se ha producido el error '3622' en tiempo de ejecución:
Debe usar la opción dbSeeChanges con OpenRecordset al tener acceso a una tabla SQLServer que tenga una columna IDENTITY."
Esto ya lo he resuelto haciendo lo siguiente:
Set tabla6 = DB.OpenRecordset("Clientes", , dbSeeChanges)
Ayer funcionó pero ahora no, ¿no se que pasa?
Pero después me dice de las asignaciones que el objeto no admite la propiedad, y de ahí en adelante no se como hacerle. Si me pudieras orientar con un ejemplo o con uno de tus útiles consejos.
Respuesta
1
A ver la constante dbSeeChanges, es para te coloca la definición de access:
"Genera un error en tiempo de ejecución si otro usuario está cambiando los datos que usted está modificando.(Sólo en objetos Recordset de tipo Snapshot de Microsoft Jet). Esto es útil en aplicaciones donde varios usuarios tiene acceso de lectura/escritura simultáneo a los mismos datos."
Bueno la verdad es que no se porque debes trabajar con los Indices... me gustaría que me explicaras un poquito más esta parte:
Aunque en espacios de sqlserver lo mejor es trabajar con arquitectura ADO... en vez de dao...
Att:telemaco
Si mira, lo que pasa es que por simplicidad he puesto en una tabla objetivo varias cosas, por ejemplo:
Clientes: Id, Razón social, Dirección, etc.
Entonces en la tabla objetivo (llamada Informe) solamente manejo el ID, para este caso. Bueno entonces a la hora de imprimirlo debo recuperar el resto de la información (Razón social, Dirección, etc.)
Bueno sabemos que puede haber más de un camino para resolver un problema, Acepto ideas.
Y de la misma cosa, sabrás cual referencia a biblioteca o colección contiene el objeto Database y Databases.
Saludos.
Si es así de sencillo como lo planteas, simplemente debes hacer una consulta y colocarlo en un recordset, por ejemplo cuando necesitas manipular más de una tabla y devolver registros...
Si necesitas varias tablas puedes trabajar con varios recordset y abrirlos y manipularlos al mismo tiempo, ahora si necesitas buscar en otra tabla según un dato de la primera, entonces realiza una consulta con condición:
*********************
Dim RegCliente as Dao.Recordset
SQL = "SELECT * FROM CLIENTES WHERE CLIENTE = '" & Me.Cliente & "';"
Set RegCliente = CurrentDB.OpenRecordset(SQL)
****************
Y no necesitas un objeto Table, ni trabajar con indices ni el método Seek...
RegCleinte te contendrá los datos que satisfagan la condición.
Ahora para poder trabajar con esta referencia debes entrar al código, ir al menu Herramientas, luego has click en referencias y busca "Microsoft Dao 3.6 Object Library"
Esa es la referencia que necesitas, lógicamente la version dependerá del access que tengas porque puede ser que en vez de la 3.6, tengas la 3.5, pera esa te sirve...
No se si te confundí,. Pero esta forma es más corta y más sencilla, si necesitas hacer consultas para pagarla al código, hágala donde esta la base de datos, si es en sqlserver, haz una vista doden te devuelva lo que necesites...
No se si te confundí... pero avisame te sigo ayudando...
Att:telemaco

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas