Ver Mensaje Individual
  #16 (permalink)  
Antiguo 15/03/2009, 17:28
acc008
 
Fecha de Ingreso: marzo-2009
Mensajes: 23
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Comparacion de Columnas

mmm no me funciona bien :S... el codigo me quedo asi:

Código:
' hacemos una selección con el producto indicado (esta devolverá un único registro)
' se supone que anteriormentes has declarado dbs (Database) y rst (Recordset)
Set DATOS = DB.OpenRecordset("SELECT Avangard, ATT FROM DATOS Where DESTINO = '" & Txt1.Text & "'")
' creamos una matriz de dos dimensiones
Dim x As Integer, i As Integer
For x = 0 To DATOS.Fields.Count - 1
    ' si el valor del campo es mayor que , incrementamos la variable
    If DATOS.Fields(x) > 0 Then i = i + 1
Next x
Dim a() As Variant
' redimensionamos la matriz bidimensional al número de campos no nulos
ReDim a(i - 1, 1)
' el primer índice de la matriz es 0
x = -1
For i = 0 To DATOS.Fields.Count - 1
    If DATOS.Fields(i) > 0 Then
        ' el valor del campo es mayor que cero, lo cargamos en la matriz
        x = x + 1
        a(x, 0) = DATOS.Fields(i).Name
        a(x, 1) = DATOS.Fields(i)
    End If
Next i
 
Dim b As Boolean, aux As Integer, s As String
' ordenamos la matriz de menor a mayor
b = True
While b
    b = False
    For i = 1 To UBound(a)
        If a(i - 1, 1) > a(i, 1) Then
            s = a(i - 1, 0)
            aux = a(i - 1, 1)
            a(i - 1, 0) = a(i, 0)
            a(i - 1, 1) = a(i, 1)
            a(i, 0) = s
            a(i, 1) = aux
            b = True
        End If
    Next i
Wend
' el primer elemento de la matriz es el mas barato
MsgBox "El distribuidor mas barato es " & a(0, 0) & vbCrLf & _
    "con un precio de " & a(0, 1)
no se si lo puse mal o que pero cuando uno de los 2 proveedores tiene un valor en 0 funciona bien.. pero si los 2 tienen algun precio me devuelve el nombre del que esta primero (avangard) y el precio q me da es 0 :S..

posiblemente hize algo mal yo pero no se :S..


EDIT:

Bueno ya se me ocurrio otra forma para hacerlo y no es tan complicada como la q pense primero xD. lo que hago es lo siguiente:

Código:
Private Sub Grilla_Click()
'Declaro variables para cada proveedor
Precio1 = Grilla.TextMatrix(Grilla.RowSel, 3) 
Precio2 = Grilla.TextMatrix(Grilla.RowSel, 4)
Txt1.Text = Grilla.TextMatrix(Grilla.RowSel, 1)

'Si la variable es mayor a 0 las agrego a un listbox q esta oculto en el formulario (por cuestiones esteticas :P)
'El formulario tiene la opcion Sorted = True para que me ordene de menor a mayor los valores
If Precio1 > 0 Then
List1.AddItem Precio1
End If
If Precio2 > 0 Then
List1.AddItem Precio2
End If

'Selecciono el primer registro del list y comparo el valor con la primer variable
If List1.List(0) = Precio1 Then
'si los valores son iguales me va a mostrar en un textbox el nombre de proveedor al que corresponde la variable
'en este caso Precio1 = Avangard
Txt2.Text = "Avangard"
Txt3.Text = List1.List(0)
'dsp de imprimir los valores le hago un .clear al listbox para poder fijarme 
'en otros regristros sin tener q cerrar y volver a abrir el form
List1.Clear
Else
'Si la primer comparacion es falsa paso a comparar la siguiente variable:
'en este caso la variable Precio2 = AT&T
If List1.List(0) = Precio2 Then
Txt2.Text = "AT&T"
Txt3.Text = List1.List(0)
List1.Clear
'Para cuando quiera agregar mas proveedores lo unico q voy a tener q hacer es asignar mas variables 
'y anidar otro if dsp de un else y listo
End If
End If
Bueno.. esa es la forma que se me ocurrio. capaz que haga esto nomas porque no entiendo nada de matrices y si se me presenta algun problema con el codigo voy a tener que estar pendiente del foro siempre :S..
pero seguramente voy a volver con otra duda :D....

Y como siempre Gracias a todos!

P.D: Fijense si les gusta mi idea y me lo dicen :P

Última edición por acc008; 15/03/2009 a las 22:27