Problema con base de datos y VB.net

Iniciado por oscarj24, 21 Junio 2010, 01:52 AM

0 Miembros y 1 Visitante están viendo este tema.

oscarj24

Hola a todos, soy nuevo en VB.Net y estoy haciendo una aplicacion que me permite ver la informacion obtenida mediante un formulario en PHP. Todo esto utilizando el Driver ODBC.
;-)
Hasta ahi todo bien

El formulario es el siguiente:


El Tabla SQL es la siguiente:

(utilizo todo VARCHAR ya que en la aplicacion solo muestro datos,
no efectuo operaciones con los valores, por lo tanto no es necesario
reconocer un valor INT :))

Y mi aplicacion, la siguiente:


Ahora, mis problemas son los siguientes:

1) Quiero hacer que el comboBox con los ID's carguen en la posicion 1
o sea que la posicion 0 sea "Seleccione".. ejemplo:

cboID.Items.Add("Seleccione") -> Posicion cero
cboID.Items.Add("ID01") -> Posicion uno
Y Asi todos los ID's de la DB, es eso posible?

2) Tengo un problema al actualizar los datos. Al dar click en "Editar"
y luego "Grabar" y ejecutar la consulta UPDATE en la DB.
SIEMPRE, asi el textbox este vacio o lleno, SIEMPRE me agrega un
NULL a la base de datos y nose como arreglar eso. Luego, cuando
intento ver los valores modificados, el programa se cae ya que
dice que un tipo DBNull no puede ser convertido a tipo String (Este
problema tampoco lo se controlar)

Espero me puedan ayudar a controlar los NULL's
A ver porque siempre se envian los datos como NULL
y a poder arreglar el comboBox como deseo

