Tengo un problema con respecto a una ventana emergente "Conflicto de escritura " con tres opciones


Esta ventana emergente me aparece cuando intento ingresar un nuevo registro, estas son las líneas de código en una textbox "No me aparece cuando quito las líneas de código":

Private Sub Texto61_GotFocus()
If Not IsNull(Texto55.Value = " ") Then
Dim c1 As String
c1 = DLookup("[nombre]", "[Area]", "idarea=" & Texto55)
Texto61.Value = c1
End If
End Sub

"No puedo quitar las lineas de código porqué funcionan bien y además las necesito, lo que deseo es que no me aparezca dicha ventana, ya he intentado desactivando 'Modificar/Buscar', y también con el DoCmd.SetWarnings False",
y sin el código no me aparece dicha ventana no sé que hacer cualquier opinión es de gran ayuda Muchas Gracias por su tiempo!

1 respuesta

Respuesta
1

Prueba así:

Private Sub Texto61_GotFocus()
If Not Nz(Texto55.Value,"") = "" Then
Dim c1 As String
c1 = DLookup("[nombre]", "[Area]", "idarea=" & Texto55)
Texto61.Value = c1
End If
End Sub

O sin el Not, si lo que quieres es que Texto61 se complete cuando ese campo está "en blanco"

Primero que todo Muchas Gracias por Responder, pero tu respuesta no me soluciona dicha ventana emergente... lo que yo quiero hacer es:

Que una caja de texto2 ejecute una consulta al recibir el foco dependiendo que información exista en el texto1 y rellene el texto2 con el resultado de la consulta
Ejemplo:
Texto1: 1
''''al recibir el focus el Texto2 ejecute la consulta y asigne el resultado a la caja de texto2'''''
Texto2: Servicios

Y con este código, que contiene el Dlookup me funciono... pero me saca dicha ventana emergente la cual yo deseo que no aparezca 

Private Sub Texto61_GotFocus()
If Not IsNull(Texto55.Value = " ") Then
Dim c1 As String
c1 = DLookup("[nombre]", "[Area]", "idarea=" & Texto55)
Texto61.Value = c1
End If
End Sub

Creo que ya sé dónde está el problema:

Si el formulario trabaja sobre la tabla "Area", y la coincidencia que encuentra el DLookup es el registro nuevo que estás añadiendo, te mostrará ese mensaje de aviso.

La solución sería que guardases el registro antes del DLoolkup, con un Me. Refresh o DoCmd. RunCommand acCmdSaveRecord

Lo que no me queda claro es qué pretendes con la condición del If (Not IsNull(Texto55.Value = " ")...).

La función IsNull devuelve Verdadero o Falso si lo que le pasas como parámetro es Nulo o no, pero lo que tú le pasas (Texto55= " ") no va a ser nunca nulo, sino que será Verdadero si Texto55= " " o Falso en caso contrario...

Hola Sveinbjorn El Rojo Nuevamente Muchas Gracias por responder:
La tabla "Area" está relacionada con una tabla "Empleados" las cuales están unidas por un campo "idarea"; en "Area" el campo "idarea" es primary key y en "Empleados" Foreign key y lo que deseo hacer con el "If" es que en el momento que la texbox "Texto61" reciba el "Focus" pregunte si la textbox "Texto55" tiene "Algo", y sí es diferente de vacío "Nulo" ejecute dichas lineas de código rellenando el "Texto61"...

Psd: "La ventana emergente 'Conflicto de Escritura' me tiene loco, y no deja de salir"  :'C 
Muchísimas Gracias por tú tiempo, Espero pronta respuesta :)

Entonces te fallan un par de conceptos:

No es lo mismo un valor Nulo que una cadena vacía ("" => Cadena de longitud 0), y menos aún que " " que es una cadena con un espacio en blanco (cadena de longitud 1)

Si lo que quieres es saber si el campo contiene un valor nulo, la expresión correcta sería:

If IsNull(Texto55) Then ... 

Pero no te soluciona el problema del todo, pues si escribes algo en Texto55 y lo borras, ya no te funcionará, pues ya no contendrá un valor Nulo, sino una cadena Vacía. En este caso has de usar:

If Texto55="" Then ... 

Obviamente siempre puedes combinar las dos:

If IsNull(Texto55) Or Texto55="" Then...

o usar la función Nz para tratar los valores nulos y darles otro valor:

If Nz(Texto55,"")="" Then...

Con esto, a lo que voy es que si quieres saber si hay "algo" escrito en Texto55, deberías usar:

If Nz(Texto55,"")<>""  Then

¿Probaste lo que te comentaba de forzar el guardado de los datos? Si te sigue sin ir, necesitaría ver una copia de tu BD, sin datos "personales", con las dos tablas y el formulario, porque hay algo que no me estás contando y parece ser la causa del problema. Puedes subirla a dropbox o similar y ponerme aquí el enlace de descarga o mandármela comprimida a: [email protected]

Buenos días, espero estés bien
anteriormente he intentado con el "DoCmd.RunCommand acCmdSaveRecord"
y tampoco a funcionado...
Ya envíe la BD a [email protected]
La he subido a Mega:
https://mega.nz/#!gww2hbKZ!JvZxTmkkn57PTpZPWjaxiMiA5wAfADzDIznnn-E1v1g 
Muchas gracias por tú interés
Saludos! 

Sin ver tu BD, para poder corroborarlo, el problema me parece que está en el recordsource que le asignas al formulario en el evento Form_Load, al tratarse de una consulta Left Join, pero como te digo, sin ver la BD para poderla analizar, no te puedo decir más...

Hola, no entiendo porqué sería el recordsource (Left Join) si la consulta esta bien realizada, que me recomiendas en estos caso ?
Muchas Gracias :)

Pues no lo sé sin ver la BD... Tu cuando tienes un problema con un coche no le llevas una foto del motor al mecánico y le dices: mi coche hace un ruido, este es su motor, dame una solución...

El aviso que te sale indica que estás modificando el mismo registro al mismo tiempo desde dos sitios distintos (o lo están haciendo dos usuarios al mismo tiempo, en caso de que sea multiusuario, que no lo creo)

El problema de la consulta Left Join, es que igual es de sólo lectura, lo puedes comprobar fácilmente construyendo una consulta con esa sql y miras si te deja modificar los valores.

Perdón por no enviarte la BD... pero los datos son confidenciales por lo cual tengo que tener demasiado cuidado con la información... he cambiado el Left Join por Inner Join y continua yo he echo varios debug para poder encontrar desde dónde sale dicha Ventana, sin embargo no he podido saber de donde sale :'c
Saludos!

Puedes hacer una cosa: haz una copia de la BD, borra todos los datos, metes un par de registros inventados y me la mandas. Recuerda que sólo me hace falta la parte que influye en tu consulta (tablas, formulario...)

Intenté recrear tu BD, con las imágenes que me enviaste, pero no logro que me salga ese error. Lo que sí observo, es que al añadir un nuevo registro, una vez que meto el area (Texto55) y quiero cambiarla no me deja. Tengo que cerrar y abrir el formulario o cambiar de registro y volver para que me deje.

http://www.filebig.net/files/bKqcm85xFN 

Te planteo dos alternativas de trabajo:

1º/ Que en vez de programar el evento Texto61_GotFocus, programes el evento Texto55_AfterUpdate, de esta manera:

Private Sub Texto55_AfterUpdate()
If Not Isnull(me.Texto55) Or Nz(Me.texto55,-1)<>-1 Or Me.Texto55<>"" Then
Me.Texto61=DLookup("[nombre]", "[Area]", "idarea=" & Me.Texto55)
End If
End Sub

2º/ Que el formulario lo hagas directamente sobre la tabla empleados, dejando el cuadro de texto Texto61 como independiente (creo que es la solución a  tu problema):

En Form_Load, cambias el Recordsource por este:

RecordSource = "SELECT Empleado.CEDULA as Cedula, Empleado.NOMBRE as NombreCompleto , Empleado.idarea as Area From  EMPLEADOS"

y quitas esta linea: Texto61.ControlSource = "NombreArea"

El resto lo dejas como está, aunque yo te recomendaría cambiar el código del Texto61 GotFocus a Texto55_AfterUpdate.

Prueba y me cuentas.

Hola Amigo, Espero estés bien
El consejo del Código de Texto55_AfterUpdate() lo he tomado y me funciona correctamente, y lo he aplicado.
Una pregunta ¿ Esté Texto61.ControlSource = "NombreArea" es necesario para poder que llame los registros? Es más tu lo pones en el Ejemplo que me enviaste...

Ya he montado la copia a Mega:
https://mega.co.nz/#!gw5zERLD!Qqql6EH1UteuXP-anxj1fay0BN5SWIQG8FKKhIgVeG8
Pero no sé si te funcione porqué los datos son provenientes de SQL Server,
Espero puedas ayudar brindándome una solución y si puedes, y tienes tiempo de intentar ordenar el código o en pocas palabras "Recrear el código" como tú pienses que puede ser la forma correcta para dar solución a dicha ventana emergente...
Nuevamente Mucha gracias por tu interés y por ser una gran persona.
 

El ejemplo que te mandé era un intento de recrear tu problema, no tiene nada que ver con las opciones que te planteé a continuación.

Si optas por la solución 2, dejar el cuadro de texto "independiente", la linea que le asigna el controlsource sobra.

Si tu BD toma datos de SQL server, no voy poder hacer nada con ella, pues no tengo la base de la que toma los datos.

¿Sigues teniendo el problema de la ventana si optas por la solución 1 o la 2?

La primera opción la he aplicado, pero igual continua la ventana.
La segunda aplique pero tampoco me soluciono :'c 
Realmente estoy que lloro por esa ventana :'c

Con la copia que me mandas no tengo el problema de la ventana esa de error, por lo que sintiéndolo mucho, no te voy poder ayudar más con ese tema, porque ignoro de dónde viene el error, y por tanto cómo solucionarlo.

Te devuelvo el archivo con un par de "retoques" en el código. Hay cosas que dejé como comentario porque tal como lo mandas no sirven para nada, pero igual tienes que volver a descomentarlas si hacen referencia a otras partes de tu DB.

¡Gracias!  por tu tiempo y por mostrar interés de parte tuya, de igual manera muchísimas gracias por todo, lastimosamente no se ha podido solucionar el problema ya veré como soluciono esto, de igual manera ¡Gracias!, que estés bien :)
Saludos!

Buenos días El Rojo Espero estés bien nuevamente muchas gracias por tu interés, gracias a ello y a el ultimo código que me enviaste aplique ciertas lineas de código y me replantee muy bien que era lo que iba a hacer con dicho proyecto, y gracias a tu ayuda y a la nueva lógica que le invertí he llegado a la solución de dicha ventana emergente...

Nuevamente mil gracias, Dios te Bendiga

Gracias sigue así, Éxitos!!!

No sabes lo que me alegra saber que al final lograses solucionar el problema.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas