[Visual Basic] Duda en proyecto final de DAI

Puagh

Muy buenas, hamijos míos. No sé si esto irá en este subforo, pero supongo que sí.

Pues resulta que estoy haciendo el proyecto final de DAI, una aplicación de un restaurante, y estoy atascado en la parte de añadir un nuevo usuario a la base de datos.

Pongo el poblema: Primero me conecto a la base de datos y lleno el dataset con lo que hay en la tabla "Camareros":

'Creamos el adaptador
        Me.oDataAdapter = New OleDbDataAdapter("SELECT * FROM Camareros", oConexion)

'Creamos el commandbuilder
        Dim oCommBuild As OleDbCommandBuilder = New OleDbCommandBuilder(oDataAdapter)

'Creamos el dataset
        Me.oDataSet = New DataSet()

'Nos conectamos a la BD
        oConexion.Open()

'Llenamos el dataset con el adaptador
        Me.oDataAdapter.Fill(oDataSet, "Camareros")

'Nos desconectamos de la BD
        oConexion.Close()

Luego le meto los datos del nuevo camarero y su password, y le doy al botón de Agregar:

'Procedemos a dar de alta un nuevo usuario. Para ello, primero declaramos un nuevo DataRow
            Dim oDataRow As DataRow

'Obtenemos un nuevo objeto fila de la tabla del dataset
            oDataRow = Me.oDataSet.Tables("Camareros").NewRow()

'Asignamos los valores a los campos de la nueva fila
            oDataRow("Nombre") = txtnombre.Text
            oDataRow("Password") = txtpassword.Text

'Añadimos el objeto fila a la colección de filas de la tabla del dataset
            Me.oDataSet.Tables("Camareros").Rows.Add(oDataRow)

'Actualizamos los cambios realizados en el dataset contra la base de datos real
            Me.oDataAdapter.Update(oDataSet, "Camareros")

'Mostramos un mensaje de confirmación
            MessageBox.Show("Nuevo usuario introducido correctamente: " & oDataRow("Nombre"), "Operación realizada")

Bien, pues en esta línea me da error:

'Actualizamos los cambios realizados en el dataset contra la base de datos real
            Me.oDataAdapter.Update(oDataSet, "Camareros")

Me da la siguiente excepción:

No se controló OleDbException
Error de sintaxis en la instrucción INSERT INTO.

Probablemente sea una tontería, pero llevo ya un buen rato intentando solucionarlo y no hay manera. A ver si alguno me podéis ayudar.

Muchas gracias por adelantado.

JuAn4k4

Nose nada de vb, pero si creas una columna, tienes que añadir despues otra vez la columna ? linea 4 segundo code -> nueva col, linea 11 segundo code -> añadir col

De verdad hay que hacer todo eso para añadir una nueva columna ?

Puagh

#2, supongo que te refieres a filas, no a columnas.

Y sí, creo que es así. En la línea 4 se crea una nueva fila vacía, que se rellena luego, y en la línea 11 se introduce esa línea ya llena en la tabla.

Probablemente se podría hacer más sencillo, pero soy un poco cazurro y me aclaro mejor así.

JuAn4k4

Pues lo logico seria que al crearla despues hicieras update de la fila vacia y ya esta, no crearla, meter otra, update. ¿ no ?

Ahora edito

Mira por aqui:
http://msdn2.microsoft.com/es-es/library/system.data.common.dataadapter.update(VS.80).aspx

Puagh

Sorry, pero no te entiendo...

#6: ¿?

Y0K3S3

mira si tu identificador de fila (digo yo que tendras un Id en la tabla camareros) es autonumerico/autoincremental.

pd: Edite pq no habia visto que ya habias declarado el commandbuilder.Seguramente es lo que te digo del identificador de fila.

Tb deberias poner

Me.oDataset.Tables("Camareros").AcceptChanges()

JuAn4k4

#5 Se refiere a la columna con el ID ( Clave Primaria ).

Tendras:

claveCamareros - Nombre - Password

Para hacer el insert tendras que tener valor en todos los campos, aunque sea Null ( si tienes en la bd )

Y0K3S3

#7

El proceso que sigue a la hora de crear una fila nueva es correcto.Se crea una fila (plantilla) se llena se añade y se guarda.

Eso que comenta 7 de las columnas es correcto.

Puagh

Había sido tan idiota que había hecho la base de datos poniendo el Nombre como clave principal, haciendo que no pudiera haber 2 camareros con el mismo nombre. Pero bueno, ya he metido un campo de clave.

Lo que no sé ahora es como coño coger el último valor de la clave para meterle automáticamente al nuevo camarero como clave el último número incrementado en 1.

Es decir, si tengo

3 - pepito - 1234
4 - maría - 3333

no sé como coger el valor 4 y almacenarlo en una variable para luego meter en el campo "clave", la variable +1

Y0K3S3

el campo debe ser autonumerico. Solo eso, y no tendras que hacer nada mas.No tienes que ponerlo como dato dentro Row que metas despues en el AddRow

Puagh

Ok, de puta madre. Lo he puesto autonumérico.

Pero el fallo por el cual abrí el hilo me sigue dando :(

Y0K3S3

Puedes dar mas informacion acerca del error¿?

O que bbdd usas access oracle¿?

Puagh

Uso access, por eso uso una conexión OleDb.

En el primer post he intentado explicar el error lo más ampliamente posible. Tras crear una fila nueva e introducirle valores, la guardo en el DataSet.

Pero luego hay que actualizar físicamenta la tabla, y es donde me da error. Me aparece la excepción que he escrito en #1.

Soltrac

Lo q te falla es el autonumerico seguro

Prueba a añadir manualmente una linea y veras como te falla.

PD: No hace falta abrir la conexion para hacer un fill.

Puagh

#14, entonces cómo lo hago?

Y0K3S3

#1

Has hecho esto? (despues del update)

Me.oDataset.Tables("Camareros").AcceptChanges()

si lo has hecho prueba a cambiar el update por este

 Me.oDataAdapter.Update(oDataSet.GetChanges(), "Camareros")

Y puesto que has asignado un commandbuilder deberias poner esto:

oDataAdapter.UpdateCommand = oCommBuild.GetUpdateCommand
oDataAdapter.InsertCommand = oCommBuild.GetInsertCommand
oDataAdapterDeleteCommand = oCommBuildGetDeleteCommand
Puagh

#16, he probado a poner tu primer código y me da el mismo error :(. También sustituyendo mi update por el tuyo del segundo código, idem de idem. Y metiendo los comandos esos del commandbuilder tampoco cambia :(

Pero parece ser que al final quizá no necesitemos mantener la base de datos. Estamos a espera de que el profesor nos lo diga. Aún así me gustaría saber cómo se hace para futuras aplicaciones...

Y0K3S3

#17

Mas cosas no se que decirte. Seguro que es algo tonto pero sin compilarlo yo mismo es dificil verlo.

Puagh

Bueno, gracias a todos de igual forma, voy a ver si encuentro algo más por ahí =)

Riu

#1 por lo general los restaurantes no requieren de dicho sistema , un camarero poniendo su pass?¿?¿ xdd por lo demas way no se como va vb pero me parece una birria de proyecto, desde el respeto eh , podrias currartelo un poco mas hacer una base de datos asi es sencillo y rapido , vas a tardar 1 semana en hacer esa aplicacion , por que basicamente siempre haras lo mismo conectar y desconectar los datasets para actualizar la BD, despues otro problema que veo es la poca originalidad del programa, conozco a 5 personas y llevo solos 2 años en ese instituto donde estudio dai que han hecho lo mismo que tu, yo no voy a tirar ni de borland ni visual basic ni nada de eso, ya se utilizarlo en eso consiste el modulo.. voy a hacer una aplicacion web con base de datos para una tienda online, que requiere mas que una simple base de datos y poco mas.., pero vamos ya como tu veas y donde hagas las practicas y tal pq si donde estas usan vb pues aprovechas y lo haces alli .. xdd

Puagh

#20, es lo que me mandan. Si quieres cuéntale esto a mi profesor :P

Si te apetece te doy su mail xD

Bueno, hoy entrego el proyecto. Ya me salió la cosa por la que abrí el hilo y a ver si todo va bien. Besos, guapos míos.

Riu

#21 tu profesor te manda eso por que es de lo que entiende y de ahi no sale ya que para evaluartelo tiene que conocer ese lenguaje de programacion y como funciona ese programa, mis profesores son mas competentes me dicen que haga cosas nuevas y que les mande lo que yo estudio para ellos aprenderlo y saber lo que hago o quiero hacer..

Soltrac

#22 Da coraje lo sobrado q vas en tus posts...

Una tienda virtual, amigo mío, tiene los mismos secretos q lo q va a hacer #1, es decir, bastante pocos.

PD: Yo mismo tengo una Tienda Virtual hecha desde 0 en Visual basic (ASP .NET). Si quieres te la enseño, no hacen falta ningunos conocimientos sobrados ni nada.

Usuarios habituales

  • Soltrac
  • Riu
  • Puagh
  • Y0K3S3
  • JuAn4k4