Visual Basic.NET - Exception da.Fill(ds, "IdPedido") Visual.net

   
Vista:

Exception da.Fill(ds, "IdPedido") Visual.net

Publicado por @nd3[R]-Boy (10 intervenciones) el 26/09/2010 22:35:08
http://www.lawebdelprogramador.com/news/agregar.php?id=192&texto=Visual+Basic.NET

Hola amigos y camaradas, vengo a ustedes pidiendo una asesoria.
Tengo un proyecto para entrar en mi universidad, hacerca de realizar un programa para una empresa X. Dicho programa maneja, empleado, nomina, clientes, productos, proveedores, pedidos y una factura.
Realizar la base de datos en ACCESS con las tablas que mencione anteriormente.
Realize la conexion a la base de datos desde el visual studio 2008 sin ningun problema, es mas los primeros formulario de clientes, productos, y proveedores me funcionan correctamente.
Mi problema radica en el formulario de PEDIDOS.
Al querer guardar un dato me tira una exception como la que mensione:
"El número de valores de consulta y el número de campos de destino son diferentes."
y me muestra aqui la exception : da.Fill(ds, "IdPedido")
Averigue y decia que era por que los campos no coincidian, pero no es asi, revise minusiosamente y eso no puede ser.
Aque les dejo la programacion de todo el formulario, espero y me puedan ayudar a arreglar dicho problema..
Para mas informacion dejo un video en youtube para que lo vean donde esta el problema como tal.. y este es el codigo del form.
Aqui esta el link del video con la exception: http://www.youtube.com/watch?v=heeazCTTJx4

Private Sub PedidoBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PedidoBindingNavigatorSaveItem.Click
'Try
Me.Validate()
Me.PedidoBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.SagradaFamilia6DataSet)

Dim cadena As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\anderboy\Desktop\SagradaFamilia6\SagradaFamilia6\SagradaFamilia6.accdb"
Dim conexion As OleDbConnection = New OleDbConnection(cadena)
conexion.Open()
Dim sentenciasql = "insert into Pedido (IdPedido,IdProducto,Cantidad,Descripcion,FechaEntrega) values('" & IdPedidoTextBox.Text & "'" & ",'" & IdProductoTextBox.Text & "'" & ",'" & CantidadTextBox.Text & "'" & ",'" & DescripcionTextBox.Text & "'" & ",'" & FechaEntregaDateTimePicker.Text & "'" & ",'" & TotalTextBox.Text & "')"
Dim comando As OleDbCommand = New OleDbCommand(sentenciasql, conexion)
Dim da As OleDbDataAdapter = New OleDbDataAdapter(comando)
Dim ds As DataSet = New DataSet()
da.Fill(ds, "IdPedido")
conexion.Close()
pmostrar()
MsgBox("Registro almacenado exitosamente", MsgBoxStyle.Information, "Registro almacenado")
'Catch ex As Exception
MsgBox("FATAL ERROR", MsgBoxStyle.Critical)
'End Try

End Sub

Private Sub Pedidos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: esta línea de código carga datos en la tabla 'SagradaFamilia6DataSet.Pedido' Puede moverla o quitarla según sea necesario.
Me.PedidoTableAdapter.Fill(Me.SagradaFamilia6DataSet.Pedido)

End Sub

Private Sub pmostrar()
Dim cadena As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\anderboy\Desktop\SagradaFamilia6\SagradaFamilia6\SagradaFamilia6.accdb"
Dim conexion As OleDbConnection = New OleDbConnection(cadena)
conexion.Open()

Dim sentenciasql = "select * from Pedido "
Dim comando As OleDbCommand = New OleDbCommand(sentenciasql, conexion)
Dim da As OleDbDataAdapter = New OleDbDataAdapter(comando)
Dim ds As DataSet = New DataSet()
da.Fill(ds, "IdPedido")
DataGridView1.DataSource = ds.Tables(0).DefaultView

conexion.Close()
End Sub
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
Imágen de perfil de francisco

RE:Exception da.Fill(ds,

Publicado por francisco (162 intervenciones) el 26/09/2010 22:49:36
Dim sentenciasql = "insert into Pedido
(IdPedido,IdProducto,Cantidad,Descripcion,FechaEntrega) values('" & IdPedidoTextBox.Text & "'" & ",'" & IdProductoTextBox.Text & "'" & ",'" & CantidadTextBox.Text & "'" & ",'" & DescripcionTextBox.Text & "'" & ",'" & FechaEntregaDateTimePicker.Text & "'" & ",'" & TotalTextBox.Text & "')"


Dim sentenciasql = "insert into Pedido
(IdPedido,IdProducto,Cantidad,Descripcion,FechaEntrega) values('" IdPedidoTextBox.Text , IdProductoTextBox.Text ,CantidadTextBox.Text , DescripcionTextBox.Text ,FechaEntregaDateTimePicker.Text , TotalTextBox.Text "')"

Creo que las comillas que has puesto entre el campo de labase de datos la relacciona como si fuera otro campo por eso te dice que no coinciden con los campos que hay en la
base de datos pruebalo quitando las comillas,elsimbolo de separacion

dime si te sirve
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:Exception da.Fill(ds,

Publicado por @nd3[R]-Boy (10 intervenciones) el 27/09/2010 02:41:01
Muchas gracias por responder.. me di cuenta de varios errores, y me excuso por crear molestia.
El error esta en la fecha, ya que la fecha el visual la lee en forma larga osea viernes, 7 de agosto del 2010, y al pasarla a la base de datos no la reconoce como tal, gracias a un compañero que me dijo que la tenia que convertir de la siguiente manera para que la capturar bien access
FechaEntregaDateTimePicker.Format = DateTimePickerFormat.Short

De verdad te agradesco de todo corazon.
Tengo una ultima pregunta.
Probando el string de conexion no me lo coge tal y como me lo tira en un comienso visual.net como ven me toco modificarlo.

El string original es este y no me funca.
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\bin\Debug\SagradaFamilia4.accdb

Y el string que me toco modiicar para que se conectara es este:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\anderboy\Desktop\SagradaFamilia6\SagradaFamilia6\SagradaFamilia6.accdb

la base de datos esta dentro de la bin/debug del proyecto
agradeceria alguna ayuda del por que no me lo reconoce el visuall..
de ante mano muchas gracias..

vandalo89@hotmail.com
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:Exception da.Fill(ds,

Publicado por Jairo arturo segura morales (10 intervenciones) el 27/09/2010 16:49:45
Hola....

Sabes ojala me permitas hacerte algunas observaciones hablando como colegas:

1.- Ten cuidado con tus instrucciones SQL no se si te haz topado con el caso de que cuando un campo o dato contiene una apostrofe o comita se truena algo parecido a esto: Joe's ..... pues nuestro insert into o update contiene apostrofe para ser ejecutadas asi que utiliza un replace

2.- Te sugiero convertir las fechas a un tipo de datos double recuerda que las fechas realmente son double y usandolas como double no tendras problema alguno.

3.- para la ruta de tu db si esta en el mismo directorio de la aplicacion puedes ocupar la funcion CurDir() que devuelve o regresa el directorio actual en el que te encuentras o de tu aplicacion no se si sera lo que necesites saludos cordiales
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:Exception da.Fill(ds,

Publicado por @nd3[R]-Boy (10 intervenciones) el 27/09/2010 22:11:17
Muchas gracias arturo por la respuesta.
Claro que toda critica constructiva es bien resivida, soy un estudiante que ama la programacion y soy muy curioso..
Te agradeceria enormemente que me explicaras mejor lo de CurDir() no lo comprendo muy bien

estos son los strings de conexion que tengo tanto el que me dio el visual por defecto, y el que me toco modificar por el momento

El string original es este y no me funca.
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\bin\Debug\SagradaFamilia4.accdb

Y el string que me toco modiicar para que se conectara es este:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\anderboy\Desktop\SagradaFamilia6\SagradaFamilia6\SagradaFamilia6.accdb

Y asi lo estoy aplicando en mis formularios, este es un ejemplo

Dim cadena As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\anderboy\Desktop\SagradaFamilia6\SagradaFamilia6\SagradaFamilia6.accdb"
Dim conexion As OleDbConnection = New OleDbConnection(cadena)
conexion.Open()
Dim sentenciasql = "insert into Pedido

Como ves el string de conexion que tengo es el que me toco modificar, si me explicaras mejor como usar el CurDir() en mi proyecto te lo agradeceria enormemente.

De igualforma muchas gracias a todos los que se toman la molestia de ayudar a este novato pero apasionado de la programacion.

Francisco gracia por la molestica y Jairo igualmente por la explicacion.
Espero y me colaboren explicandome como aplicarlo...

De igual forma les dejo mi correo
vandalo89@hotmail.com

Gracias.
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:Exception da.Fill(ds,

Publicado por Jairo Arturo Segura Morales (10 intervenciones) el 28/09/2010 14:02:07
Ok mira cuando compilamos o ejecutamos nuestro .exe se genera en release y en debug hasta ahi estamos de acuerdo no??? Pues CurDir regresa el Path o direccion del ejecutable o del programa por ejemplo si tu aplicacion se encuentra en C:\MiProyecto\bin\Release CurDir() te regresa ese path o si estas depurando el programa se ejecutara en C:\MiProyecto\bin\Debug y CurDir() te regresara ese path de hecho puedes poner en el evento load la llamada a CurDir y que te muestre el resultado de la funcion en un textbox o msgbox o en un debug.print si no lo comprendes me avisas y te mando un ejemplito en visual saludos cordiales

PD: No se te ha ocurrido dar la opcion de seleccionar la ruta de la DB al iniciar el proyecto? digo podria ser otra solucion si es que piensas trabajar en red tu sistemita :) 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:Exception da.Fill(ds,

Publicado por @nd3[R]-Boy (10 intervenciones) el 28/09/2010 17:16:36
Hola Gracias por tomarte el tiempo.
E intentado utilizar el siguiente metodo,
Dim ruta As String
ruta = Application.StartupPath
Dim cadena As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " & ruta & "\SagradaFamilia6.accdb"
Pongo los puntos de interseccion y verifico que almacene la informacion, efectivamente asi lo hace, pero antes de cerrar la conexion me tira una exception.

Tambien prove tu metedo, en el evento load al cual asigne a un textbox lo siguiente
TextBox2.Text = CurDir()
Me devuelve lo siguiente: C:\Users\anderboy\Desktop\SagradaFamilia6\SagradaFamilia6\bin\Debug

De igual manera lo hice con esto:
TextBox1.Text = My.Computer.FileSystem.CurrentDirectory
y me devuelve lo mismo.

Perdon por ser tan insistente, pero de igual manera ya te agregue al msn para qeu podamos hablar.
De ante mano muchas gracias.

att: Un programador novato en apuros jaja
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