Fórum Consulta parametrizada usando dois campos #416308
07/05/2012
0
with TClientDataset(Dts_CadNCMCFOP.DataSet) do
begin
Close;
Params[0].AsInteger := TClientDataset(Dts_PescNCM_CFOP.DataSet).Fields [0].AsInteger;
Open;
end;
eu uso sqldataset, sqlprovider e clientdataset.
para obter os paramentos vou citar este exemplo.. no sqldataset no command text eu coloco
select * from CLIENTE where ID_CLIENTE = :ID
outro problema um dos campos é string e outro é decimal..outro problema estes dois campos são chaves primárias, os campos strings podem repetir e os decimal tbm más não existe uma combinação igual..meio complicado né..rsrs
se alguém poder me dá uma mãozinha..
Gilmar Moraes
Curtir tópico
+ 0Posts
07/05/2012
Joel Rodrigues
Se não der certo, tente explicar melhor a questão.
Abraço.
Gostei + 0
07/05/2012
Gilmar Moraes
Se não der certo, tente explicar melhor a questão.
Abraço.
Vou tentar explicar melhor..
Para eu chamar o registro encontrado na pesquisa em uma tabela com campo incremento é fácil uso este comando:
with TClientDataset(Dts_CadParFed.DataSet) do
begin
Close;
Params[0].AsInteger := TClientDataset(Dts_PescParFederal.DataSet).Fields [0].AsInteger;
Open;
end;
Como vc pode ter notado a tabela e a mesma em data modules diferentes, um data module é de pesquisa e outra para cadastro ou modificação.. quando faço a pesquisa e quero modificar algo siplismente clico no dbgride, isso aciona o código acima, este codigo seta a tabela de cadastro (ou de edição) na mesmo registro em que localizei..
Gostei + 0
07/05/2012
Joel Rodrigues
Agora foi que não entendi nada mesmo. Tudo bem que você usa dois datamodules e tal, mas qual o problema?
Gostei + 0
07/05/2012
Gilmar Moraes
Agora foi que não entendi nada mesmo. Tudo bem que você usa dois datamodules e tal, mas qual o problema?
basiamente presciso localizar um registro tendo como fonte de consulta dois campos de uma mesma tabela, usando parametrização..
Gostei + 0
07/05/2012
Bruno Leandro
with TClientDataset(Dts_CadNCMCFOP.DataSet) do
begin
Close;
Params[0].AsInteger := ID_Cliente;
Params[1].AsInteger := Valor_Campo2;
Open;
end;
Gostei + 0
07/05/2012
Gilmar Moraes
with TClientDataset(Dts_CadNCMCFOP.DataSet) do
begin
Close;
Params[0].AsInteger := ID_Cliente;
Params[1].AsInteger := Valor_Campo2;
Open;
end;
Massa vou testar..vlw
Gostei + 0
07/05/2012
William
Gostei + 0
07/05/2012
Gilmar Moraes
é assim..para evitar resultados indesejados e economizar forms existe partes do meu programa que uso consulta e cadastro num mesmo form..vamos imaginar que presciso ajustar um ítem no estoque, é feito a busca deste ítem usando o datamodule de pesquisa (sem interferir no de cadastro), apos ser localizado seleciono o registro encontrado dando um click..no evento onclick do meu dbgrid tem uma função onde seto a tabela de pesquisa com a tabela da cadastro podendo assim edita-la, um problema que eu teria se a pesquisa fosse na mesma tabela apos ter feito uma pesquisa´seria quando eu desse um insert adicionario os dados e apo´s salvar os dados sumiriam da minha tela..estariam salvos más não na minha tela. um problema de estética entre outros.
Gostei + 0
08/05/2012
Gilmar Moraes
with TClientDataset(Dts_CadNCMCFOP.DataSet) do
begin
Close;
Params[0].AsInteger := ID_Cliente;
Params[1].AsInteger := Valor_Campo2;
Open;
end;
Massa vou testar..vlw
Funcionou vlw mesmo ..más apareceu um problema de ordem de estética más isso acaba fazendo com que a pesquise não funciona direito..,estas pesquisa são numeros, estes seguem um padrão de formatação especifico, o primeiro teria uma formatação algo assim 0000.00.00, este foi fácil de resolver usando um mask edit e pesquisa funcionou..más o segundo campo segue este padrão 0.0 ou 0.00 ou 0.000.. no imputmask coloco 0\.000;1;_ a formatação atende neste caso e funciona a pesquisa somente se todos os campos tiverem sido prenchido se eu colocar um numero menor não funciona tipo 1.20 ou 1.1 só funciona 1.101 num teria um jeito de colocar no imput mask tipo 1.xxx ou seja a mascara funcinaria somente até o ponto depois do ponto seria livre da mascara..
Gostei + 0
08/05/2012
Joel Rodrigues
var parametro:string; begin parametro := Trim(MaskEdit1.Text); end;
Com isso, o usuário pode digitar valores nos formados 0.0, 0.00 e 0.000. Caso seja digitado 0.0, sobrará um espaço no final, com o Trim você o remove.
Gostei + 0
08/05/2012
Gilmar Moraes
var parametro:string; begin parametro := Trim(MaskEdit1.Text); end;
Com isso, o usuário pode digitar valores nos formados 0.0, 0.00 e 0.000. Caso seja digitado 0.0, sobrará um espaço no final, com o Trim você o remove.
Funciou muito bem..vlw mesmo..más como em programação sempre tem alguns bug´s acabei de achar mais um problema no meu código..descobri que na minha pequisa(sem ser a parametrizada)não esta fazendo corretamente aliás por algum motivo o código está ignorando a primeira pesquisa..
var
CFOP,NCM : string;
begin
CFOP := Trim(MaskEdit2.Text);
NCM := Trim(MaskEdit1.Text);
with TClientDataSet(Dts_PescNCM_CFOP.DataSet) do
begin
Close;
CommandText:= SELECT * FROM NCM_CFOP WHERE COD_NCM like + Quotedstr(NCM + %);
CommandText:= SELECT * FROM NCM_CFOP WHERE COD_CFOP like + Quotedstr(CFOP + %);
Open;
end;
Fiz um teste separado de cada funcção e ambas funcionam idependentes más juntas só prevalece a pesquisa CFOP..
Gostei + 0
08/05/2012
Bruno Leandro
begin
Close;
CommandText:= SELECT * FROM NCM_CFOP WHERE COD_NCM like + Quotedstr(NCM + %);
CommandText:= SELECT * FROM NCM_CFOP WHERE COD_CFOP like + Quotedstr(CFOP + %);
Open;
end;
o problema aqui é que voce colocou um CommandText abaixo do outro ou seja, quando ele executar o segundo irá apagar o primeiro, para realizar a consulta dos dois campos ao mesmo tempo, tente conforme modelo.
with TClientDataSet(Dts_PescNCM_CFOP.DataSet) do
begin
Close;
CommandText:= SELECT * FROM NCM_CFOP WHERE COD_NCM like + Quotedstr(NCM + %) + and COD_CFOP like + Quotedstr(CFOP + %);
Open;
end;
Gostei + 0
09/05/2012
Gilmar Moraes
begin
Close;
CommandText:= SELECT * FROM NCM_CFOP WHERE COD_NCM like + Quotedstr(NCM + %);
CommandText:= SELECT * FROM NCM_CFOP WHERE COD_CFOP like + Quotedstr(CFOP + %);
Open;
end;
o problema aqui é que voce colocou um CommandText abaixo do outro ou seja, quando ele executar o segundo irá apagar o primeiro, para realizar a consulta dos dois campos ao mesmo tempo, tente conforme modelo.
with TClientDataSet(Dts_PescNCM_CFOP.DataSet) do
begin
Close;
CommandText:= SELECT * FROM NCM_CFOP WHERE COD_NCM like + Quotedstr(NCM + %) + and COD_CFOP like + Quotedstr(CFOP + %);
Funcioou tinindo este um meio de deixar esta pesquisa mais apurada ? do jeito que está se eu colocar no cfop ex: campo 1 coloco 0000.00.00 e no outro coloco 1.101 blz aí a cunsulta fuciona do jeito que tem que ser mpas se eu colocar 1.1 aparece um monte..para mim se existisse este registro mostrar se não não mostar uma consulta exata..troquei o like por = más deu erro na consulta..
Open;
end;
Gostei + 0
09/05/2012
Bruno Leandro
CommandText:= SELECT * FROM NCM_CFOP WHERE COD_NCM = + Quotedstr(Trim(NCM)) + and COD_CFOP = + Quotedstr(Trim(CFOP));
Gostei + 0
09/05/2012
Gilmar Moraes
CommandText:= SELECT * FROM NCM_CFOP WHERE COD_NCM = + Quotedstr(Trim(NCM)) + and COD_CFOP = + Quotedstr(Trim(CFOP));
è meu patrão num é que deu certim igual anzou..rsrs desculpe a brincadeira..cara funcionou perfeitinho.vlw mesmo aproveitei e coloquei a função anterior como uma forma alternativa de busca..
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)