** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Actualizar datos si no está incluido
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoActualizar datos si no está incluido

 Responder Responder
Autor
Mensaje
Jorge33 Ver desplegable
Habitual
Habitual


Unido: 09/Abril/2019
Localización: madrid
Estado: Sin conexión
Puntos: 58
Enlace directo a este mensaje Tema: Actualizar datos si no está incluido
    Enviado: 24/Febrero/2020 a las 12:50
Hola:
Tengo un formulario que lee los datos de una tabla y necesito que si el dato estoy intentando introducir no está en esa tabla se actualice en una segunda tabla.
He intentado hacer una consulta de no coincidentes y luego una de actualización pero no me funciona.
He intentado esto:
Dim MyVar As String
Dim MyCheck As String
MyVar = Query("Contratos nuevos").Código_contrato
MyCheck = IsNull(MyVar)
If MyCheck <> True Then:
SQL = " insert into ......"
DoCmd.RunSQL SQL  

Siendo Contratos nuevos la consulta de no coincidentes.

¿Como lo puedo hacer?

Muchas gracias
< x="0" y="0" width="99999" height="99999" id="hc_extension_off">< x="0" y="0" width="99999" height="99999" id="hc_extension_highcontrast">< x="0" y="0" width="99999" height="99999" id="hc_extension_highcontrast_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_grayscale">< x="0" y="0" width="99999" height="99999" id="hc_extension_grayscale_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert_grayscale">< x="0" y="0" width="99999" height="99999" id="hc_extension_yellow_on_black">< x="0" y="0" width="99999" height="99999" id="hc_extension_yellow_on_black_back">
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 24/Febrero/2020 a las 12:54
Hola,

MyVar = Query("Contratos nuevos").Código_contrato

¿que pretendes con esta instrucción?

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
Jorge33 Ver desplegable
Habitual
Habitual


Unido: 09/Abril/2019
Localización: madrid
Estado: Sin conexión
Puntos: 58
Enlace directo a este mensaje Enviado: 24/Febrero/2020 a las 13:11
La idea era coger el valor del campo Código_contrato de la consulta "Contratos nuevos".< x="0" y="0" width="99999" height="99999" id="hc_extension_off">< x="0" y="0" width="99999" height="99999" id="hc_extension_highcontrast">< x="0" y="0" width="99999" height="99999" id="hc_extension_highcontrast_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_grayscale">< x="0" y="0" width="99999" height="99999" id="hc_extension_grayscale_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert_grayscale">< x="0" y="0" width="99999" height="99999" id="hc_extension_yellow_on_black">< x="0" y="0" width="99999" height="99999" id="hc_extension_yellow_on_black_back">
Aprovecho para darte las gracias por la solución que diste al tema "Formulario de Inicio"que lo usé el otro día y al estar cerrado no pude darlas.

Un saludo
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 24/Febrero/2020 a las 13:39
Yo si te he entendido bien lo haria con un DLookup. Verificaria si ese dato existe en la tabla, de no existir con una consulta de datos anexados lo meteria en esa segunta tabla .

If me.nombrecampo=DLookup("nombrecampotabla","nombretabla","nombrecampotabla = ' me.nombrecampo'") then

Ejecutas consulta
End if

Algo asi, dependiendo si es texgo o numero, comillas simples o dobles..
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 24/Febrero/2020 a las 13:44
Dejando de lado que esa instrucción no creo que funcione, ese campo pueden ser n valores distintos por lo que deberias recorrer la colección de registros.

Partiendo de la base que tu consulta "Contratos nuevos" sea una consulta agrupada de los códigos de contratos nuevos, se trataría de abrir un recordset sobre esa consulta y, en cada registro, lanzar a correspondiente consulta de inserción.

Algo así (obviando declaraciones, cierres de recordset y sin, obviamente, las SQL correctas)

Set rst = CurrentDb.OpenRecordset("SELECT Código_Contrato FROM TABLA WHERE loquesea GROUP BY Código_Contrato",,dbReadOnly)
Do Until rst.EOF
  CurrentDb.Execute "INSERT INTO.....", dbFailOnError
  rst.MoveNext
Loop



Xavi, un minyó de Terrassa

Mi web
Arriba
Jorge33 Ver desplegable
Habitual
Habitual


Unido: 09/Abril/2019
Localización: madrid
Estado: Sin conexión
Puntos: 58
Enlace directo a este mensaje Enviado: 24/Febrero/2020 a las 15:01
Gracias.
Lo intentaré a ver que tal me sale.
Al ser no coincidentes creo que con que el primer valor no sea nulo sería suficiente para saber que hay al menos un valor que no está incluido.
< x="0" y="0" width="99999" height="99999" id="hc_extension_off">< x="0" y="0" width="99999" height="99999" id="hc_extension_highcontrast">< x="0" y="0" width="99999" height="99999" id="hc_extension_highcontrast_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_grayscale">< x="0" y="0" width="99999" height="99999" id="hc_extension_grayscale_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert_grayscale">< x="0" y="0" width="99999" height="99999" id="hc_extension_yellow_on_black">< x="0" y="0" width="99999" height="99999" id="hc_extension_yellow_on_black_back">
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 24/Febrero/2020 a las 17:47
Buenas.

