Criar Paramentors em tempo de execução ou modificar Sql ....
eu sinceramente não sei se esta é a melhor estratégia.. Mas dei uma pesquisada e não encontrei Nada a respeito.
O problema é o seguinte...gostaria de apresentar o resultado de uma pesquisa de acordo com as datas selecionadas pelo usuário em um grid
No form tenho um grid com a propriedade DgMultiSelectd em True , onde o usuário escolhera os registros que interressa a ele..Cada Registro tem um Campo Data com Valores Distintos , Pois bem , apos selecionados esses Registros no Grid , Gostaria de efetuar Uma pesquisa em uma [size=18:00cfb3ed6f]Outra Tabela [/size:00cfb3ed6f]que retorna todos os Registros que tem a Mesma Data que fora selecionado previamente pelo usuário
[b:00cfb3ed6f]quero destacar que aqui se tem duas coisas distintas.... Varrer as datas Selecionadas pelo usuário no Grid... Esta etápa eu sei fazer [/b:00cfb3ed6f]
Vamos supor que foram cinco as Datas onde chamarei de Data0,Data1,Data2,Data3,Data4
query1.Params[0].Value:=Data0;
query1.Params[1].Value:=Data1;
query1.Params[2].Value:=Data2;
query1.Params[3].Value:=Data3;
query1.Params[4].Value:=Data4;
Onde esses params Deveria ser Criados Em Tum Time Pois eu não sei quanto são os Registros previamente Selecionados pelo usuário... Tanto pode ser cinco , como pode ser um , dois , etc....
De Posse desse Parametros ai sim eu faria uma pesquisa
query1.close;
query1.sql.clear;
query1.sql.add(´select *From Nome Da Tabela´);
query1.sql.add(´where Data=:Params[0]´);
query1.sql.add(´and Data=:Params[1]´);
query1.sql.add(´and Data=:Params[2]´);
query1.sql.add(´and Data=:Params[3]´);
query1.sql.add(´and Data=:Params[4]´);
query1.prepare;
query1.open;
Enfim ,eu não sei se esta é uma melhor estratégia, outras poderão serem adicionadas para que surja alguma idéia... Talvez a melhor idéia nen seje a criação de parametros em RumTime , mas a modificação da Intrução sql em Rum Time...
[b:00cfb3ed6f]Mais uma vez deixo claro que o problema de determinar A Quantidade de Datas e os seus valores não representa problemas no atual estágio[/b:00cfb3ed6f]
Meu porblema é escrevar esta consulta , que poderia chamar assim : De Uma consulta Dinamica :lol: :lol: :lol:
Obrigado....
O problema é o seguinte...gostaria de apresentar o resultado de uma pesquisa de acordo com as datas selecionadas pelo usuário em um grid
No form tenho um grid com a propriedade DgMultiSelectd em True , onde o usuário escolhera os registros que interressa a ele..Cada Registro tem um Campo Data com Valores Distintos , Pois bem , apos selecionados esses Registros no Grid , Gostaria de efetuar Uma pesquisa em uma [size=18:00cfb3ed6f]Outra Tabela [/size:00cfb3ed6f]que retorna todos os Registros que tem a Mesma Data que fora selecionado previamente pelo usuário
[b:00cfb3ed6f]quero destacar que aqui se tem duas coisas distintas.... Varrer as datas Selecionadas pelo usuário no Grid... Esta etápa eu sei fazer [/b:00cfb3ed6f]
Vamos supor que foram cinco as Datas onde chamarei de Data0,Data1,Data2,Data3,Data4
A Outra coisa e Usar Estas Datas Como Restriçoes na Tabela a ser Consultada
Seria mais ou menos isto:query1.Params[0].Value:=Data0;
query1.Params[1].Value:=Data1;
query1.Params[2].Value:=Data2;
query1.Params[3].Value:=Data3;
query1.Params[4].Value:=Data4;
Onde esses params Deveria ser Criados Em Tum Time Pois eu não sei quanto são os Registros previamente Selecionados pelo usuário... Tanto pode ser cinco , como pode ser um , dois , etc....
De Posse desse Parametros ai sim eu faria uma pesquisa
query1.close;
query1.sql.clear;
query1.sql.add(´select *From Nome Da Tabela´);
query1.sql.add(´where Data=:Params[0]´);
query1.sql.add(´and Data=:Params[1]´);
query1.sql.add(´and Data=:Params[2]´);
query1.sql.add(´and Data=:Params[3]´);
query1.sql.add(´and Data=:Params[4]´);
query1.prepare;
query1.open;
Enfim ,eu não sei se esta é uma melhor estratégia, outras poderão serem adicionadas para que surja alguma idéia... Talvez a melhor idéia nen seje a criação de parametros em RumTime , mas a modificação da Intrução sql em Rum Time...
[b:00cfb3ed6f]Mais uma vez deixo claro que o problema de determinar A Quantidade de Datas e os seus valores não representa problemas no atual estágio[/b:00cfb3ed6f]
Meu porblema é escrevar esta consulta , que poderia chamar assim : De Uma consulta Dinamica :lol: :lol: :lol:
Obrigado....
Marco Salles
Curtidas 0
Respostas
Kapak
21/07/2005
var i:Integer; rDt:array of TDate; begin // alimente rDt if High(rDt) < 0 then Exit; query1.sql.clear; query1.sql.add(´select * From Nome Da Tabela Where Data = :P0´); for i := 1 to High(rDt) do query1.sql.add(´ or Data = :P´ + IntToStr(i)); for i := 0 to High(rDt) do query1.ParamByName(´P´+IntToStr(i)).AsDatetime := rDt[i]; query1.Open; end;
GOSTEI 0
Marco Salles
21/07/2005
Amigo kapak , fiquei feliz que alguem tenha entendido a minha dúvida.
De fato ja Tinha resolvido o problema parcialmente , e a solução encontrada foi muito parecida com a sua sugestão..
Agora to mais um pouquinho encrencado, Porque alem da Data , para complicar tenho que Pesquisar também para códigos...Esto é , quero como resultado da pesquisa , os registros que tenham o mesmo Codigo , selecionado do Grid e que tenha a mesma data :cry: :cry: :cry:
No caso acima , ta funcionando para registros selecionados na Grid com o mesmo Codigo.... Mas to precisando fazer uma consulta , onde o usuário irá salpicar a gosto , em vários registros da Grig , e a partir dos dados dos Regsitros Selecionados (Codigo_Funcionário e Data) Tenho que fazer uma esta consulta na tabela EntradaSaida :cry: :cry: :cry:
Mais alguma sugestão :oops: :oops: :oops: :oops:
Como eu disse anteriormente esses Registros são retornados pela Varivel
Obrigado :P :P :P :P
De fato ja Tinha resolvido o problema parcialmente , e a solução encontrada foi muito parecida com a sua sugestão..
bookMark:=Form1.QHorExt.Bookmark; bookMarkList:=Form1.DBGrid3.SelectedRows; Query1.close; query1.sql.Clear; query1.sql.add(´select *From TabEntradaSaida´); query1.sql.add(´where Codigo_Funcionario=:CodigoFun and (´); query1.ParamByName(´CodigoFun´).AsString:=Codigo; i:=0; query1.sql.add(´(Data=:´+inttoStr(i)+´)´); Query1.ParamByName(inttostr(i)).AsDateTime:=Form1.QHorExt.FieldByName(´Data´).AsDateTime; for i:=1 to BookMarkList.Count - 1 do begin Form1.QHorExt.bookMark:=BookMarkList[i]; query1.sql.add(´or (Data=:´+inttoStr(i)+´)´); Query1.ParamByName(inttostr(i)).AsDateTime:=Form1.QHorExt.FieldByName(´Data´).AsDateTime; (i))).AsDateTime:=Form1.QHorExt.FieldByName(´Data´).AsDateTime; end; query1.sql.add(´)´); query1.Prepare; Query1.open; Form1.QHorExt.Bookmark:=bookMark;
Agora to mais um pouquinho encrencado, Porque alem da Data , para complicar tenho que Pesquisar também para códigos...Esto é , quero como resultado da pesquisa , os registros que tenham o mesmo Codigo , selecionado do Grid e que tenha a mesma data :cry: :cry: :cry:
No caso acima , ta funcionando para registros selecionados na Grid com o mesmo Codigo.... Mas to precisando fazer uma consulta , onde o usuário irá salpicar a gosto , em vários registros da Grig , e a partir dos dados dos Regsitros Selecionados (Codigo_Funcionário e Data) Tenho que fazer uma esta consulta na tabela EntradaSaida :cry: :cry: :cry:
Mais alguma sugestão :oops: :oops: :oops: :oops:
Como eu disse anteriormente esses Registros são retornados pela Varivel
BookMarkList bookMarkList:=Form1.DBGrid3.SelectedRows; ..................... for i:=1 to BookMarkList.Count - 1 do begin Form1.QHorExt.bookMark:=BookMarkList[i]; ...................
Obrigado :P :P :P :P
GOSTEI 0
Kapak
21/07/2005
Colega, neste caso eu montaria um grupo de Where sempre c/ código e data:
Where ((Cod = :Cn) and (Data = :Dn)) or ((Cod = :Cn) and (Data = :Dn)) or ((Cod = :Cn) and (Data = :Dn)) ... variando n
GOSTEI 0
Marco Salles
21/07/2005
Acho que é mais ou menos isto aqui ... Não sei se tem Outras maneiras:::
bookMark:=Form1.QHorExt.Bookmark; bookMarkList:=Form1.DBGrid3.SelectedRows; Query1.close; query1.sql.Clear; query1.sql.add(´select *From TabEntradaSaida´); query1.Sql.Add(´Where ´); for i:=0 to BookMarkList.Count - 1 do begin if i > 0 Then query1.SQL.Add(´or (´); Form1.QHorExt.bookMark:=BookMarkList[i]; query1.sql.add(´codigo_funcionario=:C´+inttoStr(i)); query1.ParamByName(´C´+inttostr(i)).AsString:= Form1.QHorExt.fieldByName(´Codigo_Funcionario´).AsString; query1.Sql.Add(´and Data=:D´+inttostr(i)); Query1.ParamByName(´D´+inttostr(i)).AsDateTime:= Form1.QHorExt.FieldByName(´Data´).AsDateTime; if i > 0 Then query1.SQL.Add(´)´); end; query1.Prepare; Query1.open; Form1.QHorExt.Bookmark:=bookMark;
GOSTEI 0