Crear Recordset para MsFlexgrid

Sonia Rodri
27 de Abril del 2004
Hola

Tengo el siguiente problema que llevo un par de días intentando solucionar, y no hay manera. Tengo un textbox y un MSFlexgrid, y lo que quiero es que en el evento lostfocus del textbox, me reyene el grid, pero selecionando de la tabla solo los elementos de un campo que coincidan con lo introducido en el textbox. Para ello tengo el siguiente código, que me da el error: "ERROR DE CONVERSION DE TIPO DE DATOS", en la linea del Set Mirecordset...:

Dim Mirecordset2 As Recordset

Private Sub text3_lostfocus()
Set Mirecordset2 = Data1.Recordset.OpenRecordset("SELECT * FROM CPRODUCTOS WHERE CONTRATO = '" & Text3.Text & "' ", dbOpenDynaset)
MSFlexGrid1.DataSource = Mirecordset2
MSFlexGrid1.Clear
MSFlexGrid1.Cols = 6
MSFlexGrid1.Rows = 2
Mirecordset2.MoveFirst
MFila = 0
Do While Not Mirecordset2.EOF
MFila = MFila + 1
MSFlexGrid1.TextMatrix(MFila, 0) = Mirecordset2!Cliente
MSFlexGrid1.TextMatrix(MFila, 1) = Mirecordset2!Contrato
MSFlexGrid1.TextMatrix(MFila, 2) = Mirecordset2!Producto
MSFlexGrid1.TextMatrix(MFila, 3) = Mirecordset2!PºUd
MSFlexGrid1.TextMatrix(MFila, 4) = Mirecordset2!Unidades
MSFlexGrid1.TextMatrix(MFila, 5) = Mirecordset2!Total
MSFlexGrid1.Rows = MFila + 2
MSFlexGrid1.Cols = 6
Mirecordset2.MoveNext
Loop
MSFlexGrid1.FormatString = "Cliente |Contrato |Producto |PºUd |Unidades |Total "
End Sub

gracias

Jose Oscar
27 de Abril del 2004
Aqui tienes un jemplo de una msflexgrid en lazado a un data y un "levante de datos" de la la base de datos Gimnasio Heredia 2004.
la diferencia entre recorset de dao y del control data Data es que msflexgrid con un select del data detecta las columnas y agrega las columnas que coreesponda. recorset de DAO debes detectarlas tu y modificar antes de que te duga que textmatrix es ta "fuera del intervañlo" o "indice de matriz no valido" , olgo de eso

durante la creacion debes establecer tu esto
Data1.DefaultType=UseJet
Data1.RecordsetType= Dynaset
Data1.Connect=Access

y en msflexgrid1 esto
msflexgrid1.recorsource=data1
o seha que el sudministardore de datos es data1
!!!Que mal escribo!!! perdona es que ya me estoy por ir a dormir...
Modifica los datos que no correspondan.

Un saludo
Jose Oscar

Usando un data y un msflexgrid

Data1.DefaultType=UseJet
Data1.RecordsetType= Dynaset
Data1.Connect=Access

Private Sub Command1_Click()
Dim Rslect As Recordset
Dim DB As Database
Set DB = dao.OpenDatabase(App.Path & "" & "gimnasio heredia 2004.mdb")
Set Rslect = dao.OpenDatabase(App.Path & "" & "gimnasio heredia 2004.mdb").OpenRecordset("alumnos")

DB.Close

MSFlexGrid1.Rows = Rslect.RecordCount
MSFlexGrid1.Cols = Rslect.Fields.Count

Cont = 0
Rslect.MoveFirst
Do While Not Rslect.EOF
For g = 0 To Rslect.Fields.Count - 2
Form1.MSFlexGrid1.TextMatrix(Cont, g) = Rslect.Fields(g).Value
Next
Rslect.MoveNext
Cont = Cont + 1
MSFlexGrid1.ColWidth(0) = 2800
Loop
Form1.MSFlexGrid1.Refresh
Rslect.Close
End Sub

Private Sub Form_Load()
Data1.DatabaseName = (App.Path & "" & "gimnasio heredia 2004.mdb")
Data1.RecordSource = " select [alumnos].[Nombre y apellido]," & _
"[ejersicio de alumnos].[entrenado por],alumnos.[Rutinas] " & _
"from [ejersicio de alumnos],[alumnos] where " & _
"[alumnos].[rutinas]=[ejersicio de alumnos].[rutina] and [ejersicio de alumnos]" & _
".[alumno]=[alumnos].[nombre y apellido]"

MSFlexGrid1.Refresh

For H = 0 To MSFlexGrid1.Cols - 1
MSFlexGrid1.ColWidth(H) = 2100
Next

MSFlexGrid1.ColWidth(0) = 450

End Sub