Pues a mi asi me funciona, con el planteamiento que habia hecho. En el evento antes de actualizar.

Private Sub Texto_BeforeUpdate(Cancel As Integer)
If Me.Texto = DLookup("Texto", "Tabla1", "Texto= '" & Me.Texto & "'") Then  ' Si fuese campo numerico quitariamos las comillas simples
MsgBox "Existe"
Else
MsgBox "NO existe, lo meto en Tabla2"
DoCmd.OpenQuery "Consulta1"   'Ejecuto consulta de datos anexados
End If
End Sub


Tengo Tabla1 y Tabla2
Una consulta que anexa el datos a Tabla2 si no esta en en Tabla1 campo Texto,pillando el dato del formulario.

La consulta en vista SQL. 
INSERT INTO Tabla2 ( Texto )
SELECT [Formularios]![frmTabla1]![Texto] AS Expr1;

Campo llamado Texto en tabla y formulario frmTabla1

Por lo que entiendo esto es lo que buscas.....

Saludos




Arriba
01loko Ver desplegable
Colaborador
Colaborador


Unido: 17/Agosto/2017
Localización: Santander
Estado: Sin conexión
Puntos: 807
Enlace directo a este mensaje Enviado: 24/Febrero/2020 a las 20:53
Solo pregunto:

if dcount("campo","Tabla", "campo=" & me.cuadrodetexto)< 1 then
msgbox "no existe"
else
msgbox "existe"
end if

No funcionaria?
Recordar de que soy nuevo y estoy aprendiendo.
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 24/Febrero/2020 a las 21:32
Pues yo creo que si, mas sencillo aun.
Arriba
Jorge33 Ver desplegable
Habitual
Habitual


Unido: 09/Abril/2019
Localización: madrid
Estado: Sin conexión
Puntos: 58
Enlace directo a este mensaje Enviado: 03/Marzo/2020 a las 10:54
Hola
Gracias por la respuesta.
if dcount("campo","Tabla", "campo=" & me.cuadrodetexto)< 1 then
msgbox "no existe"
else
msgbox "existe"
end if

he intentado ejecutarlo varias veces pero no logro que funcione.

Me da la sensación de que en "& me.cuadrodetexto" hay que añadir algo más para que coja el nombre ¿puede ser?
< x="0" y="0" width="99999" height="99999" id="hc_extension_off">< x="0" y="0" width="99999" height="99999" id="hc_extension_highcontrast">< x="0" y="0" width="99999" height="99999" id="hc_extension_highcontrast_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_grayscale">< x="0" y="0" width="99999" height="99999" id="hc_extension_grayscale_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert_grayscale">< x="0" y="0" width="99999" height="99999" id="hc_extension_yellow_on_black">< x="0" y="0" width="99999" height="99999" id="hc_extension_yellow_on_black_back">
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 03/Marzo/2020 a las 11:04
Asumiendo que "campo" es alfanumérico:

if dcount("campo","Tabla", "campo='" & me.cuadrodetexto & "'")< 1 then

En rojo los cambios.

PD: un dcount se puede hacer de cualquier campo
If Dcount("*", .....
Xavi, un minyó de Terrassa

Mi web
Arriba
01loko Ver desplegable
Colaborador
Colaborador


Unido: 17/Agosto/2017
Localización: Santander
Estado: Sin conexión
Puntos: 807
Enlace directo a este mensaje Enviado: 03/Marzo/2020 a las 13:40
Xavi, eres un fenomeno... yo mirando y no entendia lo que pasaba
Recordar de que soy nuevo y estoy aprendiendo.
Arriba
Jorge33 Ver desplegable
Habitual
Habitual


Unido: 09/Abril/2019
Localización: madrid
Estado: Sin conexión
Puntos: 58
Enlace directo a este mensaje Enviado: 06/Abril/2020 a las 10:08
Funciona perfectamente.
Muchas gracias a todos.
Puede cerrarse el tema
< x="0" y="0" width="99999" height="99999" id="hc_extension_off">< x="0" y="0" width="99999" height="99999" id="hc_extension_highcontrast">< x="0" y="0" width="99999" height="99999" id="hc_extension_highcontrast_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_grayscale">< x="0" y="0" width="99999" height="99999" id="hc_extension_grayscale_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert_grayscale">< x="0" y="0" width="99999" height="99999" id="hc_extension_yellow_on_black">< x="0" y="0" width="99999" height="99999" id="hc_extension_yellow_on_black_back">
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable