Duda con MSHFlexGrid

Iniciado por [ANTRAX], 25 Abril 2011, 14:53 PM

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

[ANTRAX]

Hola a todos, Bueno tengo una pregunta.
Si uso LIKE en un datagrid, funciona perfecto, ya que lo que escribo en un textbox, me lo muestra en la grilla.

El code que tengo en el datagrid es el siguiente:

Código (vb) [Seleccionar]
Private Sub txtSearch_Change()
sent = "SELECT * FROM stock WHERE Descripcion LIKE '" & txtSearch & "%" & "'"
Adodc1.RecordSource = sent
Adodc1.Refresh
End Sub


Lo que quiero hacer es que esto mismo funcione en un MSHFlexGrid

Espero que puedan ayudarme.
Saludos

79137913

#1
HOLA!!!

El codigo no es mio es de Luis Navarro


La funcion es simple pones esa funcion y cuando la llamaspones

call ReGrid( "sentencia SQL" , NombredelaMSFLEXGRID)

Código (vb) [Seleccionar]
Public Sub ReGrid(strSQL As String, Grid As MSFlexGrid)
dim gDb as DataBase
Dim rRes As Recordset
Dim i As Integer
Dim iFila As Integer

   Set rRes = gDb.OpenRecordset(strSQL)
   Grid.Cols = rRes.Fields.Count
   Grid.Row = 0
   For i = 0 To rRes.Fields.Count - 1
       Grid.Col = i
       Grid = rRes.Fields(i).Name
   Next i
   
   Grid.Rows = 2
   iFila = 1
   Grid.Row = iFila
   Do While Not rRes.EOF
       For i = 0 To rRes.Fields.Count - 1
           Grid.Col = i
           If Not IsNull(rRes.Fields(i)) Then Grid = rRes.Fields(i)
           If Grid.ColWidth(i) < Len(rRes.Fields(i)) * 120 Then Grid.ColWidth(i) = Len(rRes.Fields(i)) * 120
       Next i
       iFila = iFila + 1
       Grid.Rows = iFila + 1
       Grid.Row = iFila
       rRes.MoveNext
   Loop
   Grid.Rows = iFila
End Sub


GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

[ANTRAX]

#2
Muchas gracias, ahora pruebo y comento

79137913

HOLA!!!

Ahi encontre esa funcion que te viene re bien ;)

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

[ANTRAX]

Quedaria asi?

Código (vb) [Seleccionar]
Call ReGrid "SELECT * FROM Inventario WHERE Barcode LIKE '" & Text1.Text & "%" & "'" , flex

raul338

Cita de: [ANTRAX] en 25 Abril 2011, 16:44 PM
Quedaria asi?
Creo que si. Pero de serlo asegurate de validar bien el textbox para evitar sql injections

[ANTRAX]

Estoy eternamente agradecido de 79137913 que pudo solucionar mi tema.
Por si otro llega a tener la misma duda:

Código (vb) [Seleccionar]

Private Sub Form_Load()
    ' Abre la conexión
    Call IniciarConexion
    ' carga el Recorset con todos los datos
    rs.Open "select * from Consulta1", cnn, adOpenStatic, adLockOptimistic
    ' llena el flexgrid
   
    Call CargarFlex(flex)
   
    Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=bd.mdb; Persist Security Info=False"
    Adodc1.RecordSource = "select * from Consulta1"
    Adodc1.Refresh
End Sub

Private Sub Text1_Change()
        rs.Close
        rs.Open "SELECT * FROM Inventario WHERE Barcode LIKE '" & Text1.Text & "%" & "'", cnn, adOpenStatic, adLockOptimistic
        Set flex.DataSource = rs

End Sub


Código (vb) [Seleccionar]
Option Explicit

Public Declare Sub InitCommonControls Lib "Comctl32" ()
Public flex As MSHFlexGrid
Public cnn As New ADODB.Connection
Public rs As New ADODB.Recordset


Sub CargarFlex(flex As MSHFlexGrid)
   
    Set flex.DataSource = rs
   
    With flex
   
        .ColAlignmentFixed(0) = 1
        .ColAlignment(0) = 1
           
        .ColAlignmentFixed(5) = 8
        .ColAlignment(5) = 8
    End With
End Sub


Public Sub IniciarConexion()

    With cnn
        .CursorLocation = adUseClient
        .Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=bd.mdb; Persist Security Info=False"
    End With

End Sub

Sub Desconectar()
    On Local Error Resume Next
    rs.Close
    Set rs = Nothing
    cnn.Close
    Set cnn = Nothing
End Sub


Modificar los nombres corerspondientes a las tablas de la BD
Saludos y muchas gracias por ayudarme

seba123neo

consejo importante: dejar de usar el control ADODC y usar ADO desde codigo.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

[ANTRAX]


seba123neo

Cita de: [ANTRAX] en 27 Abril 2011, 15:42 PM
Cual es la diferencia?

muchas, dejar de depender de un control ocx es una importante y la otra es la manera de manejar los recordset etc..imaginate si tengo 10 formularios, en cada uno queiro usar 10 recodset para cada recordset tengo que meter un objeto de estos adodc y en total tengo 100 controls, se hace pesadisimo y si el proyecto es muy grande olvidate de mantenerlo si tenes que cambiar algo, aparte en performance es mejor.

en cambio con ADO desde codigo, declaras un objeto publico de tipo recordset (que seria lo mismo que poner un control adodc) y lo usas en toda la aplicacion cuando tengas ganas, lo abris y lo cerras y ya queda disponible para usar, por ahi cuando tengas que usar otro recordset lo declaras local en el formulario y lo usas y destruis ahi mismo, pero te olvidas de poner controles, asignarle la cadena de conexion etc.asi estan hechos los sistemas grandes, es lo mejor que te ofrece vb 6. y para los comandos de insert, delete  o update, declaras un objeto publico de tipo command y lo usas cuando tengas ganas, o sea que con pocas variables haces lo que quieras, no usar los metodos .Addnew o Delete..etc..mejor ejecutar la instruccion SQL "INSERT INTO.." o "DELETE FROM..."

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson