Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: FranciskoAsdf en 5 Febrero 2014, 22:51 pm



Título: [Vb6][Access] Ayuda con consulta a BD.
Publicado por: FranciskoAsdf en 5 Febrero 2014, 22:51 pm
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)

Código:
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
  1. MaterialSAP = InputBox("Ingrese Material SAP", "Ingreso Mermas")
  2.  
  3.    mirec.Open "SELECT * FROM CllDB WHERE material = " & (MaterialSAP) & " ", mibd, adOpenKeyset, adLockOptimistic
  4.  
  5.    If mirec.RecordCount > 0 Then ' verifico si encontro registro
  6.        des_material.ForeColor = &H8000& ' cambio el color de la letra si lo encontro
  7.        des_material.Caption = mirec!des_material ' muestro la descripcion del material en el label des_material
  8.        mirec.Close
  9.     Else
  10.        If mirec.RecordCount = 0 Then ' si no encontro nada
  11.            des_material.ForeColor = &HFF& ' cambio el color a rojo
  12.            des_material.Caption = "MATERIAL NO ENCONTRADO" ' y muestro esto.
  13.            mirec.Close
  14.     End If
  15.    End If
  16.  

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



Título: Re: [Vb6][Access] Ayuda con consulta a BD.
Publicado por: HdM en 7 Febrero 2014, 12:19 pm
Hola.

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

Código
  1. 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.


Título: Re: [Vb6][Access] Ayuda con consulta a BD.
Publicado por: FranciskoAsdf 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!


Título: Re: [Vb6][Access] Ayuda con consulta a BD.
Publicado por: 1mpuls0 en 7 Febrero 2014, 17:48 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
  1. mirec.Open "SELECT * FROM CllDB WHERE material = '" & (MaterialSAP) & "' OR material = '" & MaterialSap & "'", mibd, adOpenKeyset, adLockOptimistic


Título: Re: [Vb6][Access] Ayuda con consulta a BD.
Publicado por: FranciskoAsdf en 7 Febrero 2014, 23:48 pm
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
  1. MaterialSAP = InputBox("Ingrese Material SAP", "Ingreso Mermas")
  2.  
  3.    'mirec.Open "SELECT * FROM CllDB WHERE material = " & (MaterialSAP) & " ", mibd, adOpenKeyset, adLockOptimistic
  4.  
  5.    mirec.Open "SELECT * FROM CLLDB WHERE EAN = '" & (MaterialSAP) & "' ", mibd, adOpenKeyset, adLockOptimistic
  6.  
  7.    If mirec.RecordCount > 0 Then
  8.        des_material.ForeColor = &H8000&
  9.        des_material.Caption = mirec!des_material
  10.        'Label6.Caption = mirec!material
  11.        'MaterialSAP = Label6.Caption
  12.        MaterialSAP = mirec!material
  13.        mirec.Close
  14.     Else
  15.        If mirec.RecordCount = 0 Then
  16.             des_material.ForeColor = &HFF&
  17.             des_material.Caption = "MATERIAL NO ENCONTRADO"
  18.             mirec.Close
  19.     End If
  20.    End If
  21.  
  22. If des_material.Caption = "MATERIAL NO ENCONTRADO" Then
  23.  
  24.    mirec.Open "SELECT * FROM CllDB WHERE material = " & (MaterialSAP) & " ", mibd, adOpenKeyset, adLockOptimistic
  25.  
  26. If mirec.RecordCount > 0 Then
  27.        des_material.ForeColor = &H8000&
  28.        des_material.Caption = mirec!des_material
  29.        'Label6.Caption = mirec!material
  30.        mirec.Close
  31.        Else
  32.            If mirec.RecordCount = 0 Then
  33.                des_material.ForeColor = &HFF&
  34.                des_material.Caption = "MATERIAL NO ENCONTRADO"
  35.                mirec.Close
  36.            End If
  37.        End If
  38.     End If
  39.