Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: [ANTRAX] en 25 Abril 2011, 14:53 pm



Título: Duda con MSHFlexGrid
Publicado por: [ANTRAX] en 25 Abril 2011, 14:53 pm
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
  1. Private Sub txtSearch_Change()
  2. sent = "SELECT * FROM stock WHERE Descripcion LIKE '" & txtSearch & "%" & "'"
  3. Adodc1.RecordSource = sent
  4. Adodc1.Refresh
  5. End Sub

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

Espero que puedan ayudarme.
Saludos


Título: Re: Duda con MSHFlexGrid
Publicado por: 79137913 en 25 Abril 2011, 16:08 pm
HOLA!!!

El codigo no es mio es de Luis Navarro (lnavarro@microdelta.es)


La funcion es simple pones esa funcion y cuando la llamaspones

Código:
call ReGrid( "sentencia SQL" , NombredelaMSFLEXGRID)

Código
  1. Public Sub ReGrid(strSQL As String, Grid As MSFlexGrid)
  2. dim gDb as DataBase
  3. Dim rRes As Recordset
  4. Dim i As Integer
  5. Dim iFila As Integer
  6.  
  7.    Set rRes = gDb.OpenRecordset(strSQL)
  8.    Grid.Cols = rRes.Fields.Count
  9.    Grid.Row = 0
  10.    For i = 0 To rRes.Fields.Count - 1
  11.        Grid.Col = i
  12.        Grid = rRes.Fields(i).Name
  13.    Next i
  14.  
  15.    Grid.Rows = 2
  16.    iFila = 1
  17.    Grid.Row = iFila
  18.    Do While Not rRes.EOF
  19.        For i = 0 To rRes.Fields.Count - 1
  20.            Grid.Col = i
  21.            If Not IsNull(rRes.Fields(i)) Then Grid = rRes.Fields(i)
  22.            If Grid.ColWidth(i) < Len(rRes.Fields(i)) * 120 Then Grid.ColWidth(i) = Len(rRes.Fields(i)) * 120
  23.        Next i
  24.        iFila = iFila + 1
  25.        Grid.Rows = iFila + 1
  26.        Grid.Row = iFila
  27.        rRes.MoveNext
  28.    Loop
  29.    Grid.Rows = iFila
  30. End Sub

GRACIAS POR LEER!!!


Título: Re: Duda con MSHFlexGrid
Publicado por: [ANTRAX] en 25 Abril 2011, 16:26 pm
Muchas gracias, ahora pruebo y comento


Título: Re: Duda con MSHFlexGrid
Publicado por: 79137913 en 25 Abril 2011, 16:32 pm
HOLA!!!

Ahi encontre esa funcion que te viene re bien ;)

GRACIAS POR LEER!!!


Título: Re: Duda con MSHFlexGrid
Publicado por: [ANTRAX] en 25 Abril 2011, 16:44 pm
Quedaria asi?

Código
  1. Call ReGrid "SELECT * FROM Inventario WHERE Barcode LIKE '" & Text1.Text & "%" & "'" , flex


Título: Re: Duda con MSHFlexGrid
Publicado por: raul338 en 25 Abril 2011, 21:36 pm
Quedaria asi?
Creo que si. Pero de serlo asegurate de validar bien el textbox para evitar sql injections


Título: Re: Duda con MSHFlexGrid
Publicado por: [ANTRAX] en 26 Abril 2011, 17:16 pm
Estoy eternamente agradecido de 79137913 que pudo solucionar mi tema.
Por si otro llega a tener la misma duda:

Código
  1. Private Sub Form_Load()
  2.    ' Abre la conexión
  3.    Call IniciarConexion
  4.    ' carga el Recorset con todos los datos
  5.    rs.Open "select * from Consulta1", cnn, adOpenStatic, adLockOptimistic
  6.    ' llena el flexgrid
  7.  
  8.    Call CargarFlex(flex)
  9.  
  10.    Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=bd.mdb; Persist Security Info=False"
  11.    Adodc1.RecordSource = "select * from Consulta1"
  12.    Adodc1.Refresh
  13. End Sub
  14.  
  15. Private Sub Text1_Change()
  16.        rs.Close
  17.        rs.Open "SELECT * FROM Inventario WHERE Barcode LIKE '" & Text1.Text & "%" & "'", cnn, adOpenStatic, adLockOptimistic
  18.        Set flex.DataSource = rs
  19.  
  20. End Sub

Código
  1. Option Explicit
  2.  
  3. Public Declare Sub InitCommonControls Lib "Comctl32" ()
  4. Public flex As MSHFlexGrid
  5. Public cnn As New ADODB.Connection
  6. Public rs As New ADODB.Recordset
  7.  
  8.  
  9. Sub CargarFlex(flex As MSHFlexGrid)
  10.  
  11.    Set flex.DataSource = rs
  12.  
  13.    With flex
  14.  
  15.        .ColAlignmentFixed(0) = 1
  16.        .ColAlignment(0) = 1
  17.  
  18.        .ColAlignmentFixed(5) = 8
  19.        .ColAlignment(5) = 8
  20.    End With
  21. End Sub
  22.  
  23.  
  24. Public Sub IniciarConexion()
  25.  
  26.    With cnn
  27.        .CursorLocation = adUseClient
  28.        .Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=bd.mdb; Persist Security Info=False"
  29.    End With
  30.  
  31. End Sub
  32.  
  33. Sub Desconectar()
  34.    On Local Error Resume Next
  35.    rs.Close
  36.    Set rs = Nothing
  37.    cnn.Close
  38.    Set cnn = Nothing
  39. End Sub

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


Título: Re: Duda con MSHFlexGrid
Publicado por: seba123neo en 27 Abril 2011, 05:18 am
consejo importante: dejar de usar el control ADODC y usar ADO desde codigo.

saludos.


Título: Re: Duda con MSHFlexGrid
Publicado por: [ANTRAX] en 27 Abril 2011, 15:42 pm
Cual es la diferencia?


Título: Re: Duda con MSHFlexGrid
Publicado por: seba123neo en 28 Abril 2011, 02:22 am
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.


Título: Re: Duda con MSHFlexGrid
Publicado por: 79137913 en 28 Abril 2011, 04:25 am
HOLA!!!

Si, lo que dice seba es mucho mejor hacerlo asi.

Despues de que diga esto van a venir las puteadas, pero bueno...
Podes usr DAO desde codigo tambien xD

GRACIAS POR LEER!!!


Título: Re: Duda con MSHFlexGrid
Publicado por: seba123neo en 29 Abril 2011, 05:18 am
HOLA!!!
Podes usr DAO desde codigo tambien xD

si, tambien se puede usar, el tema es que DAO, ya sea por codigo o con el control DATA (que usa DAO), esta totalmente obsoleto, microsoft dijo que ya no se debe usar, por eso se reemplazo todo por ADO.