ERRO DE SINTAXE
RSPRODUTOS.Open "SELECT * From casa where valorvenda >= " & ValorSQL(pre1) & " " & _
"And valorvenda <= " & ValorSQL(pre2), Conexao, 3, 3
QUE ESTÁ FUNCIONANDO MUITO BEM. ESTOU QUERENDO ORDENÁ-LA PELO valorvenda.
COLOQUEI O ORDER BY VALORVENDA PARA ORDENÁ-LA, MAS ESTÁ DANDO ERRO.
CÓDIGO QUE ESTÁ DANDO ERRO:
RSPRODUTOS.Open "SELECT * From casa where valorvenda >= " & ValorSQL(pre1) & " " & _
"And valorvenda <= " & ValorSQL(pre2) order by valorvenda, Conexao, 3, 3
CÓDIGO INTEIRO:
Public Sub rel_pre()
Dim pre1 As Currency, pre2 As Currency 'faixa preco
pre1 = Maskpre1.Text
pre2 = Maskpre2.Text
RSPRODUTOS.Open "SELECT * From casa where valorvenda >= " & ValorSQL(pre1) & " " & _
"And valorvenda <= " & ValorSQL(pre2) order by valorvenda, Conexao, 3, 3
If Not RSPRODUTOS.EOF Then
Set rptCasa.DataSource = RSPRODUTOS
rptCasa.Title = "Relatório Imóvel por Faixa de Preço"
rptCasa.Show
Else
RSPRODUTOS.Close
MsgBox "Não foram encontrados Registros", vbInformation, "Aviso"
End If
Unload Me
Set Conexao = Nothing
Set RSPRODUTOS = Nothing
End Sub
Dim pre1 As Currency, pre2 As Currency 'faixa preco
pre1 = Maskpre1.Text
pre2 = Maskpre2.Text
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim sqlQuery As String
sqlQuery = "SELECT * FROM casa WHERE valorvenda >= ? AND valorvenda <= ? ORDER BY valorvenda"
With cmd
.ActiveConnection = Conexao
.CommandText = sqlQuery
.CommandType = adCmdText
.Parameters.Append .CreateParameter("pre1Param", adCurrency, adParamInput, , pre1)
.Parameters.Append .CreateParameter("pre2Param", adCurrency, adParamInput, , pre2)
End With
rs.Open cmd
If Not rs.EOF Then
Set rptCasa.DataSource = rs
rptCasa.Title = "Relatório Imóvel por Faixa de Preço"
rptCasa.Show
Else
rs.Close
MsgBox "Não foram encontrados Registros", vbInformation, "Aviso"
End If
rs.Close
Set rs = Nothing
Set cmd = Nothing
Unload Me
Set Conexao = Nothing
RSPRODUTOS.Open "SELECT * From casa where valorvenda >= " & ValorSQL(pre1) & " " & _
"And valorvenda <= " & ValorSQL(pre2) order by valorvenda", Conexao, 3, 3
Citação:Mais seguro, porque evita ataques de injeção de SQL
Que bicho é esse kerp ...... não sabia disso ...... explica ai!!!!
Dim codigo As String
codigo = txtCodigoCliente.Text
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim sqlQuery As String
sqlQuery = "SELECT * FROM cliente WHERE codigo = " & codigo
With cmd
.ActiveConnection = Conexao
.CommandText = sqlQuery
.CommandType = adCmdText
End With
rs.Open cmd
If Not rs.EOF Then
Set rptCasa.DataSource = rs
rptCasa.Title = "Relatório Imóvel por Faixa de Preço"
rptCasa.Show
Else
rs.Close
MsgBox "Não foram encontrados Registros", vbInformation, "Aviso"
End If
rs.Close
Set rs = Nothing
Set cmd = Nothing
Unload Me
Set Conexao = Nothing
Então na caixa de texto da procura digite:
0 or 1 = 1; DROP TABLE Cliente;
O que vai acontecer, é que a query vai ficar:
SELECT * FROM cliente WHERE codigo = 0 or 1 = 1; DROP TABLE Cliente;
O select(primeira instrução) vai executar normal, não trazendo nada e a segunda instrução será executada, deletando a tabela Cliente.
Citação:Em primeiro lugar você deveria estar usando comandos parametrizados, mais ou menos assim:Dim pre1 As Currency, pre2 As Currency 'faixa precopre1 = Maskpre1.Textpre2 = Maskpre2.TextDim cmd As ADODB.CommandSet cmd = New ADODB.CommandDim rs As ADODB.RecordsetSet rs = New ADODB.RecordsetDim sqlQuery As StringsqlQuery = "SELECT * FROM casa WHERE valorvenda >= ? AND valorvenda <= ? ORDER BY valorvenda"With cmd .ActiveConnection = Conexao .CommandText = sqlQuery .CommandType = adCmdText .Parameters.Append .CreateParameter("pre1Param", adCurrency, adParamInput, , pre1) .Parameters.Append .CreateParameter("pre2Param", adCurrency, adParamInput, , pre2)End Withrs.Open cmdIf Not rs.EOF Then Set rptCasa.DataSource = rs rptCasa.Title = "Relatório Imóvel por Faixa de Preço" rptCasa.ShowElse rs.Close MsgBox "Não foram encontrados Registros", vbInformation, "Aviso"End Ifrs.CloseSet rs = NothingSet cmd = NothingUnload MeSet Conexao = Nothing
FUNCIONOU PERFEITAMENTE. SÓ PRECISEI RETIRAR DO CÓDIGO O ÚLTIMO FECHAMENTO(rs.Close), que estava provocando erro. Muito obrigado.