Convertir un valor varchar a smallint

Solo quería molestarte con unas dudas

Actualmente estoy trabajando en Visual Studio 2005 y SQL Server. Ademas estoy realizando una aplicación, mi duda es la siguiente.

Tengo dos ComboBox en donde me aparecen países y departamento

En el ComboBox1 lo utilizo para países, entonces como ya tengo creado las tablas solamente jalo desde el ComboBox1 los países, hasta allí todo esta bien entonces dode tengo problema es en el siguiente combobox que es el ComboBox2 en donde lo utilizo para llamar los departamentos de los países, por ejemplo si en el comboBox1 selecciono Guatemala en el siguiente combobox2 me debe de aparecer solo los departamentos de este país y se selecciono otro país solo me debe de aparecer los departamento de ese país, entonces ya programe el segundo ComboBox2 para realizar la función, pero el problema es que cuando lo ejecuto me manda un mensaje "Error de conversión al convertir el valor varchar "Guatemala" al tipo de dato smallint, he investigado un poco entonces lo que tengo que hacer el convertir ese dato pero lo que no se aun es como hacerlo te envío estos códigos para que veas donde esta mi error.+

Private Sub LeeDatos()

Dim oPaisDs As New DataSet
Dim oPaisDA As New SqlDataAdapter("Select * from PAÍSES", cnnConexion)
oPaisDA.Fill(oPaisDs, "País")

Dim oDepartamentoDs As New DataSet
Dim oDepartamentoDA As New SqlDataAdapter("Select * FROM DEPART WHERE CodPais = '" & CbCodPais.SelectedValue.ToString.Trim & "'", cnnConexion)
oDepartamentoDA.Fill(oDepartamentoDs, "Departamento")

Private Sub LlenaComboBox()

Dim oPaisDs As New DataSet
Dim oPaisDA As New SqlDataAdapter("Select * from PAÍSES", cnnConexion)
oPaisDA.Fill(oPaisDs, "País")
oPaisDA = Nothing
CbCodPais.DataSource = oPaisDs.Tables("País")
CbCodPais.DisplayMember = "CodPais"
CbCodPais.ValueMember = "PaisNombre"

Dim oDepartamentoDs As New DataSet
Dim oDepartamentoDA As New SqlDataAdapter("Select * FROM DEPARTA WHERE CodPais = '" & CbCodPais.SelectedValue.ToString.Trim & "'", cnnConexion)
oDepartamentoDA.Fill(oDepartamentoDs, "Departamento")
oDepartamentoDA = Nothing
CbCodDep.DataSource = oDepartamentoDs.Tables("Región")
CbCodDep.DisplayMember = "CodDep"
CbCodDep.ValueMember = "DepNombre"

Private Sub CargaDatos(ByVal Id As String)

sqlCadena = "SELECT * FROM PAÍSES " & _
"WHERE CodPais "
Dim oPaisDs As New DataSet
Dim oPaisDA As New SqlDataAdapter(sqlCadena, cnnConexion)
sqlCadena = "Select * FROM DEPART WHERE CodPaís= '" & CbCodPais.SelectedValue.ToString.Trim & "'"
Dim oDepartamentoDs As New DataSet
Dim oDepartamentoDA As New SqlDataAdapter(sqlCadena, cnnConexion)

Private Sub CbCodPais_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbCodPais.Leave
TxtCodPais.Text = CbCodPais.SelectedValue
CargaDatos(CbCodPais.Text)
End Sub

1 respuesta

Respuesta
1

El tema aquí pasa por cargar bien el ComboBox, una cosa es el valor que se muestra (DisplayMember) y otra cosa el valor de lo seleccionado, en este caso el código del país (ValueMember).

Una tabla país ha de tener un código de país (valor numérico) y un texto que es el nombre del mismo.

Entonces en la tabla Departamentos, haz de tener el código del departamento (número) el nombre del mismo (texto) y el código del país al que pertenece.

Cuando tu cargas el ComboBox1, al DisplayMember le asignas el campo de texto de la tabla país, y al campo ValueMember el código del país.

Entonces, cuando elijes un valor del ComboBox1, tomas el código del país seleccionado con SelectedValue y se lo asignas al Select de los departamentos, donde el código del país debe ser igual al SelectedValue del ComboBox1

Algo así:

Select CampoTexto, CampoNumero From TablaDepartamento Where CampoNumPais = " & Integer.Parse(ComboBox1.SelectedValue) & 

Con eso llenarás el ComboBox2 con los departamentos del país seleccionado.

Si tienes dudas me lo haces saber.

Gracias por tu ayuda y si lo que dices esta bien, entonces yo ya intente con los códigos que me enviaste y me tira un error el cual es el siguiente "No se controloFormatExcepciony dice lo siguiente "La cadena de entrada no tiene el formato correcto" bueno no se si la aplique de la forma correcta te envío como lo aplique.

