Tengo el siguiente problema,en una funcion access ejecuto la sentencia siguiente: DoCmd.RunSQL "SELECT CNTLCOMP.CODIGO,CNTLCOMP.FECHA_ACC FROM CNTLCOMP WHERE (((CNTLCOMP.CODIGO) =1));", -1 Mi problema es que quiero seguir trabajando utilizando el valor de el campo CNTLCOMP.FECHA_ACC que me ha devuelto la ejecucion del SQL, y no me lo premite, me dice varible erronea. Respuesta ========= La instruccion "RunSQL", solo ejecuta una orden SQL.- No puedes recoger ningun valor, ni trabajar con valores devueltos en la consulta.- Para poder trabajar con valores devueltos en consultas, necesitas tener la consulta "metida" en un RecordSet.- Prueba con esto: Dim MyBD as database Dim MyRS as RecordSet Dim MyFecha as date Set MyBd = CurrentDb 'Ahora definimos el RecordSet. Set MyRS = MyBd.OpenRecordset("SELECT CNTLCOMP.CODIGO,CNTLCOMP.FECHA_ACC FROM CNTLCOMP WHERE (((CNTLCOMP.CODIGO)=1)") MyFecha=MyRS("CNTLCOMP.FECHA_ACC") (...) Aqui ya puedes trabajar con el campo CNTLCOMP.FECHA_ACC o bien con la variable MyFecha... como gustes.- Un saludo.- Gomzky AMPLIACION DE LA RESPUESTA DEL bhuo =================================== He preparado el siguiente ejemplo para mostrarte alguno de los metodos que existen para localizar un registro dentro de una tabla. Sin duda, la respuesta de Chea es la mejor para el proposito que pretendes. No obstante expongo otras dos más, pues depende de la situacion y el entorno donde desees buscar. En concreto, en este ejemplo, estoy actuando sobre una tabla de Clientes llamada CLIENTES que tiene dos campos [NombreCliente] que es String [Id] que es Autonumerico Te lo meto en un fichero de texto y no directamente en la respuesta pues siempre se cortan lineas etc y a veces se hace dificil ver el codigo de una forma completa. Primer caso: Si deseamos saber el nombre de un cliente cuyo ID sea, por ejemplo 1 Private Sub Comando6_Click() On Error GoTo Err_Comando6_Click 'Utilizando la funcion expuesta por Chea Dim MiVariable As String If IsNull(DLookup("[NombreCliente]", "Clientes", "[ID]=1")) = False Then MiVariable = DLookup("[NombreCliente]", "Clientes", "[ID]=1") Msgbox MiVariable Else Msgbox "Registro no encontrado segun su criterio" End If Exit_Comando6_Click: Exit Sub Err_Comando6_Click: Msgbox Err.Description Resume Exit_Comando6_Click End Sub 'Este ejemplo anterior, al ser independiente del Formulario o modulo Bas 'en que realizas la llamada, lo puedes poner donde quieras y llamar a la 'tabla que quieras. 'Otro ejemplo, identico al anterior, pero utilizando Recordset. 'Le puedes utilizar en cualquier parte del codigo. Private Sub Comando8_Click() On Error GoTo Err_Comando8_Click Dim Rst As DAO.Recordset Set Rst = CurrentDb.OpenRecordset("Select Nombrecliente FROM CLientes Where ID=3") If Rst.NoMatch Then Msgbox "No hay Registros según criterio" Else Msgbox "El nombre del cliente es: " & Rst("NombreCliente") End If Rst.Close Set Rst = Nothing Exit_Comando8_Click: Exit Sub Err_Comando8_Click: Msgbox Err.Description Resume Exit_Comando8_Click End Sub 'Este ejmplo sería ya un caso particular del anterior, cuando inmersos 'en una formulario concreto, deseamos localizar un registro de dicho 'formulario que cumpla unas especificaciones concretas. 'Por eso utilizo el RecordsetClone del propio Frm 'De ahí que en mi anterior exposicion te dijera que era fundamental 'saber desde que sitio y cual, deseabamos buscar Private Sub Comando7_Click() On Error GoTo Err_Comando7_Click Dim MiRst As DAO.Recordset, QuedeseoBuscar As String Set MiRst = Me.RecordsetClone QuedeseoBuscar = "ID =2" With MiRst .FindFirst QuedeseoBuscar If .NoMatch Then Msgbox "No se encontraron registros" Else Msgbox "El nombre del cliente es: " & MiRst("Nombrecliente") End If End With MiRst.Close Set MiRst = Nothing Exit_Comando7_Click: Exit Sub Err_Comando7_Click: Msgbox Err.Description Resume Exit_Comando7_Click End Sub Los Sub les puedes poner tambien como funciones que devuelvan un String Function DameNombre() As String etc etc Salvo error u omosión, creo que cualquiera de los tres metodos están bien estructurados y pueden servirte para tus propositos. Habría que revisar un poco los procedimientos para poderles optimizar un poco más. Pero de forma resumida, pueden ilustrar bien lo que pretendes hacer.