Jump to content

[Resolvido] SELECT currency


vascoc
 Share

Recommended Posts

Boas, eu tenho a textbox onde insiro o valor do preço que quero procurar, e ao procurar assim está a dizer que não encontra valores...Mas como podem ver existe um neste exemplo, como é que faço ?

http://img818.imageshack.us/img818/4900/dasnq.jpg

Eis o meu SELECT:

Private Sub picpreco_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles picpreco.Click
 If txtpreco.Text = "" Then
	 MsgBox("Insira o Preço")
 Else
	 Try
		 conn = New SqlCeConnection(My.Settings.HOTEL_DBConnectionString)
		 cmd = New SqlCeCommand("SELECT Tipo_Pensão.Tipo_Pensao AS [Tipo Pensão], Tipo_Pensão.Preco_Pensao AS [Preço] FROM Tipo_Pensão WHERE Preco_Pensao LIKE '%" & txtpreco.Text & "%' ", conn)
		 da = New SqlCeDataAdapter(cmd)
		 ds = New DataSet()
		 ' Dim dr As SqlCeDataReader = cmd.ExecuteReader()
		 With conn
			 If .State = ConnectionState.Open Then 'ta aberto
				 .Close() ' fechamos
			 End If
			 .Open() ' abrimos a conexao
		 End With
		 da.Fill(ds, "consulta")
		 cb = New SqlCeCommandBuilder(da)
	 Catch ex As Exception
		 MessageBox.Show(ex.Message, "informação do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error)
	 End Try
	 total = ds.Tables("consulta").Rows.Count
	 If total = 0 Then
		 MsgBox("Nenhum registo encontrado", MsgBoxStyle.Critical, "Erro")
	 Else
		 Tipo_PensãoDataGridView.Visible = True
		 Dim dr As SqlCeDataReader = cmd.ExecuteReader()
		 Tipo_PensãoDataGridView.Columns.Clear()
		 Dim n As Integer = dr.FieldCount
		 Dim campo As String
		 Dim k As Integer
		 For k = 0 To n - 1
			 campo = dr.GetName(k)
			 Tipo_PensãoDataGridView.Columns.Add(campo, campo)
		 Next
		 Dim i As Integer = 0
		 While dr.Read()
			 Tipo_PensãoDataGridView.Rows.Add(dr.Item(0), dr.Item(1))
			 i = i + 1
		 End While
		 Tipo_PensãoDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.AllCells
		 If total = 1 Then
			 lblregistos.Text = " Econtrado " & total & " tipo de quarto"
		 Else
			 lblregistos.Text = " Econtrados " & total & " tipos de quartos:"
		 End If
	 End If
 End If
 conn.Close()
 Tipo_PensãoDataGridView.ClearSelection()
 txttipo.Text = ""
End Sub
Edited by Caça
Link to comment
Share on other sites

Se o tipo de dados de [Preco_Pensao] for numérico (deve ser o caso) não podes utilizar o LIKE no sql

podes fazer

cmd = New SqlCeCommand("SELECT Tipo_Pensão.Tipo_Pensao AS [Tipo Pensão], Tipo_Pensão.Preco_Pensao AS [Preço] FROM Tipo_Pensão WHERE [Preco_Pensao] =" & CDec(txtpreco.Text), conn)

Link to comment
Share on other sites

Ora aqui está uma das situações de que já te falei relaativa/ aos parâmetros.

Se no teu sistema tens o separador decimal dos números definidos como ',' a query vai ser: "SELECT Tipo_Pensão .... WHERE [Preco_Pensao] = 50,00"

A vírgula entre 50 e 00 vai estragar tudo.

Faz

" ... WHERE [Preco_Pensao] =@pp"

ccmd.parameters.add("@pp",CDec(txtpreco.Text))

...

É SEMPRE melhor trabalhar com parâmetros

Link to comment
Share on other sites

Deu nisto agora. Amanhã vou apresentar o meu projeto, e no meio de tanta cena, isto é a única cena que não dá...

http://img201.imageshack.us/img201/3101/semttuloyta.png

Private Sub picpreco_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles picpreco.Click
 If txtpreco.Text = "" Then
	 MsgBox("Insira o Preço", MsgBoxStyle.Exclamation)
 Else
	 Try
		 conn = New SqlCeConnection(My.Settings.HOTEL_DBConnectionString)
		 cmd = New SqlCeCommand("UPDATE Tipo_Pensão SET Preco_Pensao =" & Preco_Tipo_QuartoTextBox.Text.Split(",")(0).Trim & " WHERE [Preco_Pensao] =@pp")
		 cmd.Parameters.Add("@pp", CDec(txtpreco.Text))
		 da = New SqlCeDataAdapter(cmd)
		 ds = New DataSet()
		 With conn
			 If .State = ConnectionState.Open Then 'ta aberto
				 .Close() ' fechamos
			 End If
			 .Open() ' abrimos a conexao
		 End With
		 da.Fill(ds, "consulta")
		 cb = New SqlCeCommandBuilder(da)
	 Catch ex As Exception
		 MessageBox.Show(ex.Message, "informação do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error)
	 End Try
	 total = ds.Tables("consulta").Rows.Count
	 If total = 0 Then
		 MsgBox("Nenhum registo encontrado", MsgBoxStyle.Critical, "Erro")
	 Else
		 Tipo_PensãoDataGridView.Visible = True
		 Dim dr As SqlCeDataReader = cmd.ExecuteReader()
		 Tipo_PensãoDataGridView.Columns.Clear()
		 Dim n As Integer = dr.FieldCount
		 Dim campo As String
		 Dim k As Integer
		 For k = 0 To n - 1
			 campo = dr.GetName(k)
			 Tipo_PensãoDataGridView.Columns.Add(campo, campo)
		 Next
		 Dim i As Integer = 0
		 While dr.Read()
			 Tipo_PensãoDataGridView.Rows.Add(dr.Item(0), dr.Item(1))
			 i = i + 1
		 End While
		 Tipo_PensãoDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.AllCells
		 If total = 1 Then
			 lblregistos.Text = " Econtrado " & total & " tipo de quarto"
		 Else
			 lblregistos.Text = " Econtrados " & total & " tipos de quartos:"
		 End If
	 End If
 End If
 conn.Close()
 Tipo_PensãoDataGridView.ClearSelection()
 txttipo.Text = ""
End Sub
Edited by vascoc
Link to comment
Share on other sites

Desculpa, nem reparei nisso, isto agora é tanta coisa que nem olho para as coisas mais a mão... agora dá este erro:

http://img221.imageshack.us/img221/7673/semttulovm.png

 cmd = New SqlCeCommand("SELECT Tipo_Pensão.Tipo_Pensao AS [Tipo Quarto], Tipo_Pensão.Preco_Pensao AS[Preço] FROM Tipo_Pensão WHERE Preco_Pensao = @pp", conn)
               cmd.Parameters.Add("@pp", CDec(txtpreco.Text))

http://img4.imageshack.us/img4/8246/semttulofir.png

Object reference not set to an instance of an object.

Edited by vascoc
Link to comment
Share on other sites

Resolvido, ficou assim, ouve aí uma grande confusão de tabelas...

Private Sub picpreco_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles picpreco.Click
 If txtpreco.Text = "" Then
	 MsgBox("Insira o Preço", MsgBoxStyle.Exclamation)
 Else
	 Try
		 conn = New SqlCeConnection(My.Settings.HOTEL_DBConnectionString)
		 cmd = New SqlCeCommand("SELECT Tipo_Pensão.Tipo_Pensao AS [Tipo Quarto], Tipo_Pensão.Preco_Pensao AS[Preço] FROM Tipo_Pensão WHERE Preco_Pensao = @pp", conn)
		 cmd.Parameters.Add("@pp", CDec(txtpreco.Text))
		 da = New SqlCeDataAdapter(cmd)
		 ds = New DataSet()
		 With conn
			 If .State = ConnectionState.Open Then 'ta aberto
				 .Close() ' fechamos
			 End If
			 .Open() ' abrimos a conexao
		 End With
		 da.Fill(ds, "consulta")
		 cb = New SqlCeCommandBuilder(da)
	 Catch ex As Exception
		 MessageBox.Show(ex.Message, "informação do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error)
	 End Try
	 total = ds.Tables("consulta").Rows.Count
	 If total = 0 Then
		 MsgBox("Nenhum registo encontrado", MsgBoxStyle.Critical, "Erro")
	 Else
		 Tipo_PensãoDataGridView.Visible = True
		 Dim dr As SqlCeDataReader = cmd.ExecuteReader()
		 Tipo_PensãoDataGridView.Columns.Clear()
		 Dim n As Integer = dr.FieldCount
		 Dim campo As String
		 Dim k As Integer
		 For k = 0 To n - 1
			 campo = dr.GetName(k)
			 Tipo_PensãoDataGridView.Columns.Add(campo, campo)
		 Next
		 Dim i As Integer = 0
		 While dr.Read()
			 Tipo_PensãoDataGridView.Rows.Add(dr.Item(0), dr.Item(1))
			 i = i + 1
		 End While
		 Tipo_PensãoDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.AllCells
		 If total = 1 Then
			 lblregistos.Text = " Econtrado " & total & " tipo de quarto"
		 Else
			 lblregistos.Text = " Econtrados " & total & " tipos de quartos:"
		 End If
	 End If
 End If
 conn.Close()
 Tipo_PensãoDataGridView.ClearSelection()
 txttipo.Text = ""
End Sub
Edited by Caça
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.