Crear Recordset para MsFlexgrid
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
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
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
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