Jump to content
Seabra

Passar parametro para mostrar todos os registos

Recommended Posts

Seabra

Olá

Tenho o seguinte código:

If RadioButton1.Checked Then
            cmd.Parameters.AddWithValue("@Campo4", SqlDbType.VarChar).Value = "*"
        End If
        If RadioButton2.Checked Then
            cmd.Parameters.AddWithValue("@Campo4", SqlDbType.VarChar).Value = "Entrada"
        End If
        If RadioButton3.Checked Then
            cmd.Parameters.AddWithValue("@Campo4", SqlDbType.VarChar).Value = "Saida"
        End If

Onde está o "*" pretendo colocar qualquer coisa que me dê como resultado todos os volores da coluna, ou seja: Entradas e saídas juntas.

Pretendo fazer o mesmo com os campos da data.

Se não utilizar parâmetros consigo fazer e já está a trabalhar. Mas pretendo mesmo utilizar parametros

Já testei, procurei mas nada.

Podem-me ajudar?

Cumprimentos

Seabra

Share this post


Link to post
Share on other sites
bioshock

Podias era ter postado mais algo do código, mais concretamente a query.

A forma como estás a desenvolver o código não é o mais adequado, em vez disso deve ter a seguinte estrutura:

If RadioButton1.Checked Then
            ' query + parâmetros
            ElseIf RadioButton2.Checked Then
            ' query + parâmetros
            Else
            ' query + parâmetros
End If

Share this post


Link to post
Share on other sites
Seabra

Podias era ter postado mais algo do código, mais concretamente a query.

A forma como estás a desenvolver o código não é o mais adequado, em vez disso deve ter a seguinte estrutura:

If RadioButton1.Checked Then
            ' query + parâmetros
            ElseIf RadioButton2.Checked Then
            ' query + parâmetros
            Else
            ' query + parâmetros
End If

Olá bioshock

De facto é muito melhor e lógico como escreveste.

A minha quary é do tipo:

SELECT * FROM Registos WHERE Operador=@Campo1 AND Fornecedor=@Campo2 AND Data BETWEEN @Campo3 AND @Campo4 AND Entra_Sai=@Campo5

A minha ideia era ficar sempre com os parâmetros e atribuir valores ou não dependendo da situação. Não sei se isso é possível!

Como eu ja disse se não utilizar parâmetros não tenho problemas em fazer, mas com a técnica de parâmetros penso que tenho que fazer a query e colocar os parâmetros só onde quero filtros. É isso? Ou há uma forma de ignorar o parâmetro?

Nota: a query que forneci não foi testada.(não estou no PC com VB.Net)

STQ="SELECT * FROM Registos WHERE Operador=@Campo1 AND Fornecedor=@Campo2 AND Data BETWEEN @Campo3 AND @Campo4 AND Entra_Sai=@Campo5"


If RadioButton1.Checked Then
           cmd.Parameters.AddWithValue("@Campo4", SqlDbType.VarChar).Value = "*"
            ElseIf RadioButton2.Checked Then
            cmd.Parameters.AddWithValue("@Campo4", SqlDbType.VarChar).Value = "Entrada"
            Else
            cmd.Parameters.AddWithValue("@Campo4", SqlDbType.VarChar).Value = "Saida"
End If


Também poderei ou não utilizar o Campo1, campo2, etc.

Cumprimentos

Seabra

Share this post


Link to post
Share on other sites
bioshock

Nein, estava a pensar algo assim (ex):

If RadioButton1.Checked Then
            ' query + parâmetros
            query = "SELECT * FROM Produtos WHERE Produto = @Produto AND DataProduto = @DataProduto"
            command.Parameters.Add("@Produto", SqlDbType.VarChar).Value = Textbox1.Text
            command.Parameters.Add("@DataProduto", SqlDbType.Date).Value = DatePicker.Value

            ElseIf RadioButton2.Checked Then

            ' query + parâmetros
            query = "SELECT Mercadoria FROM Clientes WHERE ID = @id"
            command.Parameters.Add("@id", SqlDbType.Integer).Value = Textbox1.Text

            Else

            ' query + parâmetros
            query = "SELECT * FROM Utilizadores WHERE ID = @id"
            command.Parameters.Add("@id", SqlDbType.Integer).Value = Textbox1.Text
End If

Resumidamente: consoante a selecção do Radiobutton, fazes a query necessária.

Caso não seja isto que pretendas, não estou a perceber bem o teu problema. ;)

Share this post


Link to post
Share on other sites
Seabra

Fiz desta forma:

If TextBox1.Text <> "" Then
                SubSQL = " Cod_Ferramenta= '" & Trim(TextBox1.Text) & "' And "
            End If

            If TextBox2.Text <> "" Then
                SubSQL = SubSQL & "Cliente= '" & Trim(TextBox2.Text) & "' And "
            End If

            If RadioButton1.Checked Then

            ElseIf RadioButton2.Checked Then
                SubSQL = SubSQL & "Entra_Sai = 'Entrada' And"
            ElseIf RadioButton3.Checked Then
                SubSQL = SubSQL & "Entra_Sai = 'Saida' And"
            End If


            cmd = conn.CreateCommand

            ' cmd.CommandText = "Select * From Registos Where " & SubSQL & " Data BETWEEN @Campo1 and @Campo2"

Resumidamente o que eu pretendo saber é se há alguma forma de, mantendo o Parâmetro na query, esse parâmetro me devolva só as linha filtradas por ele ou  devolver todas as linhas como se o parametro não estivesse lá..

Cumprimentos

Seabra

Share this post


Link to post
Share on other sites
bioshock

Se não utilizar parâmetros consigo fazer e já está a trabalhar. Mas pretendo mesmo utilizar parametros

Mostra-me lá o exemplo completo com a afirmação que fizeste, pode ser que assim eu perceba melhor.

Share this post


Link to post
Share on other sites
Seabra

Mostra-me lá o exemplo completo com a afirmação que fizeste, pode ser que assim eu perceba melhor.

STQ="SELECT * FROM Registos WHERE Operador=@Campo1 AND Fornecedor=@Campo2 AND Data BETWEEN @Campo3 AND @Campo4 AND Entra_Sai=@Campo5"


If RadioButton1.Checked Then
           cmd.Parameters.AddWithValue("@Campo4", SqlDbType.VarChar).Value = "*"
            ElseIf RadioButton2.Checked Then
            cmd.Parameters.AddWithValue("@Campo4", SqlDbType.VarChar).Value = "Entrada"
            Else
            cmd.Parameters.AddWithValue("@Campo4", SqlDbType.VarChar).Value = "Saida"
End If

Nota: Exemplo só para uma coluna.

Para @Campo4="*" tenho com resultado:

Nome      Ent/sai
João       Entrada
Pedro      Saida
Ana         Entrada
João       Saida

Para @Campo4="Entrada" tenho com resultado:

Nome      Ent/sai
João       Entrada
Ana         Entrada

Para @Campo4="*" tenho com resultado:

Nome      Ent/sai
Pedro      Saida
João       Saida

A minha questão é se é possivel colocar qualquer coisa no logar do * para me devolver tudo? Ou se tenho sempre que retirar da query o @Campo4?

Cumprimentos

Seabra

Share this post


Link to post
Share on other sites
bioshock

Existe, colocas a data actual. Já agora, se é um campo Data, deveria de estar com o seu respectivo tipo de dados, pois assim as operações são mais rápidas, eficientes e práticas ;)

(Isto de manhã tem-se logo outra perspectiva, principalmente quando se está de folga :P )

Share this post


Link to post
Share on other sites
Seabra

Existe, colocas a data actual. Já agora, se é um campo Data, deveria de estar com o seu respectivo tipo de dados, pois assim as operações são mais rápidas, eficientes e práticas ;)

(Isto de manhã tem-se logo outra perspectiva, principalmente quando se está de folga :P )

Não é um campo de data, mas sim um campo de texto.

há alguma solução?

Seabra

Share this post


Link to post
Share on other sites
bioshock

É uma campo texto que contém data, right? Se o formato na base de dados estiver correcto não haverá  problemas.

Share this post


Link to post
Share on other sites
Seabra

É uma campo texto que contém data, right? Se o formato na base de dados estiver correcto não haverá  problemas.

Bioshock

Agora é que eu percebir porque é que ainda não percebeste!

Como este exemplo que eu dei não está implementado, enganei-me no parametro @Campo4. Não é 4 mas sim 5. O @campo5 é que é Entra_Sai.

Não é um campo de data mas sim de texto. Se fosse um camo de data abria as datas e funcinava, mas como é de texto!!!!

Então fica:

STQ="SELECT * FROM Registos WHERE Operador=@Campo1 AND Fornecedor=@Campo2 AND Data BETWEEN @Campo3 AND @Campo4 AND Entra_Sai=@Campo5"


If RadioButton1.Checked Then
           cmd.Parameters.AddWithValue("@Campo5", SqlDbType.VarChar).Value = "*"
            ElseIf RadioButton2.Checked Then
            cmd.Parameters.AddWithValue("@Campo5", SqlDbType.VarChar).Value = "Entrada"
            Else
            cmd.Parameters.AddWithValue("@Campo5", SqlDbType.VarChar).Value = "Saida"
End If


Peço mil desculpas pela tua paciência.

Há solução para esta nova realidade?

Seabra

Share this post


Link to post
Share on other sites
bioshock

Eu disse que era campo data, pois tu estavas-te a referir ao campo4.

Relativamente ao que me disseste agora, não estou a ver qualquer tipo de solução para esse teu problema a não ser fazer como eu disse, ou seja, algo assim:

If RadioButton1.Checked Then
            "SELECT * 
            FROM Registos 
            WHERE Operador=@Campo1 AND Fornecedor=@Campo2 AND 
            Data BETWEEN @Campo3 AND @Campo4 AND 
            Entra_Sai= 'Entra' OR Entra_Sai = 'Sai'"

            command.Parameters.Add("@Campo1", SqlDbType.VarChar).Value = Textbox1.Text
            command.Parameters.Add("@Campo2", SqlDbType.VarChar).Value = Textbox2.Text
            command.Parameters.Add("@Campo3", SqlDbType.Date).Value = Date1.Value
            command.Parameters.Add("@Campo4", SqlDbType.Date).Value = Date2.Value

            ElseIf RadioButton2.Checked Then

            "SELECT * 
            FROM Registos 
            WHERE Operador=@Campo1 AND Fornecedor=@Campo2 AND 
            Data BETWEEN @Campo3 AND @Campo4 AND 
            Entra_Sai= 'Entra'"

            command.Parameters.Add("@Campo1", SqlDbType.VarChar).Value = Textbox1.Text
            command.Parameters.Add("@Campo2", SqlDbType.VarChar).Value = Textbox2.Text
            command.Parameters.Add("@Campo3", SqlDbType.Date).Value = Date1.Value
            command.Parameters.Add("@Campo4", SqlDbType.Date).Value = Date2.Value

            Else

            "SELECT * 
            FROM Registos 
            WHERE Operador=@Campo1 AND Fornecedor=@Campo2 AND 
            Data BETWEEN @Campo3 AND @Campo4 AND 
            Entra_Sai = 'Sai'"

            command.Parameters.Add("@Campo1", SqlDbType.VarChar).Value = Textbox1.Text
            command.Parameters.Add("@Campo2", SqlDbType.VarChar).Value = Textbox2.Text
            command.Parameters.Add("@Campo3", SqlDbType.Date).Value = Date1.Value
            command.Parameters.Add("@Campo4", SqlDbType.Date).Value = Date2.Value
End If

Share this post


Link to post
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

×
×
  • 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.