Aqui les paso el codigo del Boton Grabar:
Código (vbnet) [Seleccionar]
Private Sub Grabar(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGrabar.Click
        Dim obj As New frmLogin()
        If operacion = TipoOperacion.Ninguna Then
            MessageBox.Show("No hay nada que 'Grabar'.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        Else
            If txtNombres.Text.Trim.Length > 0 Then
                If txtApellidos.Text.Trim.Length > 0 Then
                    If txtDNICarneExtranjeria.Text.Trim.Length > 0 Then
                        If txtTelefonoFijo.Text.Trim.Length > 0 Or txtCelular.Text.Trim.Length > 0 Then
                            obj.con.Open()
                            Dim cmd As New OdbcCommand("", obj.con)
                            Dim mensaje As String = ""
                            If MessageBox.Show("Seguro de Guardar la Inscripción?", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                                If operacion = TipoOperacion.Actualizar Then
                                    cmd.CommandText = "UPDATE inscripciones SET Nombres=@Nombres,Apellidos=@Apellidos,DNI_CarneExtranjeria=@DNI_CarneExtranjeria,Tipo_Persona=@Tìpo_Persona,Empresa=@Empresa,Cargo=@Cargo,Direccion=@Direccion,Telefono_Fijo=@Telefono_Fijo,Telefono_Celular=@Telefono_Celular,Tipo_Comprobante=@Tipo_Comprobante,Razon_Social=@Razon_Social,RUC=@RUC,Nombre_Voucher=@Nombre_Voucher WHERE ID=" & cboID.SelectedValue
                                    mensaje = "Inscripción Actualizada."
                                End If
                                cmd.Parameters.Add("@Nombres", OdbcType.VarChar, 50).Value = txtNombres.Text
                                cmd.Parameters.Add("@Apellidos", OdbcType.VarChar, 50).Value = txtApellidos.Text
                                cmd.Parameters.Add("@DNI_CarneExtranjeria", OdbcType.VarChar, 15).Value = txtDNICarneExtranjeria.Text
                                cmd.Parameters.Add("@Tipo_Persona", OdbcType.VarChar, 13).Value = txtTipoPersona.Text
                                cmd.Parameters.Add("@Empresa", OdbcType.VarChar, 60).Value = txtEmpresa.Text
                                cmd.Parameters.Add("@Cargo", OdbcType.VarChar, 30).Value = txtCargo.Text
                                cmd.Parameters.Add("@Direccion", OdbcType.VarChar, 100).Value = txtDireccion.Text
                                cmd.Parameters.Add("@Telefono_Fijo", OdbcType.VarChar, 25).Value = txtTelefonoFijo.Text
                                cmd.Parameters.Add("@Telefono_Celular", OdbcType.VarChar, 25).Value = txtCelular.Text
                                cmd.Parameters.Add("@Tipo_Comprobante", OdbcType.VarChar, 7).Value = txtTipoComprobante.Text
                                cmd.Parameters.Add("@Razon_Social", OdbcType.VarChar, 60).Value = txtRazonSocial.Text
                                cmd.Parameters.Add("@RUC", OdbcType.VarChar, 11).Value = txtRUC.Text
                                cmd.Parameters.Add("@Nombre_Voucher", OdbcType.VarChar, 50).Value = txtNombreVoucher.Text
                                Dim N As Integer = cmd.ExecuteNonQuery
                                If N > 0 Then
                                    MessageBox.Show(mensaje, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information)
                                    btnEliminar.Enabled = True
                                    btnGrabar.Enabled = False
                                    ConsultarInscrito()
                                    cboID.Focus()
                                Else
                                    MessageBox.Show("No se pudo Realizar la Operación.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                                    btnEliminar.Enabled = True
                                    btnGrabar.Enabled = False
                                    cboID.Focus()
                                End If
                                obj.con.Close()
                                operacion = TipoOperacion.Ninguna
                                HabilitarControles(False)
                                cboID.Enabled = True
                                btnCancelar.Enabled = False
                                cboID.Focus()
                            Else
                                txtNombres.Focus()
                            End If
                        Else
                            MessageBox.Show("Ingrese al menos un 'Teléfono'.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                            txtTelefonoFijo.Focus()
                        End If 'Telefonos
                        Else
                            MessageBox.Show("Ingrese el 'DNI o Carne de Extranjería'.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                            txtDNICarneExtranjeria.Focus()
                        End If 'DNI o Carne Extranjeria
                    Else
                        MessageBox.Show("Ingrese los 'Apellidos'.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                        txtApellidos.Focus()
                    End If 'Apellidos
                Else
                    MessageBox.Show("Ingrese los 'Nombres'.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                    txtNombres.Focus()
                End If 'Nombres
        End If
    End Sub



Y el codigo del metodo Consultar Inscrito que se usa el boton Grabar para hacer una especie de "Refresh" cuando los datos se grabaron:
Código (vbnet) [Seleccionar]
Private Sub ConsultarInscrito()
        Dim obj As New frmLogin()
        obj.con.Open()
        Dim cmd As New OdbcCommand("SELECT Nombres,Apellidos,DNI_CarneExtranjeria,Tipo_Persona,Empresa,Cargo,Direccion,Telefono_Fijo,Telefono_Celular,Tipo_Comprobante,Razon_Social,RUC,Nombre_Voucher FROM inscripciones WHERE ID=" & cboID.SelectedValue, obj.con)
        Dim drd As OdbcDataReader = cmd.ExecuteReader(CommandBehavior.SingleRow)
        If drd.HasRows = False Then
            MessageBox.Show("No hay 'Datos' por mostrar'.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
        If drd IsNot Nothing Then
            If drd.HasRows Then
                drd.Read()
                txtNombres.Text = drd.GetString(0)
                txtApellidos.Text = drd.GetString(1)
                txtDNICarneExtranjeria.Text = drd.GetString(2)
                txtTipoPersona.Text = drd.GetString(3)
                txtEmpresa.Text = drd.GetString(4)
                txtCargo.Text = drd.GetString(5)
                txtDireccion.Text = drd.GetString(6)
                txtTelefonoFijo.Text = drd.GetString(7)
                txtCelular.Text = drd.GetString(8)
                txtTipoComprobante.Text = drd.GetString(9)
                txtRazonSocial.Text = drd.GetString(10)
                txtRUC.Text = drd.GetString(11)
                txtNombreVoucher.Text = drd.GetString(12)
                wbVoucher.Navigate("http://www.dominio.com/inscripciones/vouchers/" + txtNombreVoucher.Text)
                cboID.Focus()
                btnEditar.Enabled = True
                btnEliminar.Enabled = True
                drd.Close()
            End If
        End If
        obj.con.Close()
        cboID.Enabled = True
        btnEliminar.Enabled = True
    End Sub


GRACIAS y en verdad espero su ayuda  ;D

oscarj24

PD. Olvide decir que tambien me gustaria poder guardar un NULL como un espacio en blanco " " si es que se diera la oportunidad de necesitarlo (nose si sea posible) gracias.