Private Sub FormCarCap_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
LlenaComboBox()
End Sub

Private Sub LeeDatos()

Dim oDepartamentoDs As New DataSet
Dim oDepartamentoDA As New SqlDataAdapter("Select DepNom, CodDep From TablaDEPART Where CodPais = " & Integer.Parse(CbCodPais.SelectedValue) & "'", cnnConexion)
oRegionDA.Fill(oRegionDs, "Región")

End Sub

Private Sub LlenaComboBox()

Dim oDepartamentoDs As New DataSet
Dim oDepartamentoDA As New SqlDataAdapter("Select DepNom, CodDep From TablaDEPART Where CodPais = " & Integer.Parse(CbCodPais.SelectedValue) & "'", cnnConexion)
oDepartamentoDA.Fill(oDepartamentoDs, "Departamento")

End Sub

En esta instrucción me tira el error que anteriormente te mencionaba

Private Sub CargaDatos(ByVal Id As String)

sqlCadena = "Select DepNom, CodDep From TablaDEPART Where CodPais = " & Integer.Parse(CbCodPais.SelectedValue)
Dim oDepartamentoDs As New DataSet
Dim oDepartamentoDA As New SqlDataAdapter(sqlCadena, cnnConexion)

End Sub

Private Sub CbClRegCod_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbCodDep.Leave
TxtCodDep.Text = CbCodDep.SelectedValue
CargaDatos(CbCodDep.Text)
End Sub

Espero haberme explicado

En LlenaComboBox saca esto del final del SQL & "'"


Saludos.

Eduardo.

Ya saque lo que me pediste y me sigue tirando el mismo error te envío lo que hice en LLlenaComboBox

Dim oDepartamentoDs As New DataSet
Dim oDepartamentoDA As New SqlDataAdapter("Select DepNom, CodDep From TablaDEPART Where ApPaidCod = " & Integer.Parse(CbCodPais.SelectedValue), cnnConexion)
CbClRegCod.DataSource = oDepartamentoDs.Tables("Departamento")
CbCodDep.DisplayMember = "CodDep"
CbCodDep.ValueMember = "DepNom"

Espero no confundirte y ademas gracias

Estás poniendo DisplayMember al revés con el ValueMember.

Si no es eso márcame en que linea está dando error.

Dim oDepartamentoDs As New DataSet
Dim oDepartamentoDA As New SqlDataAdapter("Select DepNom, CodDep From TablaDEPART Where ApPaidCod = " & Integer.Parse(CbCodPais.SelectedValue), cnnConexion)
CbClRegCod.DataSource = oDepartamentoDs.Tables("Departamento")
CbCodDep.DisplayMember = "CodDep"
CbCodDep.ValueMember = "DepNom"

En esta linea donde te enmarque sucede el error el displayMember y ValueMember estan bien

Yo cometí un error y te dije que le pusieras el Integer. Parse, sácalo que quede así:

CbCodPais.SelectedValue

Igualmente el Display y el Value están alrreves.

Me comentas.

Gracias estabas en lo correcto lo quite y me resulto pero el problemas ahora es esto, me envía un error en la columna que te voy a enmarcar y el error dice No se controlo sqlExcepcion "El nombre de columna 'Guatemala' no es valido"

<br class="scayt-misspell" data-scayt_word="m" data-scaytid="204" />

Dim oDepartamentoDs As New DataSet
Dim oDepartamentoDA As New
SqlDataAdapter("Select DepNom, CodDep From TablaDEPART Where ApPaidCod =
" & (CbCodPais.SelectedValue, cnnConexion)

oDepartamentoDA.Fill(oDepartamentoDs, "Departamento")
CbClRegCod.DataSource = oDepartamentoDs.Tables("Departamento")
CbCodDep.DisplayMember = "CodDep"
CbCodDep.ValueMember = "DepNom"

No se cual sera ahora mi problema, si lo quito la aplicación me corre pero en el combobox no me aparece nada y si lo pongo que si es necesario me tira error.

Debes cambiar esta linea:

CbCodDep.DisplayMember = "CodDep"
CbCodDep.ValueMember = "DepNom"

Por esta:

CbCodDep.DisplayMember = "DepNom"
CbCodDep.ValueMember = "CodDep"

Como te dije en las dos ocasiones anteriores está al revés.

Ya cambie lo que me dijiste pero me sigue dando el mismo error en la linea que esta en negrita

Dim oDepartamentoDs As New DataSet
Dim oDepartamentoDA As New
SqlDataAdapter("Select DepNom, CodDep From TablaDEPART Where ApPaidCod =
" & (CbCodPais.SelectedValue, cnnConexion)
oDepartamentoDA.Fill(oDepartamentoDs, "Departamento")
CbClRegCod.DataSource = oDepartamentoDs.Tables("Departamento")
CbCodDep.DisplayMember = "DepNom"
CbCodDep.ValueMember = "CodDep"

Hay un ( de más entre & y CbCodPais

Tendría que ver más amplio el problema por que a simple vista no veo donde le pones el Guatemala...

Private Sub Form1_Load(ByVal
sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
LlenaComboBox()
End Sub
Private Sub
LeeDatos()
Dim oPaisDs As New DataSet
Dim
oPaisDA As New
SqlDataAdapter("Select * from PAÍSES",
cnnConexion)
oPaisDA.Fill(oPaisDs, "País")
Dim
oDepartamentoDs As New
DataSet
Dim
oDepartamentoDA As New
SqlDataAdapter("Select CodDep, DepDes From DEPART
Where CodPais = " & CbCodPais.SelectedValue, cnnConexion)
oDepartamentoDA.Fill(oDepartamentoDs,
"Departamento")
End Sub
Private Sub
LlenaComboBox()
Dim oPaisDs As New DataSet
Dim
oPaisDA As New
SqlDataAdapter("Select * from PAÍSES",
cnnConexion)
oPaisDA.Fill(oPaisDs, "País")
oPaisDA = Nothing
CbCodPais.DataSource = oPaisDs.Tables("País")
CbCodPais.DisplayMember = "CodPais"
CbCodPais.ValueMember = "PaisDes"
Dim
oDepartamentoDs As New
DataSet
Dim oDepartamentoDA
As New
SqlDataAdapter("Select CodDep, DepDes From DEPART
Where CodPais = " & CbCodPais.SelectedValue, cnnConexion)
oDepartamentoDA.Fill(oDepartamentoDs, "Departamento")
oDepartamentoDA = Nothing
CbCodDep.DataSource = oDepartamentoDs.Tables("Departamento")
CbCodDep.DisplayMember = "CodDep"
CbCodDep.ValueMember
= "DepDes"
End Sub
En esta parte es donde tengo el problema, te explico lo que pasa es
que en el primer combobox se selecciona el país, en este caso utilizo un
combobox y un textbox, en el combobox elijo el país mediante un numero entonces
en el textbox me aparece el nombre del país, entonces lo que estoy intentando
realizar es que cuando seleccione el país me muestre unicamente en el siguiente
combobox los departamentos de ese país, debido a que también los otros
departamentos de los otros países están en esa misma tabla, también te digo que
mi base de datos de sql trabaja con tablas relacioneles, entonces el problemas
es es,e que no puedo hacer ese tipo de instrucción, ademas en la parte de
arriba te muestra la linea donde tengo el problema, como te decia antes cuando
ejecuto el formulario de tira el siguiente error
“No se controlo sqlException y tambien
dice el nombre de columna ‘GUATEMAL’ no es valido
Private Sub
CargaDatos(ByVal Id As
String)
sqlCadena =
"SELECT * FROM PAÍSES " & _
"WHERE
Codpais "
Dim
oPaisDs As New
DataSet
Dim
oPaisDA As New
SqlDataAdapter(sqlCadena, cnnConexion)
sqlCadena = ("Select
CodDep, DepDes From DEPART Where CodPais = " & CbCodPais.SelectedValue)
Dim oDepartamentoDs
As New DataSet
Dim oDepartamentoDA As
New SqlDataAdapter(sqlCadena, cnnConexion)
End Sub
Private Sub CbCodPais_Leave(ByVal
sender As System.Object, ByVal e As
System.EventArgs) Handles CbCodPais.Leave
TxtCodPais.Text = CbCodPais.SelectedValue
CargaDatos(CbCodPais.Text)
End Sub
Private Sub CbCodDep_Leave(ByVal
sender As System.Object, ByVal e As
System.EventArgs) Handles CbCodDep.Leave
TxtCodDep.Text = CbCodDep.SelectedValue
CargaDatos(CbCodDep.Text)
End Sub

Espero que ahora si puedas ayudarme

Entonces tenemos problemas con el CbCodPais. SelectedValue

Haz una marca de depuración una linea antes del error, y abre una ventana de inmediato.

En la ventana de inmediato (cuando el programa pare en la linea marcada), pones lo siguiente:

¿
? CbCodPais. SelectedValue

Eso te debe dar el resultado de lo que tiene.

Evidentemente, lo que te da es un "Guatemala" y no un número que indica el código del país.

Sigo viendo que lo sigues haciendo al revés en algunos casos:

CbCodDep.DisplayMember = "CodDep"
CbCodDep.ValueMember = "DepDes"

El código siempre es el valor y el Display es la descripción.

Busca que todas las asignaciones sean correctas para asegurar que tome bien los valores.

Me comentas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas