 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qui Fev 08, 2018 1:38 pm Assunto: Como montar um metodo com parametro de array? |
|
|
Como montar um método com parâmetro de array?
Tentei assim, mais não esta certo
| Código: | procedure TProduto.GerarCargaBalanca(const idClassificacao: array of Integer);
begin
dmCadastros.qrySelect.Close;
dmCadastros.qrySelect.SQL.Clear;
dmCadastros.qrySelect.SQL.Text :=
' SELECT p.descricao, p.custo_medio_venda,'+
' p.id_unidade, p.codigo_barra, inf.dias '+
' FROM produto p '+
' LEFT JOIN produto_info_nutricionais inf '+
' ON p.id = inf.id_produto '+
' WHERE P.ID_CLASSIFICACAO IN (:pIDClassificacao) '+
' AND P.ATIVO = ''A'' '+
' ORDER BY P.ID_CLASSIFICACAO ';
dmCadastros.qrySelect.ParamByName('pIDClassificacao').AsInteger := idClassificacao;
dmCadastros.qrySelect.Open;
end; |
E aproveitando como faço para passar para este parametro de array uma lista de um checklistbox
Tipo la no chekclistbox marcar o check e ir populando o parametro
Ai quando o parametro receber ja ter todos id's que preciso
Exemplo
idClassificacao := 123,345,432,1222
Uma vez acho que foi o Imex me ajudou num exemplo que faz isso, mais faz muito tempo e eu não achei mais aqui no forum, que inclusive esta bem zoado, não da pra postar direito. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
| Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
|
| Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Sex Fev 09, 2018 10:52 am Assunto: Re: Como montar um metodo com parametro de array? |
|
|
| adriano_servitec escreveu: | E aproveitando como faço para passar para este parametro de array uma lista de um checklistbox
Tipo la no chekclistbox marcar o check e ir populando o parametro
Ai quando o parametro receber ja ter todos id's que preciso
Exemplo
idClassificacao := 123,345,432,1222 |
Veja se a função abaixo ajuda:
| Código: | function ListaItemsChecados(chkList: TCheckListBox): string;
var
i: Integer;
begin
for i := 0 to chkList.Count - 1 do
if chkList.Checked[i] then
Result := Result + chkList.Items[i] + ',';
if Result <> EmptyStr then
if Result[length(Result)] = ',' then
delete(Result, length(Result), 1);
end; |
Exemplo de uso:
| Código: | | ShowMessage(ListaItemsChecados(CheckListBox1)); |
A função irá retornar uma String com a lista de items checados separados por vírgula. _________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Sex Fev 09, 2018 12:20 pm Assunto: |
|
|
Vamos lá então natanbh1, parece que o forum esta de volta.
Fiz a função e adaptei a minha necessidade
| Código: | function ListaItemsChecados(chkList: TCheckListBox): string;
var
I: Integer;
begin
for I := 0 to chkList.Count - 1 do
if chkList.Checked[I] then
Result := Result + Copy(chkList.Items[I].Trim,
Pos('-', chkList.Items[I].Trim) + 1,
Length(chkList.Items[I].Trim)) + ',';
if Result <> EmptyStr then
if Result[Length(Result)] = ',' then
Delete(Result, Length(Result), 1);
end; |
Tenho aqui a função que preciso passar no where o result do checklistbox
| Código: | function TProdutoCargaBalanca.GerarCargaBalanca(const Args: array of string)
: TDataSource;
var
ds: TDataSource;
I: Integer;
begin
// for I := Low(Args) to High(Args) do
// Args[I] := StringReplace(Args[I], '''', '', [rfReplaceAll]);
ds := TDataSource.Create(nil);
ds.DataSet := dmCadastros.qrySelect;
dmCadastros.qrySelect.Close;
dmCadastros.qrySelect.SQL.Clear;
dmCadastros.qrySelect.SQL.Text :=
' SELECT p.descricao, p.custo_medio_venda,' +
' p.id_unidade, p.codigo_barra, inf.dias, p.id_classificacao ' +
' FROM produto p ' +
' LEFT JOIN produto_info_nutricionais inf ' +
' ON p.id = inf.id_produto ' +
' WHERE p.id_classificacao in ' + ListToText(Args)
+ ' AND p.id_cadastro = :pIDCadastro ' +
' AND p.ativo = ''A'' ' +
' ORDER BY p.id, p.descricao ';
dmCadastros.qrySelect.ParamByName('pIDCadastro').AsInteger :=
oUsuarioGlobal.IdCadastro;
dmCadastros.qrySelect.Open;
if not dmCadastros.qrySelect.IsEmpty then
Result := ds;
end; |
E aqui as 2 funções que vc me passou
| Código: | function ListToText(const Args: array of string): string; overload;
var
i: Integer;
begin
Result := '(';
for i := 0 to high(Args) do
Result := Result + QuotedStr(Args[i]) + ',';
Result[length(Result)] := ')';
end;
function ListToText(const Args: array of Integer): string; overload;
var
i: Integer;
begin
Result := '(';
for i := 0 to high(Args) do
Result := Result + IntToStr(Args[i]) + ',';
Result[length(Result)] := ')';
end; |
Chequei a tentar excluir as aspas do array, mais não consegui.
| Código: | // for I := Low(Args) to High(Args) do
// Args[I] := StringReplace(Args[I], '''', '', [rfReplaceAll]); |
Porém não deu certo
| Citação: | ---------------------------
Debugger Exception Notification
---------------------------
Project WebControlOffline.exe raised exception class EPgNativeException with message '[FireDAC][Phys][PG][libpq] ERROR: invalid input syntax for integer: "5653232,5654111"'.
---------------------------
Break Continue Help
---------------------------
|
Preciso que retorne os parametros assim
| Código: | | WHERE p.id_classificacao in ('5653232','5653740') |
ou assim
| Código: | | WHERE p.id_classificacao in (5653232,5653740) |
_________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Sex Fev 09, 2018 1:23 pm Assunto: |
|
|
Bom fazendo testes aqui, resolvi o problema assim:
A função
| Código: | function ListaItemsChecados(chkList: TCheckListBox): string;
var
I: Integer;
begin
for I := 0 to chkList.Count - 1 do
if chkList.Checked[I] then
Result := Result + QuotedStr(Copy(chkList.Items[I].Trim,
Pos('-', chkList.Items[I].Trim) + 1,
Length(chkList.Items[I].Trim))) + ',';
if Result <> EmptyStr then
if Result[Length(Result)] = ',' then
Delete(Result, Length(Result), 1);
end; |
A outra função do Listtext
f | Código: | unction ListToText(const Args: array of string): string; overload;
var
i: Integer;
begin
Result := '(';
for i := 0 to high(Args) do
Result := Result + (Args[i]) + ',';
Result[length(Result)] := ')';
end;
|
E a função final coloquei dentro de uma variavel, não sei porque, mais assim funcionou.
| Código: | function TProdutoCargaBalanca.GerarCargaBalanca(const Args: array of string)
: TDataSource;
var
ds: TDataSource;
I: Integer;
sSQL: String;
begin
sSQL :=
' SELECT p.descricao, p.custo_medio_venda,' +
' p.id_unidade, p.codigo_barra, inf.dias, p.id_classificacao ' +
' FROM '+ TB_PRODUTO +' p ' +
' LEFT JOIN produto_info_nutricionais inf ' +
' ON p.id = inf.id_produto ' +
' WHERE p.id_classificacao in ' + ListToText(Args) +
' AND p.id_cadastro = :pIDCadastro ' +
' AND p.ativo = ''A'' ' +
' ORDER BY p.id, p.descricao ';
ds := TDataSource.Create(nil);
ds.DataSet := dmCadastros.qrySelect;
dmCadastros.qrySelect.Close;
dmCadastros.qrySelect.SQL.Clear;
dmCadastros.qrySelect.SQL.Text := sSQL;
dmCadastros.qrySelect.ParamByName('pIDCadastro').AsInteger :=
oUsuarioGlobal.IdCadastro;
dmCadastros.qrySelect.Open;
if not dmCadastros.qrySelect.IsEmpty then
Result := ds;
end; |
Valeu amigo. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
| Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Sex Fev 09, 2018 1:25 pm Assunto: |
|
|
Blz, amigo. Que bom que conseguiu fazer funcionar aí.
Abraco. _________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|