Visual Basic.NET - Textbox que recupere posiciones de tabla access

 
Vista:

Textbox que recupere posiciones de tabla access

Publicado por SweeTy (12 intervenciones) el 25/11/2010 15:08:51
Hola a todos,

Estoy creando un programa en VisualBasic enlazado a una base de datos.
En este formulario, aparte de la opcion de ir actualizando la base con nuevos registros, quiero tener la opcion de hacer una busqueda por un campo en especifico.

Para esto ultimo he creado un combobox un boton y 2 textbox.

En el combo puedo elegir el numero de operacion que viene dado por la columna "Operacion" dentro de la tabla "Provision" de mi access.
Cuando elijo el Codigo de "Operacion" y hago click en el boton se me actualiza un textbox con la columna "Caso" de la misma tabla, mostrandome asi el caso generado por esa "Operacion". Hasta aqui todo bien.

El otro textbox hasta ahora se me actualizaba con la columna "ID" de la misma tabla. Pero me he dado cuenta que si borro un registro el "ID" pasa al siguiente, ya que es autonumerico. Es decir si tengo los registros 1, 2 y 3 y borro el ultimo, al crear un nuevo registro le da el ID 4 y no el tres. Por lo que cuando pongo el ID en el BindingNavigatorpositionItem no me recupera nada o me recupera el ultimo registro.

He querido hacer para que el Textbox en cuestion en vez de mostrar el numero de la columna "ID" me muestre el numero de posicion en la que se encuentra. Pero en ese punto estoy atascado.

El codigo que tengo en el boton para lo descrito arriba es el siguiente:

If Not TypeOf ComboBox1.SelectedValue Is DataRowView Then

Dim row As DataRowView = DirectCast(ComboBox1.SelectedItem, DataRowView)
Caso_btextbox.Text = row.Item("caso").ToString

'aqui cuando el textbox recupere la posicion se igualara con el navigator y se actualizaran los registros con todos los datos de esa operacion.

BindingNavigatorPositionItem.Text = IDTextbox.text
BindingNavigatorPositionItem.Focus()
BindingNavigatorPositionItem_Click(Nothing, Nothing)
End If

La parte que me falta es la que hace que el textbox, al seleccionar un codigo de operacion, se actualice con el numero de registro que tenga, para ponerlo en el Bindingnavigatorpositionitem y al apretar enter se despace hasta esa entrada.

Tambien me ayudaria si en vez de eso, al elegir del Combo la Operacion deseada, me saltara el BindingNavigatorPositionItem a la posicion de esa operacion. Para que cuando quiera actualizar no se reescriban los registros. Porque en algo parecido que intenté. Al actualizarse todos los campos con los de la tabla. Cuando guarde los cambios se actualizó la posicion 1 de la tabla, machacando asi esa operacion.

O incluso si se puede configurar que el ID autonumerico cuando se borre una linea se actualice igualando el numero ID con la posicion del registro.

Gracias por la ayuda que podais darme.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Textbox que recupere posiciones de tabla access

Publicado por nadia (10 intervenciones) el 27/11/2010 20:41:31
Hola pues no se si te ayude este codigo que yo uso para recuperar datos...

Dim conexion As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = C:\bd.mdb")

Dim var As OleDbDataAdapter
Dim DataSet1 As DataSet


dim sql as string = "select campo1, campo2 from tabla where id = " & Trim
(id_textbox.Text) & ""

var = New OleDbDataAdapter(sql, conexion)

DataSet1 = New DataSet()

orden1.Fill(DataSet1, "tabla")

textbox2.Text = DataSet1.Tables("tabla").Rows(0).Item("campo1").ToString

Comentas si te sirvió o no... un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Textbox que recupere posiciones de tabla access

Publicado por SweeTy (12 intervenciones) el 29/11/2010 08:42:08
Buenos Días,

He utilizado el código que me indicaste, cambiando los parámetros para que accediera a mi BD.

Hay una linea en la que indicas orden1.Fill (Dataset1, "tabla")

No tengo ningún "orden1" definido, por lo que lo puse como "var.fill", ya que me pareció lo mas lógico, pero me dio un error así que definí un orden1 como oledbdataadapter. Pero entonces me di cuenta que estaba configurandolo como el "var" anterior y por lo tanto me saldría el mismo error.

"Error de sintaxis (falta operado) en la expresion de consulta 'id='."


************** Texto de la excepción **************
System.Data.OleDb.OleDbException: Error de sintaxis (falta operador) en la expresión de consulta 'id ='.
en System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
en System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
en System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
en System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
en System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
en System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
en System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
en System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
en System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
en System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
en SweeTy.Provision.Button7_Click(Object sender, EventArgs e) en D:\Mis Documentos\Proyectos\SweeTy\SweeTy\SweeTy\BBDD\Provision.vb:línea 95
en System.Windows.Forms.Control.OnClick(EventArgs e)
en System.Windows.Forms.Button.OnClick(EventArgs e)
en System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
en System.Windows.Forms.Control.WndProc(Message& m)
en System.Windows.Forms.ButtonBase.WndProc(Message& m)
en System.Windows.Forms.Button.WndProc(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
en System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

y el la linea 95 esta la orden

orden1.Fill(DataSet1, "Provision")

No se que pueda ser lo que esta pasando. Os pongo el codigo del boton entero.

Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

Dim conexion As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = C:\Archivos de programa\SweeT Launcher\BBDD_PROV.mdb")

Dim var As OleDb.OleDbDataAdapter
Dim DataSet1 As DataSet
Dim orden1 As OleDb.OleDbDataAdapter

Dim sql As String = "select MIDAS, CASO from Provision where id = " & Trim(id_TextBox.Text) & ""
var = New OleDb.OleDbDataAdapter(sql, conexion)
orden1 = New OleDb.OleDbDataAdapter(sql, conexion)

DataSet1 = New DataSet()

orden1.Fill(DataSet1, "Provision")

pos_textbox.Text = DataSet1.Tables("Provision").Rows(0).Item("MIDAS").ToString
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Textbox que recupere posiciones de tabla access

Publicado por Nadia (10 intervenciones) el 02/12/2010 07:00:30
Hola que tal perdon por la tardanza y espero aun te sirva lo que te diga. Para empezar tienes razon orden1 no va en su lugar es var y lo del error es por que alomejor tu estas comparando con un daton de tipo fecha o de tipo string y ahi haria falta agregar comillas simples aca te dejo los ejemplos.

Si tu fueras a comparar con un dato numerico tu codigo quedaria asi:

Dim conexion As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = C:\Archivos de programa\SweeT Launcher\BBDD_PROV.mdb")

Dim var As OleDb.OleDbDataAdapter
Dim DataSet1 As DataSet

Dim sql As String = "select campo1, campo2 from tabla1 where id = " & Trim(id_txt.Text)
var = New OleDbDataAdapter(sql, conexion)

DataSet1 = New DataSet()

var.Fill(DataSet1, "tabla1")

Label.Text = DataSet1.Tables("tabla1").Rows(0).Item("campo1").ToString
Label1.Text = DataSet1.Tables("tabla1").Rows(0).Item("campo2").ToString

Si estuvieras comparando con un dato que es de tipo string o fecha hay que agregar comillas simples en la linea de codigo:

Dim sql As String = "select campo1, campo2 from tabla1 where id = '" & Trim(id_txt.Text) & "'"

por favor comenta si te sirvio o no
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Textbox que recupere posiciones de tabla access

Publicado por SweeTy (12 intervenciones) el 02/12/2010 11:58:05
Buenos Dias,

Nadia, he puesto los datos tal y como me sugieres.
Te pego el codigo tal y como propones con algunas modificaciones:

Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

Dim conexion As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = C:\Archivos de programa\SweeT Launcher\BBDD_PROV.mdb")

Dim var As OleDb.OleDbDataAdapter
Dim DataSet1 As DataSet


Dim sql As String = "select MIDAS from Provision where MIDAS = " & Trim(TextBox7.Text)
var = New OleDb.OleDbDataAdapter(sql, conexion)

DataSet1 = New DataSet()

var.Fill(DataSet1, "Provision")

TextBox7.Text = DataSet1.Tables("Provision").Rows(0).Item("MIDAS").ToString

End Sub

Ahora bien. El valor que busco es un valor numerico ya que los "trabajos" se nos envian en forma de "ticket", yo hacia la prueba con uno que tenia a la vista y cuando le doy al boton buscar, no tira ningun error.

Pero lo interesante seria que al darle al boton buscar, aparte de no dar ningun error, en el datagridview apareciese marcado ( y por consiguiente en el navigator la posicion de registro), o bien la tabla se vaciase y se llenase solo con ese numero,(o coicidencias)

La verdad es que gracias a tu ayuda he dado un gran paso. Si en esto ultimo no pudieses ayudarme, igualmente gracias por todo lo anterior :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Textbox que recupere posiciones de tabla access

Publicado por SweeTy (12 intervenciones) el 02/12/2010 12:16:44
Hola de nuevo,

hoy que tengo un poco mas de tiempo he estado investigando.
He añadido/modificado el codigo con lo siguiente:

If TextBox7.Text = DataSet1.Tables("Provision").Rows(0).Item("MIDAS").ToString Then
Me.DataGridView1.DataSource = DataSet1
Else
MsgBox("No se localiza el MIDAS")
End If

El resultado es que al darle al boton buscar si pongo un numero que no existe sale el msgbox ese. Pero si existe el datagrid se vacia y deja una sola linea, pero completamente en blanco. Sin datos.

Sabeis que puede ser lo que me falte para que lo rellene con la linea del midas?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Textbox que recupere posiciones de tabla access

Publicado por nadia (10 intervenciones) el 04/12/2010 20:50:05
Hola de nuevo, pues me da mucho gusto que hayas avanzado

creo que lo que te falta para es lo siguiente


Me.DataGridView.DataMember = "tabla_nombre"

de manera que te quedaria

Me.DataGridView1.DataSource = DataSet1
Me.DataGridView.DataMember = "tabla_nombre"

Me comentas si te sirvio, un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Textbox que recupere posiciones de tabla access

Publicado por Gerard (1 intervención) el 07/12/2010 05:17:47
Buenas

Sobre el ultimo comentario

Como se puede asignar un valor de una columna seleccionada del datagrid a un textbox.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Textbox que recupere posiciones de tabla access

Publicado por SweeTy (12 intervenciones) el 09/12/2010 09:02:48
Buenos Días,

He conseguido hueco para probarlo. En principio no funciona del todo bien. Es decir:

SI yo pongo el numero 966506 y hay una coincidencia en la base de datos en la columna "MIDAS" aparece ese numero, en la columna "Caso" se queda con el caso relacionado, pero cuando selecciono la linea, no se actualizan los datos del formulario.

Pero bueno, ya casi lo tenemos. El código que tengo hasta el momento es el siguiente:

Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

Dim conexion As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = C:\Archivos de programa\SweeT Launcher\BBDD_PROV.mdb")

Dim var As OleDb.OleDbDataAdapter
Dim DataSet1 As DataSet
'Dim dataset2 As DataSet

Dim sql As String = "select * from Provision where MIDAS = " & Trim(TextBox7.Text)
var = New OleDb.OleDbDataAdapter(sql, conexion)

DataSet1 = New DataSet()
'dataset2 = New DataSet()

var.Fill(DataSet1, "Provision")

If TextBox7.Text = DataSet1.Tables("Provision").Rows(0).Item("MIDAS").ToString Then
'id_TextBox.Text = DataSet1.Tables("Provision").Rows(0).Item("Caso").ToString
Me.DataGridView1.DataSource = DataSet1
Me.DataGridView1.DataMember = "Provision"
Else
MsgBox("No se localiza el MIDAS")
End If

End Sub
------

En fin le estoy dando vueltas y no se porque pero no sale. La historia es que si no hago el filtrado, y busco manualmente el numero de MIDAS y hago click, los datos del formulario si que se actualizan, por lo que igual, en vez de hacer desparecer el resto de datos, con una consulta, debería hacer que solo salga como "focused"

Si funcionara digo algo así:
Datagridview1.datasource.focus (o focused) = [...]

Yo lo he probado. Pero no funciona. Sabes (Nadia) o alguien, Como podría hacer para que en vez de desaparecer el resto de elementos del datagrid, solamente aparezca seleccionado el "row" de la consulta.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar