el ultimo id es 2567
y que en un textbox me muestre 2568
De antemano gracias por la ayuda
Saludos

| ||||
Respuesta: Ultimo id Si la idea es hacer una reserva de ese valor para ser usado en un nuevo INSERT en la tabla de la base de datos, eso depende de cómo se haga en ese DBMS. Oracle, DB2, SQL Server, Postgre, MySQL, todos los dDBMS tienen una forma específica de lograrlo. Oracle usa secuencias, MySQL usa un modo de hacer SELECT para INSERTs, etc. ¿Con qué vas a trabajar?
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Ultimo id Bueno mi mensaje no talvez no puede ser la respuesta para MYSQL pero dejo aqui para SQL SERVER mediante un procedure:
Código SQL:
Saludos!Ver original ![]()
__________________ Internet es tener todo el conocimiento global a tu disposición. Desarrollo de Software - Ejemplos .Net |
| ||||
Respuesta: Ultimo id OK. Entonces lo que necesitas hacer a nivel de bases de datos, es un boqueo de actualización, cosa que puedes hacer declarando una transacción o bien haciendo un SELECT ... FROM ... FOR UPDATE, como puedes encontrar descripto en el manual de referencia (15.10.6. Bloqueo de la próxima clave (Next-Key Locking): evitar el problema fantasma). La transacción tiene la ventaja de no tener que definir nada. Alcanza con usar el .BeginTransaction de la clase MysqlConnection, pero el inconveniente de que bloquea todas las tablas para actualización. En cambio, el SELECT ... FOR UPDATE puede requerir leer previamente la tabla y la ventaja de sólo bloquear una única tabla. Si no vas a usar usuarios concurrentes, no hay problema, usa cualquiera. Si tienes usuarios concurrentes, la cosa se complica. Puede ser que bloquear la tabla sea más eficiente. Cualquiera que sea el caso, hay una cosa que tendrás que tener en cuenta: Tanto la conexión con los objetos que lean la base de datos no pueden ser transitorios, es decir, no pueden ser objetos creados en un método o una función en forma local. Tienen que ser objetos permanentes de la clase o de la aplicación, por cuanto la destrucción del objeto conexión, el de transacción y los lectores, conllevan una implícita cancelación de la transacción (ROLLBACK) y la consiguiente liberación de todos los bloqueos. Normalmente, la mejor forma de solucionar esto es que todo lo que sea manejo de la base de datos debe ser una clase específica, y se debe instanciar una sola vez en la aplicación para cada sesión de cada usuario, y ser permanente mientras la sesión del usuario exista. De ese modo podrás llamar al objeto desde cualquier parte de la aplicación y no tendrás que abrir múltiples veces las conexiones, o crear en diferentes funciones y métodos los objetos necesarios. Así, el manejo de una transacción se vuelve más simple. El problema de no hacerlo de este modo y simplemente abrir la base, leer el último ID y luego cerrar la conexión, es que si tienes usuarios concurrentes, puede que otro usuario esté haciendo la misma tarea; al hacerlo, si él inserta el registro antes que tu, al pretender insertarlo por tu cuenta estarán usando el mismo numero de ID, y como ese numero es una PK, sencillamente te dará un error de clave duplicada, y no insertará el registro. ¿Se entiende?
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Ultimo id Cita: La sintaxis de los SP en SQL Server no es aplicable para MySQL. No existe un lenguaje estandar para SP, por lo que migrarlo es un problema complicado.
Iniciado por Aquaventus ![]() Bueno mi mensaje no talvez no puede ser la respuesta para MYSQL pero dejo aqui para SQL SERVER mediante un procedure:
Código SQL:
Saludos!Ver original ![]()
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Ultimo id Exacto pero lo dejé por si a alguien en un futuro le pueda servir ya que el mensaje inicial de este tema no define sobre qué motor es, por lo que los usuarios puedan buscar con el mismo titulo pero para SQL, por lo que pensé que talvez sea útil para alguien que busca lo mismo pero para SQL, me doy a entender? ![]() ![]()
__________________ Internet es tener todo el conocimiento global a tu disposición. Desarrollo de Software - Ejemplos .Net |
| ||||
Respuesta: Ultimo id En esencia, la idea es obtnener el máximo que haya:
Código MySQL:
Y luego usarlo para bloquearla: Ver original
Código MySQL:
Ver original El otro caso requiere que el objeto conexión y el de transacción sean globales, supongamos
Código vb:
Ver original luego, una vez creada y abierta la conexión haces:
Código vb:
Ver original Y después, según el caso la confirmas o la cancelas.
Código vb:
Ver original
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Ultimo id [QUOTE=gnzsoloyo;3915543]En esencia, la idea es obtnener el máximo que haya:
Código MySQL:
Y luego usarlo para bloquearla: Ver original
Código MySQL:
Ver original Estoy intentando hacerlo de esta manera pero no se como asignar el valor maximo del id a un textbox para que de ahi pueda utilizarlo??? intento con este codigo no se si estoy haciendolo bien o me estoy equivocando Cita: Saludos y gracia spro la ayudaPrivate Sub Obtener_ID() Try Dim cad As New MySqlConnection("Database=Pacientes;Data Source=localhost;User Id=root;Password=utan") cad.Open() Dim sql As String = "SELECT MAX(id) FROM generales order by id" Dim cmd As New MySqlCommand(Sql, cad) Dim dr As MySqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection) While dr.Read Dim value As Object = dr.Item("id") If value IsNot DBNull.Value Then TextBox22.Text = CStr(value) End While dr.Close() Catch ex As MySqlException MessageBox.Show("Error:" & ex.Message) Catch ex As Exception MessageBox.Show("Error:" & ex.Message) End Try End Sub ![]() |
| ||||
Respuesta: Ultimo id Veamos algo más simple: Una función que devuelva cero (0) si la tabla está vacía, cero si se produce un error y el próximo ID si hay al menos un registro. - No necesitas un DataReader, con un DataAdapter alcanza. - No debes usar un ORDER BY, si estás consultando por MAX(), ya la función MAX() no sólo te esta devolviendo el mayor de todos, sino que además sólo devuelve un registro. La idea es:
Código vb:
Usar un DataReader en una operación no secuencial no tiene ningún sentido. Tiene lógica cuando vas a obtener un conjunto de registros y realizar alguna operación on-line con la tabla en forma secuencial. No es tu caso, ya que sólo quieres un dato.Ver original De hecho, ni siquiera requieres un datatable. Alcanzaría con esto:
Código vb:
Esto es porque ExecuteScalar() devuelve un único valor, si la consulta devuelve precisamente un sólo campo y un registro, como en este caso. Ver original
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Ultimo id En donde quieras. La función simplemente devuelve un entero, en dónde la invoques dependerá de lo que tu formulario haga. Yo supongo que será en el momento de activar el formulario para ingresar un nuevo registro,pero como dije, eso depende de ti.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Ultimo id ![]() ![]()
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
Etiquetas: |