• Domingo 22 de Diciembre de 2024, 23:52

Autor Tema:  Re: SOS... Cambiar dinamicamente el filtro....  (Leído 1027 veces)

RUBEN2004

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: SOS... Cambiar dinamicamente el filtro....
« en: Lunes 24 de Noviembre de 2003, 20:53 »
0
el problema que tengo lo describo:
tengo un form con 13 cajas de texto y 5 option boton cada una de
ellas son
cargadas por los campos declarados en el recordset correspondiente a
CPU...
cuyo codigo es 1980, pero cuando no es CPU, es TECLADO, REGULADOR,
MOUSE,
etc... y ese es otro codigo, por lo tanto el filtro que carga el form
es el
codigo, que para CPU es 1980 y para los otros dispositivos son otros
numeros.... por ejemplo MOUSE el codigo es 6524... cuando en la carga
de
las cajas de textos el recordset pasa por disco duro... lanza un
error,
porque no hay data de ese tipo para un MOUSE.... alli es cuando yo
hago dos
recordset: uno para CPU con todos sus componentes, ejemplo: ram,
disco
duro, tarjeta de red, cd-rom, etc. y otro para TODOS los demas
dispositivos
tales como, teclado, mouse, impresora, scarnner, etc... la pregunta
es como
muevo cada recordset segun sea el caso al desplazarme en la base de
datos???.


Ruben


este es el codigo del form y del modulo....-

'*** ESTE CODIGO VA EN EL MODULO ***
Public Sub NavegarBD()
Dim VarSQL As String
Set RsBD = New Recordset

VarSQL = "SELECT COD_CAT " & _
"FROM cat " & _
"ORDER BY COD_CAT"

RsBD.Open VarSQL, Conectar1, adOpenForwardOnly, adLockReadOnly,
adCmdText

Do While Not RsBD.EOF ' **** TODOS EJEMPLO: TECLADO, MOUSE, ETC. ****
RsBD.Close
RsBD.Open "SELECT invequ.COD_CAT, invequ.ID_EQU, invequ.NRO_SER,
ubica.DES_UBI, cat.DES_CAT, " & _
"marca.DES_MAR, mode.DES_MOD, invequ.NRO_INV,
invequ.NRO_GRU, " & _
"invequ.OBS_EQU, invequ.TIP_STA " & _
"FROM ubica INNER JOIN (mode INNER JOIN (marca INNER JOIN "
& _
"(cat INNER JOIN invequ ON cat.COD_CAT = invequ.COD_CAT) "
& _
"ON marca.COD_MAR = invequ.COD_MAR) ON mode.COD_MOD =
invequ.COD_MOD) " & _
"ON ubica.COD_UBI = invequ.COD_UBI " & _
"ORDER BY invequ.NRO_SER", Conectar1, adOpenStatic,
adLockOptimistic
Exit Do
Loop
End Sub
Public Sub NavegarBD2()
Dim VarSQL As String
Set RsBD = New Recordset

VarSQL = "SELECT COD_CAT " & _
"FROM cat " & _
"ORDER BY COD_CAT"

RsBD.Open VarSQL, Conectar1, adOpenForwardOnly, adLockReadOnly,
adCmdText

Do While Not RsBD.EOF ' **** SOLO CPU... COD_CAT = 1980 ****
RsBD.Close
RsBD.Open "SELECT invequ.COD_CAT, invequ.ID_EQU, invequ.NRO_SER,
ubica.DES_UBI, cat.DES_CAT, " & _
"marca.DES_MAR, mode.DES_MOD, invequ.NRO_INV,
invequ.NRO_GRU, " & _
"invequ.OBS_EQU, invequ.TIP_STA, tabcom.TAR_RED,
tabcom.DIR_IP, " & _
"tabcom.MIC_000, tabcom.CDR_000, tabcom.MEM_RAM,
tabcom.COR_000, " & _
"tabcom.CAP_DIS, tabcom.O_DIS " & _
"FROM tabcom INNER JOIN (ubica INNER JOIN (mode INNER JOIN
" & _
"(marca INNER JOIN (cat INNER JOIN invequ ON cat.COD_CAT =
invequ.COD_CAT) " & _
"ON marca.COD_MAR = invequ.COD_MAR) ON mode.COD_MOD =
invequ.COD_MOD) " & _
"ON ubica.COD_UBI = invequ.COD_UBI) ON tabcom.NRO_SER =
invequ.NRO_SER " & _
"ORDER BY invequ.NRO_SER", Conectar1, adOpenStatic,
adLockOptimistic
Exit Do
Loop
End Sub


'*** ESTE CODIGO VA EN FORM ***
Private Sub CargarCampos()
Label22.Caption = RsBD(0)

If Label22.Caption = 1980 Then ' CODIGO DE CATEGORIA PARA MOSTRAR EL
CPU
' Y SUS COMPONENTES. EJEMPO: SERIAL,
RAM, DISCO DURO, ETC.
Frame5.Visible = True ' MUESTRA FRAME CON LAS CAJAS DE TEXTO
Frame5.Enabled = True ' DE LOS COMPONENTES DEL CPU
Frame11.Visible = False ' OCULTA UN FRAME CON UNA FIGURA
Frame11.Enabled = False ' OCULTA UN FRAME CON UNA FIGURA
NavegarBD2 ' AQUI SEGUN YO... CARGO EL OTRO
RECORDSET
' PERO NO ME PERMITE SEGUIR EXPLORANDO
LA
' BASE DE DATOS... LA PREGUNTA ES COMO
' MOVERME EN LA BASE DE DATOS
Else ' MUESTRA TODAS LAS CATEGORIAS.
EJEMPLO: TECLADO, MOUSE, ETC.
Frame5.Visible = False ' OCULTA FRAME CON LAS CAJAS DE TEXTO
Frame5.Enabled = False ' DE LOS COMPONENTES DEL CPU
Frame11.Visible = True ' MUESTRA UN FRAME CON UNA FIGURA
Frame11.Enabled = True ' MUESTRA UN FRAME CON UNA FIGURA
End If

Text6.Text = RsBD(1) & " " ' IDENTIFICACION
Text1.Text = RsBD(2) & " " ' SERIAL
Text7.Text = RsBD(3) & " " ' SECCIONAL
Text8.Text = RsBD(4) & " " ' CATEGORIA
Text9.Text = RsBD(5) & " " ' MARCA
Text10.Text = RsBD(6) & " " ' MODELO
Text3.Text = RsBD(7) & " " ' NUMERO DE INVENTARIO
Text5.Text = RsBD(8) & " " ' GRUPO
Text4.Text = RsBD(9) & " " ' OBSERVACIONES

Select Case RsBD(10) ' ESTATUS
Case "ACTIVO"
Option1.Value = True
Option1.BackColor = &HC000&
Option2.BackColor = &H8000000F
Option3.BackColor = &H8000000F
Option4.BackColor = &H8000000F
Case "DISPONIBLLE"
Option2.Value = True
Option2.BackColor = &HC000&
Option1.BackColor = &H8000000F
Option3.BackColor = &H8000000F
Option4.BackColor = &H8000000F
Case "DESINCORPORADO"
Option3.Value = True
Option3.BackColor = &HC0&
Option1.BackColor = &H8000000F
Option2.BackColor = &H8000000F
Option4.BackColor = &H8000000F
Case "EN REPARACION"
Option4.Value = True
Option4.BackColor = &HC0&
Option3.BackColor = &H8000000F
Option2.BackColor = &H8000000F
Option1.BackColor = &H8000000F
End Select

If Frame5.Visible = True Then
Frame5.Visible = True
Frame5.Enabled = True
Frame11.Visible = False
Frame11.Enabled = False
Select Case RsBD(11) ' RED
Case "SI"
Option6.Value = True
Option6.BackColor = &HC000&
Option5.BackColor = &H8000000F
Case "NO"
Option5.Value = True
Option5.BackColor = &HC0&
Option6.BackColor = &H8000000F
End Select
End If

If Frame5.Visible = True Then
Text11.Text = RsBD(12) & " " ' IP
End If

If Frame5.Visible = True Then
Select Case RsBD(13) ' MICROFONO
Case "SI"
Option8.Value = True
Option8.BackColor = &HC000&
Option7.BackColor = &H8000000F
Case "NO"
Option7.Value = True
Option7.BackColor = &HC0&
Option8.BackColor = &H8000000F
End Select
End If

If Frame5.Visible = True Then
Select Case RsBD(14) ' CD ROM
Case "SI"
Option12.Value = True
Option12.BackColor = &HC000&
Option11.BackColor = &H8000000F
Case "NO"
Option11.Value = True
Option11.BackColor = &HC0&
Option12.BackColor = &H8000000F
End Select
End If

If Frame5.Visible = True Then
Text12.Text = RsBD(15) & " " ' RAM
End If

If Frame5.Visible = True Then
Select Case RsBD(16) ' CORNETAS
Case "SI"
Option10.Value = True
Option10.BackColor = &HC000&
Option9.BackColor = &H8000000F
Case "NO"
Option9.Value = True
Option9.BackColor = &HC0&
Option10.BackColor = &H8000000F
End Select
End If

If Frame5.Visible = True Then
Text13.Text = RsBD(17) & " " ' DISCO DURO
End If

If Frame5.Visible = True Then
Text14.Text = RsBD(18) & " " ' OTRO DISPOSITIVO
End If
End Sub

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
SOS... Cambiar dinamicamente el filtro....
« Respuesta #1 en: Miércoles 26 de Noviembre de 2003, 14:57 »
0
Hola RUBEN2004.

No he examinado a fondo el código que envías ni la lógica de tu aplicación, pero así a simple vista, el problema puede ser que siempre estás utilizando la misma variable recordset  (rsBD)  para obtener tus registros de la bd, con lo cual, lógicamente sólo vas a tener un recordset y no dos como tu pretendes. Si quieres manejar a la vez dos recordsets, utiliza dos variables.

De todas formas, y repito que así a simple vista, debe haber otras formas más sencillas de hacer lo que quieres. Por ejemplo, las uniones de las tablas que utilizas, entre otras cosas provocan una consulta muy pesada. Te compensa utilizar varios recordsets...

Suerte.