Imprimir página | Cerrar ventana

añadir registro con ADO

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y Otros sistemas
Descripción del foro: Proyectos ADP & Sql Server, Mysql& Access, MSDE
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=79632
Fecha de impresión: 29/Febrero/2020 a las 04:20


Tema: añadir registro con ADO
Publicado por: alikant
Asunto: añadir registro con ADO
Fecha de publicación: 23/Septiembre/2014 a las 01:37
Hola a todos, soy nuevo y tengo una duda, tengo en una base de datos una tabla vinculada a un servidor AZURE, y mediante un boton de un formulario necesito añadir un registro mediante ADO a dicha tabla, lo hago asi :


Const Proveedor = "Provider=Microsoft.Jet.OLEDB.4.0;"
        Const OrigenDeDatos = "Data Source=C:\Users\Chus\Documents\Database8.accdb"
        Const CadenaDeConexion = Proveedor & OrigenDeDatos
        
        Dim ConjuntoDeRegistros As New ADODB.Recordset
        Dim Conexion As New ADODB.Connection
        
        
        
        Call Conexion.Open(CadenaDeConexion)
        Call ConjuntoDeRegistros.Open("T_Clientes", Conexion, adOpenKeyset, adLockOptimistic)
        
        ConjuntoDeRegistros.AddNew
        
        ConjuntoDeRegistros("CodigoCliente").Value = Me.IDtemp
        ConjuntoDeRegistros("Nombre").Value = Me.NombreClienteTEMP
                
                ConjuntoDeRegistros.Update
                ConjuntoDeRegistros.Close
                Conexion.Close
                
                
        Set ConjuntoDeRegistros = Nothing
        Set Conexion = Nothing


Pero me da el siguiente error :

No se pudo usar "; el archivo ya esta en uso

en la linea : Call Conexion.Open(CadenaDeConexion)

Para trabajar con ADO debo tener alguna referencia especifica ?

Si lo hago asi funciona perfectamente , pero con ADO sería lo mejor para este tipo de conexion:


Dim dbs As Database
Dim RstDestino As Recordset

Set dbs = CurrentDb  
Set RstDestino = dbs.OpenRecordset("T_Clientes")

RstDestino.AddNew 

RstDestino!CodigoCliente = Me.IDtemp
RstDestino!Nombre = Me.NombreClienteTEMP
RstDestino!Tlf1 = Me.TelefonoTEMP

RstDestino.Update 

RstDestino.Close
Set RstDestino = Nothing



Agradezco me puedan ayudar cuanto antes.





Respuestas:
Publicado por: E. Feijoo
Fecha de publicación: 23/Septiembre/2014 a las 09:15
¿Tiene que ser con ADO? ... una sentencia SQL haría lo mismo sobre esa tabla que parece estar vinculada.

Además, creo que el problema esta en que 'actualmente' debe de estar abierta en modo exclusivo (o se pretende abrir en modo exclusivo) y por ello no lo permite.


Publicado por: carlosbelmonte
Fecha de publicación: 23/Septiembre/2014 a las 10:00
Es una tabla sql vinculada en un servidor AZURE, creo haber leido en el foro que es aconsejable trabajar con ADO, pero no se exactamente cual es el codigo para añadir un registro a esa tabla.


Publicado por: alikant
Fecha de publicación: 23/Septiembre/2014 a las 10:24
A mi también me recomendaron usar ADO porque me comentaron que era un código mas estable y conectaba más rapido con la base de datos de AZURE.

He probado lo que Feijoo comenta de hacer una llamada a una consulta que ejecute el SQL y funciona bien también, pero quería probarlo con ADO.


Si alguien me puede ayudar, le doy las gracias de antemano.


Saludos


Publicado por: guarracuco
Fecha de publicación: 23/Septiembre/2014 a las 10:46
prueba con una instrucción sql insert:
conexion.execute ("insert into t_clientes(codigocliente, nombre,tlf1) select  " & Me.IDtemp & ".'" & NombreClienteTEMP& "','" & me.TelefonoTEMP & "'")


-------------
https://tucondominioaldia.net


Publicado por: guarracuco
Fecha de publicación: 23/Septiembre/2014 a las 10:53
Releyendo tu problema está en la conexión.
Falta la ruta (que creo cambias por una local por razones obvias, pero falta indicar cursor)

with conexion
    .ConnectionString = CadenaDeConexion
            .CursorLocation = adUseServer 
            .Open
end with


-------------
https://tucondominioaldia.net


Publicado por: carlosbelmonte
Fecha de publicación: 23/Septiembre/2014 a las 11:11
a que te refieres con indicar cursor ? que es el cursor ?
gracias


Publicado por: guarracuco
Fecha de publicación: 23/Septiembre/2014 a las 11:35
http://www.telecable.es/personales/jrubi/index.htm?resumen/res00790.htm

-------------
https://tucondominioaldia.net


Publicado por: carlosbelmonte
Fecha de publicación: 23/Septiembre/2014 a las 11:43
y entonces para tablas sql vinculadas que se recomienda usar para trabajar con los registros ADO o DAO ? y porque ?
Saludos


Publicado por: guarracuco
Fecha de publicación: 23/Septiembre/2014 a las 11:51
Si están vinculadas puedes insertar, editar, eliminar directamente con dao, como si fuesen locales.
Para insertar o modificar una cantidad importante es preferible hacerlo contra una conexión directa al servidor de datos.
Lo que pasa con las tablas vinculadas es que estas solicitando del servidor todos los registros de las tablas vinculadas cuando en realidad no las necesitas.
En cambio si no las vinculas y solicitas al servidor solo los registros necesarios, el tráfico por red disminuye y el rendimiento del servidor es mayor.

Pasar de un modelo al otro requiere de investigar, leer releer y paciencia; nada del otro mundo realmente.
Con ADO puedes crear recordset 'desconectados' que no es mas que almacenarlos en memoria, como un arreglo o matríz, solo que con mas funcionalidades que éstos. Una vez creado el recordset, te desconectas del servidor.


-------------
https://tucondominioaldia.net


Publicado por: alikant
Fecha de publicación: 23/Septiembre/2014 a las 11:58
Alguien podría poner un pequeño ejemplo para insertar datos mediante ADO sin tabla vinculada?


Publicado por: guarracuco
Fecha de publicación: 23/Septiembre/2014 a las 12:15
Ya está en este hilo.
1) Tienes que crear una conexión al servidor de datos
2) Ejecuta una consulta de datos anexados contra esa conexión y listo

conexion.execute cadenasql


-------------
https://tucondominioaldia.net


Publicado por: alikant
Fecha de publicación: 23/Septiembre/2014 a las 23:17
La ruta para realizar la conexión es la ruta de la base de datos en la que estoy trabajando en este momento ??
Const OrigenDeDatos = "Data Source=C:\Users\Chus\Documents\Database8.accdb"



Publicado por: guarracuco
Fecha de publicación: 24/Septiembre/2014 a las 00:33
Acabo de crear una conexion a una base de datos para probar y no encuentro problema alguno.
Const Proveedor = "Provider=Microsoft.Jet.OLEDB.4.0;"
Const OrigenDeDatos = "Data Source=C:\Users\Administrador\Documents\ControlUsuarios\usuarios_data.mdb"
Const CadenaDeConexion = Proveedor & OrigenDeDatos
Dim ConjuntoDeRegistros As New ADODB.Recordset
Dim Conexion As New ADODB.Connection
Sub conecta()
     Dim conn As New ADODB.Connection
     conn.Open CadenaDeConexion
     Set rst = conn.Execute("select top 1 [1er NOMB] from [t alumnos] order by [id alumno]")
     If Not rst.EOF Then
        Debug.Print rst(0)
     End If
     rst.Close
     conn.Close
End Sub

?Cual problema tienes?
?Activaste referencia a ADO?


-------------
https://tucondominioaldia.net


Publicado por: oceluy
Fecha de publicación: 24/Septiembre/2014 a las 11:09
Pregunta tonta,
La conexión la estás haciendo desde tu misma base de datos que contiene las tablas vinculadas, o desde otra bd que intenta acceder a la que tiene las tablas vinculadas?





Publicado por: carlosbelmonte
Fecha de publicación: 24/Septiembre/2014 a las 12:21
está poniendo :
Data Source=C:\Users\Chus\Documents\Database8.accdb

y Database8.accdb es la base de datos en la que está trabajando, y las tablas vinculadas estan en un servidor AZURE ha dicho anteriormente, osea que la tabla T_Clientes es una tabla SQL ubicada en un servidor de microsoft AZURE





Publicado por: guarracuco
Fecha de publicación: 24/Septiembre/2014 a las 12:29
Publicado originalmente por guarracuco guarracuco escribió:

Releyendo tu problema está en la conexión.
Falta la ruta (que creo cambias por una local por razones obvias, pero falta indicar cursor)

with conexion
    .ConnectionString = CadenaDeConexion
            .CursorLocation = adUseServer 
            .Open
end with


-------------
https://tucondominioaldia.net


Publicado por: carlosbelmonte
Fecha de publicación: 28/Febrero/2015 a las 01:33
OK , resuelto, era la conexion.


Publicado por: emiliove
Fecha de publicación: 28/Febrero/2015 a las 03:08
Por que quieres cerrarlo carlosbelmonte si lo inicio Alikant
 
Saludos.



Imprimir página | Cerrar ventana