¿Modificar registros de consultas de sql desde DAO?

Estoy utilizando VB6. Uso controles y objetos Dao (control data y objetos database/recordset) para conectarme a sql server2000.
¿Mi pregunta es si puedo abrir una consulta y hacer modificaciones en ella?
Por lo que vi, puedo hacer :
data.recordsource = "C_consulta1"
Y así me la abre estáticamente, es decir, puedo ver sus datos en un dbgrid, por ejemplo, pero no puedo modificarlos.
¿Existe alguna forma de hacer que la consulta sea de acceso dinámico para que pueda editar sus datos como si fuera una tabla o todo esto es una limitación de Dao?
Digo lo de limitación, porque con el control RDO o ADO, si que nos podemos conectar a la consulta y realizar cambios en los registros de ella.
Un saludo y gracias por atenderme.
Necesito saber si hay alguien que sepa sobre el tema para intercambiar impresiones y saber si puedo optar por otro método.
Chao.

1 respuesta

Respuesta
1
Por lo que se, si suponemos que dispones de un objeto DataBase, podemos hacer así
Set Data.RecordSource=DataBase.OpenRecordSet(SQL,dbOpenDynaset)
También puedes poner dbOpenDynamic.
Sin embargo, DAO es la cosa más lenta y tediosa que Microsoft ha fabricado nunca para manejar bases de datos, por lo que está en desuso e incluso en muchas empresas prohíben su uso a los programadores.
ADO tiene mucho soporte, y salen continuas actualizaciones. Visual Basic funciona de maravilla con él y es mucho más rápido, entre otras ventajas. Te puedo decir que no hay nada que puedas hacer con DAO que no puedas hacer también con ADO.
Buenas :
Acabo de probar lo que me mandaste pero no funciona.
A lo mejor lo entendí mal, no se.
Yo utilizo :
Dim z As Database
Set z = OpenDatabase("", False, False, "ODBC;DRIVER=SQL Server;Trusted_Connection=No;UID=sa;PWD=h;Database=gestion1_2002;QueryLogTime=0;WSID=mipc;APP=Data_Access97_SQLServer2000;Server=servidor")
Set data.RecordSource = z.OpenRecordset("select * from dbo.c_telefonos", dbOpenDynaset)
Mandame un ejemplo si puedes para ver si es así o no.
Gracias por contestar . Un saludo
¿Falla al conectar a la base de datos o al pedir el recordset? ¿Qué error te da?
¿No tienes una conexión a la base de datos ya creada?
Buenas :
Conectar conecta bien.
Falla al darle el recorset (en el caso del objeto) o al establecerle el recordsource (en el caso del control).
Da este error :
La operación debe usar una consulta actualizable.
Gracias por interesarse. Un saludo
Con esto a mí me funciona (uso la base de datos de ejemplo del Visual Studio):
Dim rs As Recordset
Set db = OpenDatabase("C:\Archivos de programa\Microsoft Visual Studio\VB98\Nwind.mdb", False, False)
Set rs = db.OpenRecordset("Clientes", dbOpenDynaset)
Set Data1.Recordset = rs
Set rs = Nothing
El DBGrid está asociado al Data1, y me permite editar registros, o lo que quiera.
Buenas :
Aun no lo probé pero se que va a funcionar, porque bds en access (tato en 97 como en 2000) se pueden modificar los datos de las consultas.
Yo quería saber como seria con sql server a través de Dao. Si es que se puede hacer.
A ver si me puede echar un cable. Gracias.
En espacios de trabajo ODBCDirect (como el caso de SQL Server), los recordsets se crean por defecto con el tipo de bloqueo dbReadOnly. Para crear un Recordset que permita actualizaciones tendrías que hacer, por ejemplo:
Set data.RecordSource = z.OpenRecordset("select * from dbo.c_telefonos", dbOpenDynaset,,dbOptimistic)
Creo que ahí debe estar el problema.
Buenas:
Pues sigue sin funcionar. Adapte el código que me mandaste porque este, tal cual esta, la sintaxis no es correcta.
Aun no le encontré solución. Si es q la hay.
Lo + practico que estoy haciendo es sustituir esa consulta por el contenido de esta. De este modo, la consulta ya no me hace falta en el caso de abrirla para editar sus datos.
A ver si aun hay forma de que me puedas echar un cable.
Ante todo, gracias por contestar.
Un saludo
Lo único que se mo ocurre es que uses el tipo de cursor dbOpenDynamic, aunque teóricamente tanto éste como dbOpenDynaset deberían ser actualizables.
Siento no poder ayudarte más.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas