[Vb6][Access] Ayuda con consulta a BD.

Iniciado por FranciskoAsdf, 5 Febrero 2014, 22:51 PM

0 Miembros y 1 Visitante están viendo este tema.

FranciskoAsdf

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

Código (vb) [Seleccionar]

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!!

Asdf debería ser algún tipo de función.

HdM

Hola.

¿Por qué no modificas la consulta para que busque en esos dos campos a la vez?

Código (vb) [Seleccionar]
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.

- Nice to see you again -

FranciskoAsdf

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!
Asdf debería ser algún tipo de función.

1mpuls0

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

Código (vbnet) [Seleccionar]
mirec.Open "SELECT * FROM CllDB WHERE material = '" & (MaterialSAP) & "' OR material = '" & MaterialSap & "'", mibd, adOpenKeyset, adLockOptimistic
abc

FranciskoAsdf

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


Código (vb) [Seleccionar]

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
Asdf debería ser algún tipo de función.