Trabalhando com ListBox de Multiplo valor
Olá Rodrigo/Wesley, solicito ajuda de vcs novamente, bom tenho uma tela onde tenho 7 ListBox, com alguns valores relacionados a uma tabela de Membros, onde tenho NOME, IDGRUPO, IDTRATAMENTO, IDPROFISSAO, IDIGREJA, IDESCOLARIDADE, IDESTADOCIVIL, IDSEXO.
Bem, preciso listar em uma GridView os Membos conforme eu seleciono nos ListBox, se eu não escolher nada, me traga SELECT * FROM MEMBROS
Pois Bem, nos ListBox todos estão AutoPostBack=true e SelectionMode=Multiple
Eu utilizo MSSQLServer e RAD Studio 2007, tenho essa store procedure no SQLServer, porem estou postando somente para que vcs possam me orientar o que eu possa fazer, pois não consigo utilizar mais de um parametro selecionado em um mesmo ListBox.
Minha Store Procedure
ALTER PROCEDURE [dbo].[spParametrizado]
@IDGRUPO AS SMALLINT,
@IDTRATAMENTO AS SMALLINT,
@IDPROFISSAO AS SMALLINT,
@IDIGREJA AS SMALLINT,
@IDESCOLARIDADE AS SMALLINT,
@IDESTADOCIVIL AS SMALLINT,
@IDSEXO AS SMALLINT
AS
DECLARE @SQL AS VARCHAR(4000)
SET @SQL = ' SELECT IDMEMBRO, NOME, TEL_RES, TEL_COM, CELULAR, EMAIL FROM MEMBROS WHERE 1=1 '
IF (@IDGRUPO IS NOT NULL)
BEGIN
SET @SQL = @SQL + ' AND IDGRUPO = "' + CONVERT(VARCHAR, @IDGRUPO) + '"'
END
IF (@IDTRATAMENTO IS NOT NULL)
BEGIN
SET @SQL = @SQL + ' AND IDTRATAMENTO = "' + CONVERT(VARCHAR, @IDTRATAMENTO) + '"'
END
IF (@IDPROFISSAO IS NOT NULL)
BEGIN
SET @SQL = @SQL + ' AND IDPROFISSAO = "' + CONVERT(VARCHAR, @IDPROFISSAO) + '"'
END
IF (@IDIGREJA IS NOT NULL)
BEGIN
SET @SQL = @SQL + ' AND IDIGREJA = "' + CONVERT(VARCHAR, @IDIGREJA) + '"'
END
IF (@IDESCOLARIDADE IS NOT NULL)
BEGIN
SET @SQL = @SQL + ' AND IDESCOLARIDADE = "' + CONVERT(VARCHAR, @IDESCOLARIDADE) + '"'
END
IF (@IDESTADOCIVIL IS NOT NULL)
BEGIN
SET @SQL = @SQL + ' AND IDESTADOCIVIL = "' + CONVERT(VARCHAR, @IDESTADOCIVIL) + '"'
END
IF (@SEXO IS NOT NULL)
BEGIN
SET @SQL = @SQL + ' AND SEXO = "' + CONVERT(VARCHAR, @SEXO) + '"'
END
EXECUTE(@SQL)
Meu botão Filtrar está assim:
procedure TParametrizado.btFiltrar_Click(sender: System.Object; e: System.EventArgs);
var
Comand : SqlCommand;
Conn : SqlConnection;
SqlReader : SqlDataReader;
begin
Conn := SqlConnection.Create(ConfigurationManager.ConnectionStrings['Conexao'].ToString);
Comand := SqlCommand.Create('spParametrizado', Conn);
Comand.CommandType := CommandType.StoredProcedure;
Comand.Parameters.Add('@IDGRUPO', ListBox_Grupos.SelectedValue);
Comand.Parameters.Add('@IDTRATAMENTO', ListBox_Tratamentos.SelectedValue);
Comand.Parameters.Add('@IDPROFISSAO', ListBox_Profissoes.SelectedValue);
Comand.Parameters.Add('@IDIGREJA', ListBox_Igreja.SelectedValue);
Comand.Parameters.Add('@IDESCOLARIDADE', ListBox_Escolaridade.SelectedValue);
Comand.Parameters.Add('@IDESTADOCIVIL', ListBox_EstadoCivil.SelectedValue);
Comand.Parameters.Add('@IDSEXO', ListBox_Sexo.SelectedValue);
Conn.Open;
SqlReader := Comand.ExecuteReader;
if SqlReader.HasRows then
begin
try
GridView1.DataSource := SqlReader;
GridView1.DataBind;
finally
Conn.Close;
end;
end else
MessageScript( Page, 'Não foram encontrado Registros conforme Opções Selecionadas !!!');
end;
Obrigado mais uma vez.
Paulo Freire
Curtidas 0
Mais Respostas
Paulo Freire
28/09/2009
Me perdoem, usei o Browser Chrome, e ficou sem formação. qualquer coisa eu posto novamente.
GOSTEI 0
Paulo Freire
28/09/2009
Olá
Rodrigo/Wesley, solicito ajuda de vcs novamente, bom tenho uma tela
onde tenho 7 ListBox, com alguns valores relacionados a uma tabela de
Membros, onde tenho NOME, IDGRUPO, IDTRATAMENTO, IDPROFISSAO, IDIGREJA,
IDESCOLARIDADE, IDESTADOCIVIL, IDSEXO. Bem, preciso listar em uma
GridView os Membos conforme eu seleciono nos ListBox, se eu não
escolher nada, me traga SELECT * FROM MEMBROS
Pois Bem, nos ListBox todos estão AutoPostBack=true e
SelectionMode=Multiple
Eu utilizo MSSQLServer e RAD Studio 2007, tenho essa store procedure no
SQLServer, porem estou postando somente para que vcs possam me orientar
o que eu possa fazer, pois não consigo utilizar mais de um parametro
selecionado em um mesmo ListBox.
Minha Store Procedure:
ALTER PROCEDURE [dbo].[spParametrizado]
@IDGRUPO AS SMALLINT,
@IDTRATAMENTO AS SMALLINT,
@IDPROFISSAO AS SMALLINT,
@IDIGREJA AS SMALLINT,
@IDESCOLARIDADE AS SMALLINT,
@IDESTADOCIVIL AS SMALLINT,
@IDSEXO AS SMALLINT
AS DECLARE
@SQL AS VARCHAR(4000) SET @SQL = ' SELECT IDMEMBRO, NOME, TEL_RES, TEL_COM, CELULAR, EMAIL FROM MEMBROS WHERE 1=1 '
IF (@IDGRUPO IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDGRUPO = "' + CONVERT(VARCHAR, @IDGRUPO) + '"'
END
IF (@IDTRATAMENTO IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDTRATAMENTO = "' + CONVERT(VARCHAR, @IDTRATAMENTO) + '"'
END
IF (@IDPROFISSAO IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDPROFISSAO = "' + CONVERT(VARCHAR, @IDPROFISSAO) + '"'
END
IF (@IDIGREJA IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDIGREJA = "' + CONVERT(VARCHAR, @IDIGREJA) + '"'
END
IF (@IDESCOLARIDADE IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDESCOLARIDADE = "' + CONVERT(VARCHAR, @IDESCOLARIDADE) + '"'
END
IF (@IDESTADOCIVIL IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDESTADOCIVIL = "' + CONVERT(VARCHAR, @IDESTADOCIVIL) + '"'
END
IF (@SEXO IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND SEXO = "' + CONVERT(VARCHAR, @SEXO) + '"' END
EXECUTE(@SQL)
Meu botão Filtrar está assim:
procedure TParametrizado.btFiltrar_Click(sender: System.Object; e: System.EventArgs);
var
Comand : SqlCommand;
Conn : SqlConnection;
SqlReader : SqlDataReader;
begin
Conn := SqlConnection.Create(ConfigurationManager.ConnectionStrings['Conexao'].ToString);
Comand := SqlCommand.Create('spParametrizado', Conn);
Comand.CommandType := CommandType.StoredProcedure;
Comand.Parameters.Add('@IDGRUPO', ListBox_Grupos.SelectedValue);C
Comand.Parameters.Add('@IDTRATAMENTO', ListBox_Tratamentos.SelectedValue);
Comand.Parameters.Add('@IDPROFISSAO', ListBox_Profissoes.SelectedValue);
Comand.Parameters.Add('@IDIGREJA', ListBox_Igreja.SelectedValue);
Comand.Parameters.Add('@IDESCOLARIDADE', ListBox_Escolaridade.SelectedValue);
Comand.Parameters.Add('@IDESTADOCIVIL', ListBox_EstadoCivil.SelectedValue);
Comand.Parameters.Add('@IDSEXO', ListBox_Sexo.SelectedValue);
Conn.Open;
SqlReader := Comand.ExecuteReader;
if SqlReader.HasRows then
begin
try
GridView1.DataSource := SqlReader;
GridView1.DataBind;
finally
Conn.Close;
end;
end else
MessageScript( Page, 'Não foram encontrado Registros conforme Opções Selecionadas !!!');
end;
Obrigado mais uma vez.
Minha Store Procedure:
ALTER PROCEDURE [dbo].[spParametrizado]
@IDGRUPO AS SMALLINT,
@IDTRATAMENTO AS SMALLINT,
@IDPROFISSAO AS SMALLINT,
@IDIGREJA AS SMALLINT,
@IDESCOLARIDADE AS SMALLINT,
@IDESTADOCIVIL AS SMALLINT,
@IDSEXO AS SMALLINT
AS DECLARE
@SQL AS VARCHAR(4000) SET @SQL = ' SELECT IDMEMBRO, NOME, TEL_RES, TEL_COM, CELULAR, EMAIL FROM MEMBROS WHERE 1=1 '
IF (@IDGRUPO IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDGRUPO = "' + CONVERT(VARCHAR, @IDGRUPO) + '"'
END
IF (@IDTRATAMENTO IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDTRATAMENTO = "' + CONVERT(VARCHAR, @IDTRATAMENTO) + '"'
END
IF (@IDPROFISSAO IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDPROFISSAO = "' + CONVERT(VARCHAR, @IDPROFISSAO) + '"'
END
IF (@IDIGREJA IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDIGREJA = "' + CONVERT(VARCHAR, @IDIGREJA) + '"'
END
IF (@IDESCOLARIDADE IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDESCOLARIDADE = "' + CONVERT(VARCHAR, @IDESCOLARIDADE) + '"'
END
IF (@IDESTADOCIVIL IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND IDESTADOCIVIL = "' + CONVERT(VARCHAR, @IDESTADOCIVIL) + '"'
END
IF (@SEXO IS NOT NULL) BEGIN SET @SQL = @SQL + ' AND SEXO = "' + CONVERT(VARCHAR, @SEXO) + '"' END
EXECUTE(@SQL)
Meu botão Filtrar está assim:
procedure TParametrizado.btFiltrar_Click(sender: System.Object; e: System.EventArgs);
var
Comand : SqlCommand;
Conn : SqlConnection;
SqlReader : SqlDataReader;
begin
Conn := SqlConnection.Create(ConfigurationManager.ConnectionStrings['Conexao'].ToString);
Comand := SqlCommand.Create('spParametrizado', Conn);
Comand.CommandType := CommandType.StoredProcedure;
Comand.Parameters.Add('@IDGRUPO', ListBox_Grupos.SelectedValue);C
Comand.Parameters.Add('@IDTRATAMENTO', ListBox_Tratamentos.SelectedValue);
Comand.Parameters.Add('@IDPROFISSAO', ListBox_Profissoes.SelectedValue);
Comand.Parameters.Add('@IDIGREJA', ListBox_Igreja.SelectedValue);
Comand.Parameters.Add('@IDESCOLARIDADE', ListBox_Escolaridade.SelectedValue);
Comand.Parameters.Add('@IDESTADOCIVIL', ListBox_EstadoCivil.SelectedValue);
Comand.Parameters.Add('@IDSEXO', ListBox_Sexo.SelectedValue);
Conn.Open;
SqlReader := Comand.ExecuteReader;
if SqlReader.HasRows then
begin
try
GridView1.DataSource := SqlReader;
GridView1.DataBind;
finally
Conn.Close;
end;
end else
MessageScript( Page, 'Não foram encontrado Registros conforme Opções Selecionadas !!!');
end;
Obrigado mais uma vez.
GOSTEI 0
Rodrigo Mourão
28/09/2009
Olá Paulo
Vuio analisar para entender completamente o problema e lhe sugerir algo .
Abs!!
Vuio analisar para entender completamente o problema e lhe sugerir algo .
Abs!!
GOSTEI 0
Paulo Freire
28/09/2009
Beleza, obrigado.
GOSTEI 0
Rodrigo Mourão
28/09/2009
Paulo vamos lá. Não sei se entendi muito bem, mas vc esta querendo selecionar ou não um item nos lists box e então fazer um filtro para exibir membros que se enquadrem nos parametros. Exemplo seleciono a profissão analista e ele me tras todos os membros analistas, correto ??
Agora me diz um coisa, vc fala em selectmode como Multiple então sua intenção seria poder selecionar duas profissões por exemplo? Ou sua intenção e permitir que o usuario selecione um profissao, um tratamento ou uma escolaridade e fazer um filtro em cima destes parametros de modo que fique dinâmico.
Eu fiquei na dúvida eu acredito q segunda opção mais viável e mais pratica. Podemos montar o Select Dinamicamente. Pode me confirmar a intenção !!
Abs!!
Agora me diz um coisa, vc fala em selectmode como Multiple então sua intenção seria poder selecionar duas profissões por exemplo? Ou sua intenção e permitir que o usuario selecione um profissao, um tratamento ou uma escolaridade e fazer um filtro em cima destes parametros de modo que fique dinâmico.
Eu fiquei na dúvida eu acredito q segunda opção mais viável e mais pratica. Podemos montar o Select Dinamicamente. Pode me confirmar a intenção !!
Abs!!
GOSTEI 0
Paulo Freire
28/09/2009
exatamente a 2ª opção, o usuário selecionara ANALISTA E ADVOGADO E CONTADORES num ListBox e assim montar o filtro para ser monstrado no GridView.
Valeu
Valeu
GOSTEI 0
Rodrigo Mourão
28/09/2009
Blz Paulo,
Posso te pedir um favor, teria como mandar a sua aplicação, pois ja esta toda montada e inclisive pq usar procedure assim ganhamos tempo e outro presico ver como vc esta carregando o ListBox.
Se nao puder nao tem problema eu montar uma aqui mas pode demorar um pouco.
abs!1
Posso te pedir um favor, teria como mandar a sua aplicação, pois ja esta toda montada e inclisive pq usar procedure assim ganhamos tempo e outro presico ver como vc esta carregando o ListBox.
Se nao puder nao tem problema eu montar uma aqui mas pode demorar um pouco.
abs!1
GOSTEI 0
Paulo Freire
28/09/2009
Sim, claro, vc precisa dos banco também correto, com as stores procedures?
GOSTEI 0
Paulo Freire
28/09/2009
Como eu envio os arquivos?
GOSTEI 0
Rodrigo Mourão
28/09/2009
Pelo Disco Virtual !!!
https://www.devmedia.com.br/imagens/videos/4/Video%20disco%20virtual.htm
Abs!!!
P.S.: Não esqueca de passar o link !!!
https://www.devmedia.com.br/imagens/videos/4/Video%20disco%20virtual.htm
Abs!!!
P.S.: Não esqueca de passar o link !!!
GOSTEI 0
Paulo Freire
28/09/2009
Fala Rodrigo, vamos lá primeiro é o projeto em si
http://video.devmedia.com.br/discovirtual/81635/suportes/ShalomWeb.rar
São as paginas Parametrizado.aspx e EnviarEmails.aspx que utilizo os ListBox
O scrito do banco é esse
http://video.devmedia.com.br/discovirtual/81635/suportes/ScriptDataBase_ShalomWeb.rar
Qualquer dúvida estamos aqui, obrigadão
Paulo
http://video.devmedia.com.br/discovirtual/81635/suportes/ShalomWeb.rar
São as paginas Parametrizado.aspx e EnviarEmails.aspx que utilizo os ListBox
O scrito do banco é esse
http://video.devmedia.com.br/discovirtual/81635/suportes/ScriptDataBase_ShalomWeb.rar
Qualquer dúvida estamos aqui, obrigadão
Paulo
GOSTEI 0
Rodrigo Mourão
28/09/2009
Olá Paulo,
Ja beixei e montei o projeto com o banco aqui. Peço que aguarde mais um pouco estou realizando testes para tentar resolver seu problema.
Abs!!
Ja beixei e montei o projeto com o banco aqui. Peço que aguarde mais um pouco estou realizando testes para tentar resolver seu problema.
Abs!!
GOSTEI 0
Rodrigo Mourão
28/09/2009
Olá Paulo, eu nunca me dei bem com SQL Server, não consegui conectar no banco de dados, por isso não testei a aplicação, mas a principio vai funcionar.
Vamos la primeiro temos quel alterar a procedure [spParametrizado] atualmente os parametros são smallint mude para varchar:
@IDGRUPO AS varchar,
@IDTRATAMENTO AS varchar,
@IDPROFISSAO AS varchar,
@IDIGREJA AS varchar,
@IDESCOLARIDADE AS varchar,
@IDESTADOCIVIL AS varchar,
@SEXO AS varchar
Eu vou mostar a mudanca no grupo, mas basta fazer a mesma coisa para os outros parametros. Veja como fica a alteracao para o parametro Grupo:
IF (@IDGRUPO IS NOT NULL)
BEGIN
SET @SQL = @SQL + ' AND IDGRUPO in ("' + @IDGRUPO + '")'
END
Para entender, sai o = e entra o IN () isso pq agora poderemos pegar não um mais varios grupos. Faca o mesmo para os outros parametros.
Agora vamos ao Delphi. No clique do botao filtrar a pagina parametrizacao antes do codigo que ja exista vc terar uqe pegar os codigos dos grupos selecionados e passar para o select. Eu criei uma variavel Grupo e fiz um loop. Veja:
for i := 0 to ListBox_Grupos.Items.Count-1 do
begin
if ListBox_Grupos.Items[I].Selected then
Grupo := Grupo + ListBox_Grupos.Items[I].Value+',';
end;
Grupo := Grupo.Remove(Grupo.Length,1);
Como estou colocando ID,ID,ID, no final eu delete a ultima virgula. Depois eu passo o grupo para o procedure.
Conn := SqlConnection.Create(ConfigurationManager.ConnectionStrings['ConexaoShalom'].ToString);
Comand := SqlCommand.Create('spParametrizado', Conn);
Comand.CommandType := CommandType.StoredProcedure;
Comand.Parameters.Add('@IDGRUPO', Grupo);
Faça o loop com os outros compoenntes.
Como falei nao testei a aplicacao pois nao consigo conectar na base, mas a procedure compilou legal e a aplicacao tambem.
Qualquer coisa e so falar !!!
Abs!!1
Vamos la primeiro temos quel alterar a procedure [spParametrizado] atualmente os parametros são smallint mude para varchar:
@IDGRUPO AS varchar,
@IDTRATAMENTO AS varchar,
@IDPROFISSAO AS varchar,
@IDIGREJA AS varchar,
@IDESCOLARIDADE AS varchar,
@IDESTADOCIVIL AS varchar,
@SEXO AS varchar
Eu vou mostar a mudanca no grupo, mas basta fazer a mesma coisa para os outros parametros. Veja como fica a alteracao para o parametro Grupo:
IF (@IDGRUPO IS NOT NULL)
BEGIN
SET @SQL = @SQL + ' AND IDGRUPO in ("' + @IDGRUPO + '")'
END
Para entender, sai o = e entra o IN () isso pq agora poderemos pegar não um mais varios grupos. Faca o mesmo para os outros parametros.
Agora vamos ao Delphi. No clique do botao filtrar a pagina parametrizacao antes do codigo que ja exista vc terar uqe pegar os codigos dos grupos selecionados e passar para o select. Eu criei uma variavel Grupo e fiz um loop. Veja:
for i := 0 to ListBox_Grupos.Items.Count-1 do
begin
if ListBox_Grupos.Items[I].Selected then
Grupo := Grupo + ListBox_Grupos.Items[I].Value+',';
end;
Grupo := Grupo.Remove(Grupo.Length,1);
Como estou colocando ID,ID,ID, no final eu delete a ultima virgula. Depois eu passo o grupo para o procedure.
Conn := SqlConnection.Create(ConfigurationManager.ConnectionStrings['ConexaoShalom'].ToString);
Comand := SqlCommand.Create('spParametrizado', Conn);
Comand.CommandType := CommandType.StoredProcedure;
Comand.Parameters.Add('@IDGRUPO', Grupo);
Faça o loop com os outros compoenntes.
Como falei nao testei a aplicacao pois nao consigo conectar na base, mas a procedure compilou legal e a aplicacao tambem.
Qualquer coisa e so falar !!!
Abs!!1
GOSTEI 0
Paulo Freire
28/09/2009
Olá Rodrigão, como vc disse belezinha, compilou a procedure e a aplicação, porem ao chama-la em localhost/shalomweb, me aparece essa exceção conforme a figura enviada. Meu botão filtrar está dessa forma.
procedure TParametrizado.btFiltrar_Click(sender: System.Object; e: System.EventArgs);
var
Comand : SqlCommand;
Conn : SqlConnection;
SqlReader : SqlDataReader;
Grupo, Tratamento, Profissao, Igreja, Escolaridade, EstadoCivil,
Sexo : string;
i : integer;
begin
For i := 0 to ListBox_Grupos.Items.Count-1 do
begin
if ListBox_Grupos.Items[I].Selected then
Grupo := Grupo + ListBox_Grupos.Items[I].Value+',';
end;
Grupo := Grupo.Remove(Grupo.Length,1);
For i := 0 to ListBox_Tratamentos.Items.Count-1 do
begin
if ListBox_Tratamentos.Items[I].Selected then
Tratamento := Tratamento + ListBox_Tratamentos.Items[I].Value+',';
end;
Tratamento := Tratamento.Remove(Tratamento.Length,1);
For i := 0 to ListBox_Profissoes.Items.Count-1 do
begin
if ListBox_Profissoes.Items[I].Selected then
Profissao := Profissao + ListBox_Profissoes.Items[I].Value+',';
end;
Profissao := Profissao.Remove(Profissao.Length,1);
For i := 0 to ListBox_Igreja.Items.Count-1 do
begin
if ListBox_Igreja.Items[I].Selected then
Igreja := Igreja + ListBox_Igreja.Items[I].Value+',';
end;
Igreja := Igreja.Remove(Igreja.Length,1);
For i := 0 to ListBox_Escolaridade.Items.Count-1 do
begin
if ListBox_Escolaridade.Items[I].Selected then
Escolaridade := Escolaridade + ListBox_Escolaridade.Items[I].Value+',';
end;
Escolaridade := Escolaridade.Remove(Escolaridade.Length,1);
For i := 0 to ListBox_EstadoCivil.Items.Count-1 do
begin
if ListBox_EstadoCivil.Items[I].Selected then
EstadoCivil := EstadoCivil + ListBox_EstadoCivil.Items[I].Value+',';
end;
EstadoCivil := EstadoCivil.Remove(EstadoCivil.Length,1);
For i := 0 to ListBox_Sexo.Items.Count-1 do
begin
if ListBox_Sexo.Items[I].Selected then
Sexo := Sexo + ListBox_Sexo.Items[I].Value+',';
end;
Sexo := Sexo.Remove(Sexo.Length,1);
Conn := SqlConnection.Create(ConfigurationManager.ConnectionStrings['ConexaoShalom'].ToString);
Comand := SqlCommand.Create('spParametrizado', Conn);
Comand.CommandType := CommandType.StoredProcedure;
Comand.Parameters.Add('@IDGRUPO', Grupo);
Comand.Parameters.Add('@IDTRATAMENTO', Tratamento);
Comand.Parameters.Add('@IDPROFISSAO', Profissao);
Comand.Parameters.Add('@IDIGREJA', Igreja);
Comand.Parameters.Add('@IDESCOLARIDADE', Escolaridade);
Comand.Parameters.Add('@IDESTADOCIVIL', EstadoCivil);
Comand.Parameters.Add('@SEXO', Sexo);
Conn.Open;
SqlReader := Comand.ExecuteReader;
if SqlReader.HasRows then
begin
try
GridViewParametrizado.DataSource := SqlReader;
GridViewParametrizado.DataBind;
finally
Conn.Close;
end;
end else
MessageScript( Page, 'Não foram encontrados Registros conforme Selecionados !!!');
end;
procedure TParametrizado.btFiltrar_Click(sender: System.Object; e: System.EventArgs);
var
Comand : SqlCommand;
Conn : SqlConnection;
SqlReader : SqlDataReader;
Grupo, Tratamento, Profissao, Igreja, Escolaridade, EstadoCivil,
Sexo : string;
i : integer;
begin
For i := 0 to ListBox_Grupos.Items.Count-1 do
begin
if ListBox_Grupos.Items[I].Selected then
Grupo := Grupo + ListBox_Grupos.Items[I].Value+',';
end;
Grupo := Grupo.Remove(Grupo.Length,1);
For i := 0 to ListBox_Tratamentos.Items.Count-1 do
begin
if ListBox_Tratamentos.Items[I].Selected then
Tratamento := Tratamento + ListBox_Tratamentos.Items[I].Value+',';
end;
Tratamento := Tratamento.Remove(Tratamento.Length,1);
For i := 0 to ListBox_Profissoes.Items.Count-1 do
begin
if ListBox_Profissoes.Items[I].Selected then
Profissao := Profissao + ListBox_Profissoes.Items[I].Value+',';
end;
Profissao := Profissao.Remove(Profissao.Length,1);
For i := 0 to ListBox_Igreja.Items.Count-1 do
begin
if ListBox_Igreja.Items[I].Selected then
Igreja := Igreja + ListBox_Igreja.Items[I].Value+',';
end;
Igreja := Igreja.Remove(Igreja.Length,1);
For i := 0 to ListBox_Escolaridade.Items.Count-1 do
begin
if ListBox_Escolaridade.Items[I].Selected then
Escolaridade := Escolaridade + ListBox_Escolaridade.Items[I].Value+',';
end;
Escolaridade := Escolaridade.Remove(Escolaridade.Length,1);
For i := 0 to ListBox_EstadoCivil.Items.Count-1 do
begin
if ListBox_EstadoCivil.Items[I].Selected then
EstadoCivil := EstadoCivil + ListBox_EstadoCivil.Items[I].Value+',';
end;
EstadoCivil := EstadoCivil.Remove(EstadoCivil.Length,1);
For i := 0 to ListBox_Sexo.Items.Count-1 do
begin
if ListBox_Sexo.Items[I].Selected then
Sexo := Sexo + ListBox_Sexo.Items[I].Value+',';
end;
Sexo := Sexo.Remove(Sexo.Length,1);
Conn := SqlConnection.Create(ConfigurationManager.ConnectionStrings['ConexaoShalom'].ToString);
Comand := SqlCommand.Create('spParametrizado', Conn);
Comand.CommandType := CommandType.StoredProcedure;
Comand.Parameters.Add('@IDGRUPO', Grupo);
Comand.Parameters.Add('@IDTRATAMENTO', Tratamento);
Comand.Parameters.Add('@IDPROFISSAO', Profissao);
Comand.Parameters.Add('@IDIGREJA', Igreja);
Comand.Parameters.Add('@IDESCOLARIDADE', Escolaridade);
Comand.Parameters.Add('@IDESTADOCIVIL', EstadoCivil);
Comand.Parameters.Add('@SEXO', Sexo);
Conn.Open;
SqlReader := Comand.ExecuteReader;
if SqlReader.HasRows then
begin
try
GridViewParametrizado.DataSource := SqlReader;
GridViewParametrizado.DataBind;
finally
Conn.Close;
end;
end else
MessageScript( Page, 'Não foram encontrados Registros conforme Selecionados !!!');
end;
GOSTEI 0
Paulo Freire
28/09/2009
Opa acho que a imagem não foi, segue novamente.
GOSTEI 0
Rodrigo Mourão
28/09/2009
Falha minha.
Segue código correto:
Grupo := Grupo.Remove(Grupo.Length-1,1);
E sempre Length-1.
Abs !!1
Segue código correto:
Grupo := Grupo.Remove(Grupo.Length-1,1);
E sempre Length-1.
Abs !!1
GOSTEI 0
Paulo Freire
28/09/2009
Olá Rodrigo, devo estar fazendo algo errado: vejas telas:
GOSTEI 0
Paulo Freire
28/09/2009
O código do botão está ssim:
procedure TParametrizado.btFiltrar_Click(sender: System.Object; e: System.EventArgs);
var
Comand : SqlCommand;
Conn : SqlConnection;
SqlReader : SqlDataReader;
Grupo, Tratamento, Profissao, Igreja, Escolaridade, EstadoCivil,
Sexo : string;
i : integer;
begin
For i := 0 to ListBox_Grupos.Items.Count-1 do
begin
if ListBox_Grupos.Items[I].Selected then
Grupo := Grupo + ListBox_Grupos.Items[I].Value+',';
end;
Grupo := Grupo.Remove(Grupo.Length-1,1);
For i := 0 to ListBox_Tratamentos.Items.Count-1 do
begin
if ListBox_Tratamentos.Items[I].Selected then
Tratamento := Tratamento + ListBox_Tratamentos.Items[I].Value+',';
end;
Tratamento := Tratamento.Remove(Tratamento.Length-1,1);
For i := 0 to ListBox_Profissoes.Items.Count-1 do
begin
if ListBox_Profissoes.Items[I].Selected then
Profissao := Profissao + ListBox_Profissoes.Items[I].Value+',';
end;
Profissao := Profissao.Remove(Profissao.Length-1,1);
For i := 0 to ListBox_Igreja.Items.Count-1 do
begin
if ListBox_Igreja.Items[I].Selected then
Igreja := Igreja + ListBox_Igreja.Items[I].Value+',';
end;
Igreja := Igreja.Remove(Igreja.Length-1,1);
For i := 0 to ListBox_Escolaridade.Items.Count-1 do
begin
if ListBox_Escolaridade.Items[I].Selected then
Escolaridade := Escolaridade + ListBox_Escolaridade.Items[I].Value+',';
end;
Escolaridade := Escolaridade.Remove(Escolaridade.Length-1,1);
For i := 0 to ListBox_EstadoCivil.Items.Count-1 do
begin
if ListBox_EstadoCivil.Items[I].Selected then
EstadoCivil := EstadoCivil + ListBox_EstadoCivil.Items[I].Value+',';
end;
EstadoCivil := EstadoCivil.Remove(EstadoCivil.Length-1,1);
For i := 0 to ListBox_Sexo.Items.Count-1 do
begin
if ListBox_Sexo.Items[I].Selected then
Sexo := Sexo + ListBox_Sexo.Items[I].Value+',';
end;
Sexo := Sexo.Remove(Sexo.Length-1,1);
Conn := SqlConnection.Create(ConfigurationManager.ConnectionStrings['ConexaoShalom'].ToString);
Comand := SqlCommand.Create('spParametrizado', Conn);
Comand.CommandType := CommandType.StoredProcedure;
Comand.Parameters.Add('@IDGRUPO', Grupo);
Comand.Parameters.Add('@IDTRATAMENTO', Tratamento);
Comand.Parameters.Add('@IDPROFISSAO', Profissao);
Comand.Parameters.Add('@IDIGREJA', Igreja);
Comand.Parameters.Add('@IDESCOLARIDADE', Escolaridade);
Comand.Parameters.Add('@IDESTADOCIVIL', EstadoCivil);
Comand.Parameters.Add('@SEXO', Sexo);
Conn.Open;
SqlReader := Comand.ExecuteReader;
if SqlReader.HasRows then
begin
try
GridViewParametrizado.DataSource := SqlReader;
GridViewParametrizado.DataBind;
finally
Conn.Close;
end;
end else
MessageScript( Page, 'Não foram encontrados Registros conforme Selecionados !!!');
end;
procedure TParametrizado.btFiltrar_Click(sender: System.Object; e: System.EventArgs);
var
Comand : SqlCommand;
Conn : SqlConnection;
SqlReader : SqlDataReader;
Grupo, Tratamento, Profissao, Igreja, Escolaridade, EstadoCivil,
Sexo : string;
i : integer;
begin
For i := 0 to ListBox_Grupos.Items.Count-1 do
begin
if ListBox_Grupos.Items[I].Selected then
Grupo := Grupo + ListBox_Grupos.Items[I].Value+',';
end;
Grupo := Grupo.Remove(Grupo.Length-1,1);
For i := 0 to ListBox_Tratamentos.Items.Count-1 do
begin
if ListBox_Tratamentos.Items[I].Selected then
Tratamento := Tratamento + ListBox_Tratamentos.Items[I].Value+',';
end;
Tratamento := Tratamento.Remove(Tratamento.Length-1,1);
For i := 0 to ListBox_Profissoes.Items.Count-1 do
begin
if ListBox_Profissoes.Items[I].Selected then
Profissao := Profissao + ListBox_Profissoes.Items[I].Value+',';
end;
Profissao := Profissao.Remove(Profissao.Length-1,1);
For i := 0 to ListBox_Igreja.Items.Count-1 do
begin
if ListBox_Igreja.Items[I].Selected then
Igreja := Igreja + ListBox_Igreja.Items[I].Value+',';
end;
Igreja := Igreja.Remove(Igreja.Length-1,1);
For i := 0 to ListBox_Escolaridade.Items.Count-1 do
begin
if ListBox_Escolaridade.Items[I].Selected then
Escolaridade := Escolaridade + ListBox_Escolaridade.Items[I].Value+',';
end;
Escolaridade := Escolaridade.Remove(Escolaridade.Length-1,1);
For i := 0 to ListBox_EstadoCivil.Items.Count-1 do
begin
if ListBox_EstadoCivil.Items[I].Selected then
EstadoCivil := EstadoCivil + ListBox_EstadoCivil.Items[I].Value+',';
end;
EstadoCivil := EstadoCivil.Remove(EstadoCivil.Length-1,1);
For i := 0 to ListBox_Sexo.Items.Count-1 do
begin
if ListBox_Sexo.Items[I].Selected then
Sexo := Sexo + ListBox_Sexo.Items[I].Value+',';
end;
Sexo := Sexo.Remove(Sexo.Length-1,1);
Conn := SqlConnection.Create(ConfigurationManager.ConnectionStrings['ConexaoShalom'].ToString);
Comand := SqlCommand.Create('spParametrizado', Conn);
Comand.CommandType := CommandType.StoredProcedure;
Comand.Parameters.Add('@IDGRUPO', Grupo);
Comand.Parameters.Add('@IDTRATAMENTO', Tratamento);
Comand.Parameters.Add('@IDPROFISSAO', Profissao);
Comand.Parameters.Add('@IDIGREJA', Igreja);
Comand.Parameters.Add('@IDESCOLARIDADE', Escolaridade);
Comand.Parameters.Add('@IDESTADOCIVIL', EstadoCivil);
Comand.Parameters.Add('@SEXO', Sexo);
Conn.Open;
SqlReader := Comand.ExecuteReader;
if SqlReader.HasRows then
begin
try
GridViewParametrizado.DataSource := SqlReader;
GridViewParametrizado.DataBind;
finally
Conn.Close;
end;
end else
MessageScript( Page, 'Não foram encontrados Registros conforme Selecionados !!!');
end;
GOSTEI 0
Rodrigo Mourão
28/09/2009
Na verdade foi outro vacilo meu. Como falei nao consegui rodar a aplicacao por problemas com o SqlServer. Mas o que ocorre e o seguinte. Se vc nao selecionar pelo menos um item no listbox vai dar este erro.
Tenta isso:
For i := 0 to ListBox_Grupos.Items.Count-1 do
begin
if ListBox_Grupos.Items[I].Selected then
Grupo := Grupo + ListBox_Grupos.Items[I].Value+',';
end;
If Grupo.Length > 0 then
Grupo := Grupo.Remove(Grupo.Length-1,1);
Faça o mesmo com Tratamento, profissao, etc, etc.
Me mantanha informado.
abs!!
Tenta isso:
For i := 0 to ListBox_Grupos.Items.Count-1 do
begin
if ListBox_Grupos.Items[I].Selected then
Grupo := Grupo + ListBox_Grupos.Items[I].Value+',';
end;
If Grupo.Length > 0 then
Grupo := Grupo.Remove(Grupo.Length-1,1);
Faça o mesmo com Tratamento, profissao, etc, etc.
Me mantanha informado.
abs!!
GOSTEI 0
Paulo Freire
28/09/2009
Esta parando inclusive na linha 260, adicionada agora, será que não seria melhor usar um comand do que store procedure.
Poderia usar aquela sua lógica que vc usa no curso de DBXEspress e firebird no aplicativo Comercial, vou postar aqui pra tu lembrar.
procedure TFrmVendas.ConsultaProduto;
var
S: TStringList;
begin
S := TStringList.Create;
S.Add('Select P.Produtoid Codigo, P.Descricao, P.Estoque, P.Preco, ');
S.Add(' F.Descricao Fabricante, C.Descricao Categoria ');
S.Add(' From Categoria C, Fabricante F, Produtos P ');
S.Add(' Where P.Categoria = C.Categoriaid ');
S.Add(' and P.Fabricante = F.Fabricanteid ');
if EdtCodigo.Text <> EmptyStr then
S.Add(' and P.ProdutoID = '+EdtCodigo.Text );
if EdtDescricao.Text <> EmptyStr then
S.Add(' and P.Descricao Like '+QuotedStr(EdtDescricao.Text+'%') );
if EdtFabricante.Text <> EmptyStr then
S.Add(' and F.Descricao Like '+QuotedStr(EdtFabricante.Text+'%') );
if EdtCategoria.Text <> EmptyStr then
S.Add(' and C.Descricao Like '+QuotedStr(EdtCategoria.Text+'%') );
cdsConsultaProduto.Close;
cdsConsultaProduto.CommandText := S.Text;
cdsConsultaProduto.Open;
FreeAndNil(S);
end;
Achei isso aqui o máximo.
Segue a nova tela
Poderia usar aquela sua lógica que vc usa no curso de DBXEspress e firebird no aplicativo Comercial, vou postar aqui pra tu lembrar.
procedure TFrmVendas.ConsultaProduto;
var
S: TStringList;
begin
S := TStringList.Create;
S.Add('Select P.Produtoid Codigo, P.Descricao, P.Estoque, P.Preco, ');
S.Add(' F.Descricao Fabricante, C.Descricao Categoria ');
S.Add(' From Categoria C, Fabricante F, Produtos P ');
S.Add(' Where P.Categoria = C.Categoriaid ');
S.Add(' and P.Fabricante = F.Fabricanteid ');
if EdtCodigo.Text <> EmptyStr then
S.Add(' and P.ProdutoID = '+EdtCodigo.Text );
if EdtDescricao.Text <> EmptyStr then
S.Add(' and P.Descricao Like '+QuotedStr(EdtDescricao.Text+'%') );
if EdtFabricante.Text <> EmptyStr then
S.Add(' and F.Descricao Like '+QuotedStr(EdtFabricante.Text+'%') );
if EdtCategoria.Text <> EmptyStr then
S.Add(' and C.Descricao Like '+QuotedStr(EdtCategoria.Text+'%') );
cdsConsultaProduto.Close;
cdsConsultaProduto.CommandText := S.Text;
cdsConsultaProduto.Open;
FreeAndNil(S);
end;
Achei isso aqui o máximo.
Segue a nova tela
GOSTEI 0
Rodrigo Mourão
28/09/2009
N verdade o cominho não seria nem esse. O problema ai e que se nao houver seleção no ListBox nao tem conteuno na variavel e no .net quando nao há valor na variavel nao podemos fazer o boxing ou seja não podemos acessá-la como objeto.
Agora vai, com assigned testamos o ponteiro para o objeto.
Faça assim:
For i := 0 to ListBox_Grupos.Items.Count-1 do
begin
if ListBox_Grupos.Items[I].Selected then
Grupo := Grupo + ListBox_Grupos.Items[I].Value+',';
end;
if assigned(Grupo) then
Grupo := Grupo.Remove(Grupo.Length-1,1);
For i := 0 to ListBox_Tratamentos.Items.Count-1 do
begin
if ListBox_Tratamentos.Items[I].Selected then
Tratamento := Tratamento + ListBox_Tratamentos.Items[I].Value+',';
end;
if assigned(Tratamento) then
Tratamento := Tratamento.Remove(Tratamento.Length-1,1);
For i := 0 to ListBox_Profissoes.Items.Count-1 do
begin
if ListBox_Profissoes.Items[I].Selected then
Profissao := Profissao + ListBox_Profissoes.Items[I].Value+',';
end;
if assigned(Profissao) then
Profissao := Profissao.Remove(Profissao.Length-1,1);
For i := 0 to ListBox_Igreja.Items.Count-1 do
begin
if ListBox_Igreja.Items[I].Selected then
Igreja := Igreja + ListBox_Igreja.Items[I].Value+',';
end;
if assigned(Igreja) then
Igreja := Igreja.Remove(Igreja.Length-1,1);
For i := 0 to ListBox_Escolaridade.Items.Count-1 do
begin
if ListBox_Escolaridade.Items[I].Selected then
Escolaridade := Escolaridade + ListBox_Escolaridade.Items[I].Value+',';
end;
if assigned(Escolaridade) then
Escolaridade := Escolaridade.Remove(Escolaridade.Length-1,1);
For i := 0 to ListBox_EstadoCivil.Items.Count-1 do
begin
if ListBox_EstadoCivil.Items[I].Selected then
EstadoCivil := EstadoCivil + ListBox_EstadoCivil.Items[I].Value+',';
end;
if assigned(EstadoCivil) then
EstadoCivil := EstadoCivil.Remove(EstadoCivil.Length-1,1);
For i := 0 to ListBox_Sexo.Items.Count-1 do
begin
if ListBox_Sexo.Items[I].Selected then
Sexo := Sexo + ListBox_Sexo.Items[I].Value+',';
end;
if assigned(Sexo) then
Sexo := Sexo.Remove(Sexo.Length-1,1);
Abs!!
Agora vai, com assigned testamos o ponteiro para o objeto.
Faça assim:
For i := 0 to ListBox_Grupos.Items.Count-1 do
begin
if ListBox_Grupos.Items[I].Selected then
Grupo := Grupo + ListBox_Grupos.Items[I].Value+',';
end;
if assigned(Grupo) then
Grupo := Grupo.Remove(Grupo.Length-1,1);
For i := 0 to ListBox_Tratamentos.Items.Count-1 do
begin
if ListBox_Tratamentos.Items[I].Selected then
Tratamento := Tratamento + ListBox_Tratamentos.Items[I].Value+',';
end;
if assigned(Tratamento) then
Tratamento := Tratamento.Remove(Tratamento.Length-1,1);
For i := 0 to ListBox_Profissoes.Items.Count-1 do
begin
if ListBox_Profissoes.Items[I].Selected then
Profissao := Profissao + ListBox_Profissoes.Items[I].Value+',';
end;
if assigned(Profissao) then
Profissao := Profissao.Remove(Profissao.Length-1,1);
For i := 0 to ListBox_Igreja.Items.Count-1 do
begin
if ListBox_Igreja.Items[I].Selected then
Igreja := Igreja + ListBox_Igreja.Items[I].Value+',';
end;
if assigned(Igreja) then
Igreja := Igreja.Remove(Igreja.Length-1,1);
For i := 0 to ListBox_Escolaridade.Items.Count-1 do
begin
if ListBox_Escolaridade.Items[I].Selected then
Escolaridade := Escolaridade + ListBox_Escolaridade.Items[I].Value+',';
end;
if assigned(Escolaridade) then
Escolaridade := Escolaridade.Remove(Escolaridade.Length-1,1);
For i := 0 to ListBox_EstadoCivil.Items.Count-1 do
begin
if ListBox_EstadoCivil.Items[I].Selected then
EstadoCivil := EstadoCivil + ListBox_EstadoCivil.Items[I].Value+',';
end;
if assigned(EstadoCivil) then
EstadoCivil := EstadoCivil.Remove(EstadoCivil.Length-1,1);
For i := 0 to ListBox_Sexo.Items.Count-1 do
begin
if ListBox_Sexo.Items[I].Selected then
Sexo := Sexo + ListBox_Sexo.Items[I].Value+',';
end;
if assigned(Sexo) then
Sexo := Sexo.Remove(Sexo.Length-1,1);
Abs!!
GOSTEI 0
Paulo Freire
28/09/2009
Fala Rodrigo, acho que agora passou pela aplicação beleza, o erro que apresenta agora deve ser algo na store procedure, se vc puder me ajudar eu agradeço, se não eu compreendo.
Abraços.
Abraços.
GOSTEI 0
Rodrigo Mourão
28/09/2009
Olá Paulo,
Não sou especialista em SqlServer, ja deupara perceber e nem sou muito fã também mas pela mensagem de erro ele esta entendendo os valores passados para procedure como sendo colunas e não valores. Isso ocorre geralmente quando colocanos um valor inteiro entre aspas ou algo do genero.
Verifique na sua procedure na parte onde vc contatena o wehre com o valor do parametro. Acredito que o problema estaja lá.
Abs!!
Não sou especialista em SqlServer, ja deupara perceber e nem sou muito fã também mas pela mensagem de erro ele esta entendendo os valores passados para procedure como sendo colunas e não valores. Isso ocorre geralmente quando colocanos um valor inteiro entre aspas ou algo do genero.
Verifique na sua procedure na parte onde vc contatena o wehre com o valor do parametro. Acredito que o problema estaja lá.
Abs!!
GOSTEI 0
Rodrigo Mourão
28/09/2009
Olá amigo, as dicas ajudaram ?
Podemos encerrar o chamado ??
Estamos no aguardo !!!1
Abs!!!
Podemos encerrar o chamado ??
Estamos no aguardo !!!1
Abs!!!
GOSTEI 0
Paulo Freire
28/09/2009
Pode sim Rodrigo, valeu, e um abraço.
GOSTEI 0