Correlativo bd sql 2008

Estoy desarrollando un pequeño programa para registrar pagares, el tema es que el la bd tengo la tabla "pagares", con el codp_id como int y se autoincremente cuando grabo en la bd, el tema es si puedo mostrar en un textbox el ultimo registro +1.-

Creo que es solo mostrar el codp_id siguiente, ya que al grabar esto automáticamente debería cambiar en el textbox., o generar un correlativo en el txtbox, mostrarlo en el y capturar y guardar ese numero en la bd, obviamente cambiando la propiedad de codp_id de int a numérico. Les dejo el código para ver como poder solucionar este problema que no se me ocurre como.

Atentamente

Esteban

Module Module1
'(CONEXION BD)
 Public cn As New SqlClient.SqlConnection("Data Source=THUNDER-PC;Initial Catalog=cpagare;Integrated Security=True")
 End Module

 Private Sub Btngrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btngrabar.Click
 Dim func As Long = CLng(cbbfun.SelectedValue)
 Dim tipo As Long = CLng(cbbtipo.SelectedValue)
 Dim a As String
 Dim fecha As Date = DateTimePicker1.Value
 Dim sFec As String = "CAST('" & fecha.Year.ToString().Trim() & _
 fecha.Month.ToString().Trim().PadLeft(2, "0") & _
 fecha.Day.ToString().Trim().PadLeft(2, "0") & _
 " 00:00:00' AS DATETIME)"
 If CheckBox1.Checked = True Then
 a = "si"
 Else
 a = "no"
 End If
 If Txtrut.Text = "" Then
 MsgBox("ingresar rut")
 ElseIf Txtrut.TextLength <= 9 Then
 MsgBox("al menos debe ser de 10 digitos")
 Else
 Dim grabar As SqlCommand = cn.CreateCommand
 grabar.CommandText = "insert into pagares values ( " & sFec & ", '" & func & "', '" & Txtrut.Text & "', '" & tipo & "','" & a & "')"
 cn.Open()
 grabar.ExecuteNonQuery()
 MsgBox("se ingreso")
 cn.Close()
 Me.Refresh()
 Txtrut.Text = ""
 Txtnomp.Text = ""
 Txtape.Text = ""
 End If
 End Sub

1 respuesta

Respuesta
1

Lo puedes hacer más fácil, tomar directamente de la BD el último ID insertado con un Select

Select Top 1 codp_id From pagares order by desc

Si tienes dudas me lo haces saber.

muchas gracias me sirvió mucho, pero , al tener la tabla vacía me da un error que es el siguiente.-

"no se encotro indexoutrangeexeption

esto es porque como la tabla esta vacía no me muestra nada, como podría solucionar esto con algún if o for que recorra la tabla, lo otro que también había pensado es dejar el campo codp_id como numérico y al mostrar el id en el textbox capturarlo y guardarlo, bueno en el primero caso con el id int, al guardar no me muestra el siguiente numero, debe faltarme algo en la consulta como un "refrescar tabla", y en la segunda opción sencillamente no muestra el siguiente registro.

cual seria la forma mas fácil para solucionar este tema.

>

Dim consulta As New Data.SqlClient.SqlDataAdapter("select top 1 codp_id from pagares order by codp_id asc", cn)
 consulta.Fill(tabla)
 TextBox1.Text = Val(tabla.Tables(0).Rows(0).Item("codp_id")) + 1

mmmm estimado he cambiado algo y creo que por hay vamos

Dim consulta As New Data.SqlClient.SqlDataAdapter("select isnull(count(codp_id),0) as codp_id from pagares", cn)
 consulta.Fill(tabla)
 TextBox1.Text = Val(tabla.Tables(0).Rows(0).Item("codp_id")) + 1

con esto claro esta muestro el ultimo registro y le sumo 1 para poder grabar, pero al grabar en el textbox1.text no me actualiza el numero.

Debes controlar que tengas algún registro en la tabla, haciendo un Count de los Rows, si es 0, asumes el 1 para tu TextBox.

También noto que usas VAL, eso es de VB6, usa Interger. Parse para pasarlo a número.

If tabla7.Rows.Count > 0 Then
 For i = 0 To tabla7.Rows.Count - 1
mostrar resultado.......

tu dices algo así, tendría, esto tendría que ir en el load del form???

Dim consulta As New Data.SqlClient.SqlDataAdapter("select isnull(count(codp_id),0) as codp_id from pagares", cn)
 consulta.Fill(tabla)
    If tabla7.Rows.Count > 0 Then
         For i = 0 To tabla7.Rows.Count - 1
TextBox1.Text = Val(tabla.Tables(0).Rows(0).Item("codp_id")) + 1

en el código seria algo así??? tengo mis dudas, tendría que también declarar una variable i como interger y en ves de 0 colocar tables(i).rows(i)?????

agradecería tu comentario. y gracias me ha sido de mucha tu ayuda

Primero el Select que haces en el SqlDataAdapter no te asegura que te de el último ID

Segundo no entiendo por que lo metes en un FOR.

Lo demás está bien, con excepción del VAL que ya te mencioné.

a lo que llegue fue a esto, esta bien??? en el load del form

cn.Open()
 Dim tabla As New Data.DataSet
 Dim consulta As New Data.SqlClient.SqlDataAdapter("select codp_id from pagares order by codp_id asc", cn)
 consulta.Fill(tabla)
 If tabla.rows.count > 0 Then
 TextBox1.Text = Integer.Parse(tabla.Tables(0).Rows(0).Item("codp_id")) + 1
 End If
 cn.Close()

pero tengo un error en el if tabla.rown no es miembre de system.data.dataset

algún comentario sobre esto.-

El código sería así:

 If tabla(0).Rows.Count > 0 Then

Y un Else para si no se cumple el IF asigne 1 al TextBox1.Text

tengo un error. Error 1 No se puede indizar la clase 'System.Data.DataSet' porque no tiene ninguna propiedad predeterminada. d:\Users\thunder\Documents\Visual Studio 2008\Projects\control pagares\control pagares\Principal.vb 35 12 control pagares

hen bueno igual gracias por tu ayuda buscare la forma de solucionarlo ya me duele la cabeza XD

Así:

Dim tabla As New Data.DataSet()

Si te fui de ayuda cierra y valora la pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas