Hola a todos, saludos;
He venido a molestar de nuevo, pero es que en verdad no se me da lo de las consultas xD, es por eso que he venido a solicitar vuestra ayuda :D!!
Lo que quiero hacer es lo siguiente,
Tengo una base de datos en Access (*.mdb) en la que tengo 3 columnas donde esta la información que quiero rescatar, las columnas son las siguientes y se componen de los siguientes datos. (obviamente no los escribiré todos o me faltaría foro xD)
Material Des_Material EAN
30201 PAN CORRIENTE KILO 30201
1342 ABASTERO VACUNO NACI KG EAN_NOT_FOUND
1364 ABASTERO VACUNO CAT U GRANEL 1 KG 87168
La tabla se compone de esa forma, hay Materiales que son iguales a los EAN y otros no, y hay EAN en donde no hay datos pero se representan como "EAN_NOT_FOUND" (para no dejar el espacio en blanco)
Lo que hago yo en el programa es ingresar un numero (Material o EAN) en un InputBox y ahi me busca el material con la siguiente consulta
MaterialSAP = InputBox("Ingrese Material SAP", "Ingreso Mermas")
mirec.Open "SELECT * FROM CllDB WHERE material = " & (MaterialSAP) & " ", mibd, adOpenKeyset, adLockOptimistic
If mirec.RecordCount > 0 Then ' verifico si encontro registro
des_material.ForeColor = &H8000& ' cambio el color de la letra si lo encontro
des_material.Caption = mirec!des_material ' muestro la descripcion del material en el label des_material
mirec.Close
Else
If mirec.RecordCount = 0 Then ' si no encontro nada
des_material.ForeColor = &HFF& ' cambio el color a rojo
des_material.Caption = "MATERIAL NO ENCONTRADO" ' y muestro esto.
mirec.Close
End If
End If
Si encontró el producto, me muestra el nombre del material (des_Material) y si no, muestra "MATERIAL NO ENCONTRADO".
Pero ahora si, lo que necesito es lo siguiente (es un poco complicado de explicar).
Por ejemplo, si yo ingreso el siguiente numero: 87168 que me muestre el material 1364 y la descripción del material, pero si ingreso un numero y no esta en la columna EAN que busque en la columna "Material" y muestre el valor encontrado, pero si no existe en ninguna de las dos columnas que muestre "material no encontrado" y que la variable (MaterialSAP) quede con el valor ingresado.
Se entiende? xD, en verdad tengo la idea en mi mente, pero no se como llevarla a consulta, ya que como dije mas arriba soy realmente malo para las consultas complicadas xD!!. Es por eso que he venido aca a pedir ayuda, a ver si a alguien se le ocurre algo :D!!..
Eso, espero algun alma bondadosa me pueda ayudar con este tema que me esta quebrado la cabeza xD!
Saludos, y gracias de ante mano!!
Hola.
¿Por qué no modificas la consulta para que busque en esos dos campos a la vez?
mirec.Open "SELECT * FROM CllDB WHERE ean = '" & MaterialSAP & "' OR material = " & MaterialSap , mibd, adOpenKeyset, adLockOptimistic
¿O es que un mismo valor puede darse para materiales diferentes en esos campos?
Saludos.
ninguno de los valores en las columnas se repite, ni material, ni des_material ni EAN, el tema es que necesito que si ingreso un valor que es igual en la columna EAN, tome el valor de la columna material y guarde ese valor.
probé la consulta pero me dice : "no se puede usar la conexión para realizar esta operación . esta cerrada o no es válida en este contexto"
Saludos!
Cita de: Francisasdasd en 7 Febrero 2014, 16:40 PM
ninguno de los valores en las columnas se repite, ni material, ni des_material ni EAN, el tema es que necesito que si ingreso un valor que es igual en la columna EAN, tome el valor de la columna material y guarde ese valor.
probé la consulta pero me dice : "no se puede usar la conexión para realizar esta operación . esta cerrada o no es válida en este contexto"
Saludos!
A qué te refieres con que guarde ese valor???, a que lo guarde en la base de datos si no existe? o.O
La consulta seguramente no te la ejecuta porque le faltan comillas simples después del OR
mirec.Open "SELECT * FROM CllDB WHERE material = '" & (MaterialSAP) & "' OR material = '" & MaterialSap & "'", mibd, adOpenKeyset, adLockOptimistic
A lo que me refiero con "que guarde ese valor" es que si encuentra el valor que ingrese en el inputbox en la columna EAN tome el valor que hay en la columna material. xD
EDITO:
Gracias por la consulta a ambos!, me funciono perfecto!!, no puedo creer que la solución haya sido solo un "OR" xD!!.
De igual manera ya se me había ocurrido una "solución", bastante engorrosa a mi gusto (y al de todos xD).
Obviamente me quedo con la de uds !!!..
Esta era mi solucion xD
MaterialSAP = InputBox("Ingrese Material SAP", "Ingreso Mermas")
'mirec.Open "SELECT * FROM CllDB WHERE material = " & (MaterialSAP) & " ", mibd, adOpenKeyset, adLockOptimistic
mirec.Open "SELECT * FROM CLLDB WHERE EAN = '" & (MaterialSAP) & "' ", mibd, adOpenKeyset, adLockOptimistic
If mirec.RecordCount > 0 Then
des_material.ForeColor = &H8000&
des_material.Caption = mirec!des_material
'Label6.Caption = mirec!material
'MaterialSAP = Label6.Caption
MaterialSAP = mirec!material
mirec.Close
Else
If mirec.RecordCount = 0 Then
des_material.ForeColor = &HFF&
des_material.Caption = "MATERIAL NO ENCONTRADO"
mirec.Close
End If
End If
If des_material.Caption = "MATERIAL NO ENCONTRADO" Then
mirec.Open "SELECT * FROM CllDB WHERE material = " & (MaterialSAP) & " ", mibd, adOpenKeyset, adLockOptimistic
If mirec.RecordCount > 0 Then
des_material.ForeColor = &H8000&
des_material.Caption = mirec!des_material
'Label6.Caption = mirec!material
mirec.Close
Else
If mirec.RecordCount = 0 Then
des_material.ForeColor = &HFF&
des_material.Caption = "MATERIAL NO ENCONTRADO"
mirec.Close
End If
End If
End If