Foros del Web » Soporte técnico » Ofimática »

Buscar 2 campos en una tabla antes de cargarlos (acces)

Estas en el tema de Buscar 2 campos en una tabla antes de cargarlos (acces) en el foro de Ofimática en Foros del Web. Hola amigos. mi consulta es la siguiente: tengo un formulario de access que al momento de cargar un campo monto (despues de actualizar ) va ...
  #1 (permalink)  
Antiguo 25/06/2015, 08:49
 
Fecha de Ingreso: septiembre-2005
Mensajes: 80
Antigüedad: 19 años, 3 meses
Puntos: 0
Información Buscar 2 campos en una tabla antes de cargarlos (acces)

Hola amigos. mi consulta es la siguiente: tengo un formulario de access que al momento de cargar un campo monto (despues de actualizar ) va buscando en una tabla que se llama facturas si el valor del campo del formulario coincide con el valor del campo monto de esa tabla y tambien quiero que haga lo mismo con el campo factura de la misma tabla, pero me sale un error que me dice "no coinciden los tipos". y si a esta linea
Código:
ValorB = DLookup("[monto]", "factura", "[monto]=" & ValorA And "[factura]='" & ValorC & " ' ")
la pongo asi sin el and final y la hago doble es decir almaceno en otra variable el campo factura y desp pregunto si existe. me sale el cartel q encontro los campos pero son de dos registros distintos y eso no sirve como hago. Espero haber sido claro


Código:
Private Sub monto_AfterUpdate()

Dim ValorA, ValorB, ValorC, ValorD As Variant
'Dim idf, idm

'ValorA = Me.monto.Value
ValorA = monto.Value
ValorC = factura.Value

If IsNull(ValorA) Then Exit Sub

ValorB = DLookup("[monto]", "factura", "[monto]=" & ValorA And "[factura]='" & ValorC & " ' ")
'ValorB = DLookup("[monto]", "factura", "[monto]=" & ValorA And "[factura]='" & ValorC & " ' ")
'ValorD = DLookup("[factura]", "factura", "[factura]='" & ValorC & " ' ")
'idf = idexpediente
'idm = idexpediente


If ValorB = ValorA Then


MsgBox "El valor introducido ya existe, consulte por esta factura ", vbInformation, "AVISO"
'MsgBox "el id de factura es: " & idf





'Me.monto.Value = Null
Me.monto.SetFocus
Me.factura.SetFocus
End If
  #2 (permalink)  
Antiguo 30/06/2015, 08:18
 
Fecha de Ingreso: septiembre-2005
Mensajes: 80
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Buscar 2 campos en una tabla antes de cargarlos (acces)

se entendio mi pregunta, sino la reformulo, pero necesitaria alguna respuesta
  #3 (permalink)  
Antiguo 30/06/2015, 23:08
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Buscar 2 campos en una tabla antes de cargarlos (acces)

No estás usando correctamente las comillas, el AND está fuera, te falta & para concatenar y te sobra un espacio en blanco para el valor de factura:

Código vb:
Ver original
  1. ValorB = DLookup("[monto]", "factura",  "[monto]=" & ValorA & " And [factura]='" & ValorC & "'"

Con eso ya debería funcionar.

Por cierto, este tipo de errores es muy común cuando concatenas varios datos y se incluyen comillas (dobles o sencillas) en la cadena. Te sugiero copiar y usar esta función: http://stackoverflow.com/questions/1...nswer-17233834

Tu código quedaría más o menos así:

Código vb:
Ver original
  1. condicion = printf("[monto]={0} And [factura]='{1}'", ValorA, ValorC)
  2. ValorB = DLookup("[monto]", "factura", condicion)

Puedes ahorrarte la variable condicion, pero depende de gustos y a mí me parece más legible.
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 02/07/2015, 09:24
 
Fecha de Ingreso: septiembre-2005
Mensajes: 80
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Buscar 2 campos en una tabla antes de cargarlos (acces)

Mu bueno triby me funciono tu respuesta y ademas mucho mas legible!!. Ahora tengo otro error que es cuando en el campo monto se ingresan valores decimales (con coma!! Ej 32.54 ) me dice asi "Error de sintaxis(coma) en la expresion de consulta " y me señala en la depuracion
Código:
ValorB = DLookup("[monto]", "factura", condicion)
supongo que debe ser que se estan evaluando la variable como de tipo texto y no como numerico o al reves, no?? Bueno como soluciono esto, vuelvo a poner el codigo por las dudas. Gracias

Código:
Private Sub monto_AfterUpdate()

Dim ValorA, ValorB, ValorC, ValorD As Variant



ValorA = monto.Value
ValorC = factura.Value

If IsNull(ValorA) Then Exit Sub


    condicion = printf("[monto]={0} And [factura]='{1}'", ValorA, ValorC)
    ValorB = DLookup("[monto]", "factura", condicion)



If ValorB = ValorA Then


MsgBox "El valor introducido ya existe, consulte por esta factura ", vbInformation, "AVISO"



Me.monto.SetFocus
Me.factura.SetFocus
End If

End Sub


Public Function printf(mask As String, ParamArray tokens()) As String
    Dim i As Long
    For i = 0 To UBound(tokens)
        mask = Replace$(mask, "{" & i & "}", tokens(i))
    Next
    printf = mask
End Function
  #5 (permalink)  
Antiguo 02/07/2015, 15:55
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Buscar 2 campos en una tabla antes de cargarlos (acces)

Me ha pasado muchas veces que el formato de número incluye coma para separar decimales y ocasiona muchos problemas; lo más fácil sería usar format para forzar el formato adecuado:

Código vb:
Ver original
  1. condicion = printf("[monto]={0} And [factura]='{1}'", format(ValorA, "#0.00"), ValorC)
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 03/07/2015, 06:24
 
Fecha de Ingreso: septiembre-2005
Mensajes: 80
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Buscar 2 campos en una tabla antes de cargarlos (acces)

que desilusion!! yo estaba seguro que la solucion de triby iba a funcionar, pero sigue tirando el mismo error. No sera que
Código:
 
ValorB = DLookup("[monto]", "factura", condicion)
en esta linea se almacena en la variable ValorB 2 valores, es decir 2 campos de un registro de la tabla factura y cuando pasa a la siguiente linea
Código:
condicion = printf("[monto]={0} And [factura]='{1}'", format(ValorA, "#0.00"), ValorC)
. o algo q tenga q ver con el formato numerico de windows?? pregunto
  #7 (permalink)  
Antiguo 17/07/2015, 09:02
 
Fecha de Ingreso: septiembre-2005
Mensajes: 80
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Buscar 2 campos en una tabla antes de cargarlos (acces)

Alguna otra idea??
  #8 (permalink)  
Antiguo 17/07/2015, 09:56
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Buscar 2 campos en una tabla antes de cargarlos (acces)

Qué obtienes si muestrás la variable condicion en un msgbox?
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 20/07/2015, 07:28
 
Fecha de Ingreso: septiembre-2005
Mensajes: 80
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Buscar 2 campos en una tabla antes de cargarlos (acces)

Hola triby, mira tarde en constestar xq estuve complicado con otras cosas y ademas se me esta embarullando la mente ya con esto, pongo todas las combinaciones de codigo y lo que me sale
1)si ingreso una factura + un monto ya ingresado en un mismo registr de la la tabla facturas Ej: fact 589; $231 sale joya, si muestro la var condicion en un msgbox sale vacio pero me avisa q la factura ingresada ya esta cargada en otro msgbox. El tema es que si po Ej fact 589; $231.40 ya tira error diciendo "error de sintaxis(coma) en la expresion de consulta 'monto=231,40 And factura=589" este o no ingresada esa factura da ese error.

Código:
  
condicion = printf("[monto]={0} And [factura]='{1}'", ValorA, ValorC)
    ValorB = DLookup("[monto]", "factura", condicion)
2) si ahora le agrego la solucion de agregar esto
Código:
condicion = printf("[monto]={0} And [factura]='{1}'", format(ValorA, "#0.00"), ValorC)
    ValorB = DLookup("[monto]", "factura", condicion)
ahora me da el mismo error q en la opcion 1) o sea "error de sintaxis(coma) en la expresion de consulta 'monto=231,40 And factura=589" y peor aun porque aunque no exista el registro igual tira ese error.
  #10 (permalink)  
Antiguo 20/07/2015, 14:49
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Buscar 2 campos en una tabla antes de cargarlos (acces)

El problema sigue siendo el formato numérico, aparece una coma para separar los decimales. Si no funciona con format(), entonces prueba tratándolo como cadena, reemplazando la coma por un punto:

Código PHP:
Ver original
  1. ValorA = replace(ValorA, ",", ".")
__________________
- León, Guanajuato
- GV-Foto
  #11 (permalink)  
Antiguo 21/07/2015, 09:18
 
Fecha de Ingreso: septiembre-2005
Mensajes: 80
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Buscar 2 campos en una tabla antes de cargarlos (acces)

Te pido disculpas triby por no entender, pero esa linea
Código:
ValorA = replace(ValorA, ",", ".")
donde va?? dentro de condicion?? Por otro lado agregue una coma en la funcion format en esta linea
Código:
condicion = printf("[monto]={0} And [factura]='{1}'", format(ValorA, "#0.00"), ValorC)
es decir
Código:
condicion = printf("[monto]={0} And [factura]='{1}'", format(ValorA, "#0,00"), ValorC)
es decir ya no me sale error pero tampoco funciona porque al ingresar a proposito 2 facturas con un importe con decimales no entraal if del msgbox, en cambio si ingreso una factura con un importe con valores enteros sì me avisa. Ya estamos mas cerca!!
  #12 (permalink)  
Antiguo 21/07/2015, 11:30
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Buscar 2 campos en una tabla antes de cargarlos (acces)

Código vb:
Ver original
  1. ' Reemplazas la coma por punto
  2. ValorA = replace(ValorA, ",", ".")
  3.  
  4. ' Creas la condición
  5. condicion = printf("[monto]={0} And [factura]='{1}'", ValorA, ValorC)

Suponiendo que ValorA esté siendo tratado como string, ya no deberías tener mayor problema.
__________________
- León, Guanajuato
- GV-Foto
  #13 (permalink)  
Antiguo 22/07/2015, 08:00
 
Fecha de Ingreso: septiembre-2005
Mensajes: 80
Antigüedad: 19 años, 3 meses
Puntos: 0
Exclamación Respuesta: Buscar 2 campos en una tabla antes de cargarlos (acces)

Debo ser medio bobo pero no funca con las ultimas modificaciones, ya no salen errores pero ahora no entra al if

Código:
Dim ValorA, ValorB, ValorC, ValorD As Variant

Dim aver As Variant

aver = condicion

ValorA = monto.Value
ValorC = factura.Value

If IsNull(ValorA) Then Exit Sub

   ValorA = Replace(ValorA, ",", ".")
   condicion = printf("[monto]={0} And [factura]='{1}'", ValorA, ValorC)
  
    ValorB = DLookup("[monto]", "factura", condicion)

If ValorB = ValorA Then

MsgBox aver, vbInformation
MsgBox "El valor introducido ya existe, consulte por esta factura ", vbInformation, "AVISO"

Me.monto.SetFocus
Me.factura.SetFocus
End If
resubo todo el codigo

Etiquetas: access, duplicado, registros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:26.