Posts
04/11/2008
Silvio Paganini
begin
with sp_proceduredoBanco do
begin
Parameters.ParamByName(@DAtaIni).VAlue := VariavelDAtaInicial;
Parameters.ParamByName(@DAtaFim).VAlue := VariavelDAtaFinal;
Parameters.ParamByName(@motoqueiro).VAlue := Variavelmotoqueiro ;
ExecProc;
end;
end;
04/11/2008
Silvio Paganini
Detalhando a resposta anterior!
Você disse que tem a store procedure no Banco que visualiza as entregas feitas pelo motoqueiro em um determinado periodo,
e você quer passar os parametros pelo Delhi 2007.
Para passar parametro do Dephi para a sua store procedure do Banco Sql Server
use o componente AdoStoredProc da paleta dbGo.
No Delphi ficaria assim:
procedure twebform1...
var
VariavelDAtaInicial : Datetime;
VariavelDAtaFinal : Datetime;
Variavelmotoqueiro : string;
begin
with Nome_AdoStoredProc do
begin
Parameters.ParamByName(@DAtaIni).VAlue := VariavelDAtaInicial;
Parameters.ParamByName(@DAtaFim).VAlue := VariavelDAtaFinal;
Parameters.ParamByName(@motoqueiro).VAlue := Variavelmotoqueiro ;
ExecProc;
end;
end;
04/11/2008
Guinther Pauli
Complementando a resposta anterior....,
Vamos entender bem a situação para que possamos abstrair a solução correta. Você possui uma Entidade (tabela) que armazena todas as entregas dos motoqueiros. Certo?
Sendo assim, para você ter todas as entregas feitas por um determinado motoqueiro, em um determinado período, o ideal é você utilizar a sua Query, pode ser com o DataSetProvider, e com o ClientDataSet, mas seria desnecessário caso a Query não seja SqlQuery, você so precisa utilizar a estrutura de DataSetProvider e ClientDataset quando trabalha com DataSet Unidirecionais, no caso o seria o SqlQuery. Para exibir o resultado da sua consulta utilizando a retornada pela Query use um DataSource com a propriedade DataSet Ligada a Query e um DbGrid com a propriedade ligada ao DataSource. A propriedade SQL de sua Query deve ficar como mostrado abaixo:
Select *
From TabelaEntregas
Where CampoMotoqueiro =:ParametroMotoqueiro
And CampoData between :ParametroDataIni and :ParamentroDataFim
No Delphi para ativar a consulta acima.
Se vc estiver utilizando uma Query da paleta BDE
Query.Close;
Query.ParamByName(ParametroMotoqueiro).asInteger := valor.. “se o campo motoqueiro na tabela for Integer”
Query.ParamByName(ParametroDataIni).asDateTime := valor.. Query.ParamByName(ParametroDataFim).asDateTime := valor..
Query.Open;
Se vc estiver utilizando um ADOQuery da paleta DbGo - ADO
AdoQuery.Close;
AdoQuery.Parameters.ParamByName(ParametroMotoqueiro).Value := valor;
AdoQuery.Parameters.ParamByName(ParametroDataIni).Value := valor;
AdoQuery.Parameters.ParamByName(ParametroDataFim).Value := valor;
AdoQuery.Open;
Se vc estiver utilizando um Componente SqlQuery da Paleta dbExpress
SqlQuery.Close;
SqlQuery.ParamByName(ParametroMotoqueiro).asInteger := valor.“se o campo motoqueiro na tabela for Integer”
SqlQuery.ParamByName(ParametroDataIni).asDateTime := valor.. SqlQuery.ParamByName(ParametroDataFim).asDateTime := valor..
SqlQuery.Open;
OBS. Lembrando que aqui você esta trabalhando com DataSet Unirecionais, e precisa utilizar a estrutura:
SQLConnection
SQLQuery – já utilizada
e
DataSetProvider
ClientDataSet
DataSource
Outra consideração muito importante para resolvermos a sua questão é entendermos com quais componentes de acesso a dados esta sendo feito a comunicação com o SQL SERVER, pois dependendo do tipo de Driver muda a forma de recebermos os dados da Query, como mostrado acima. Eu aconselho sempre a utilizar ADO, ou seja os componentes da paleta dbGO, todos os drivers em questão foram desenvolvidos pela Microsoft que também desenvolveu o SQL SERVER, ou seja “casamento” perfeito, resultando em 100% de compatibilidade. Se houver a necessidade de trabalhar com StoredProcedures para retornar os valores em questão, por favor me explique melhor o contexto. A idéia básica para uso de StoredProcedures no banco, como no caso do SqlServer, é para melhorar a performance de Inserção e Updates no banco.
Abraço...
05/11/2008
Guinther Pauli
ola Carlos td bem?As respostas foram satisfatorias? Vc conseguiu resolver seu problema? Precisa de + alguma ajuda? Estamos a disposicao!abs
boa noite
ainda nao foi suficiente ja vi que trablhar com data e meio chato o problema é que o campo la no banco do tipo smalldatetime ou seja e datahora. como eu vou filtar os pedidos de determinada data ?
06/11/2008
Guinther Pauli
Olá Carlos,
Vc não precisa preocupar-se com essa questão, tanto o campo DateTime como SmallDateTime irão funcionar da mesma forma, veja uma definição sobre esses tipos:
A diferença básica entre os dois esta na quantidade de bytes utilizados para o armazenamento, enquanto o datetime usa 8 bytes para o armazenamento, o smalldatetime usa apenas 4 bytes. É por esta razão que o datetime consegue armazenar um range maior de datas e com maior precisão que o smalldatetime.
Fiz um teste aqui agora, criei uma tabela com um campo SmallDateTime no Sql Server 2005, depois fiz uma query no Delphi utilizando ADOQuery e filtrei os registros da tabela pela data. Segue abaixo o SQL.
select *
from Table_1
where data between :dataIni and :datafim
Para ativá-la fiz os seguinte codigo:
with ADOQuery1 do
begin
Close;
Parameters.ParamByName(DataIni).value:= 01/01/2008; // aqui passei valores fixos mas pode vir de um MaskEdit por exemplo
Parameters.ParamByName(DataFim).value:= 30/01/2008;
Open;
end;
Funcionou perfeitamente. Você tentou fazer esse teste? Onde você esta com dificuldades?
Abraço
07/11/2008
Guinther Pauli
Carlos,
O código da explanação anterior (ID-> 343), funcionaria da mesma forma se vc utilizar da seguinte forma
Query1.Close;
Query1.ParamByName(DataIni).value:= 01/01/2008; // aqui passei valores fixos mas pode vir de um MaskEdit por exemplo
Query1.ParamByName(DataFim).value:= 30/01/2008;
Query1.Open;
O código do ID -> 343, usa o WITH é apenas para não precisarmos escrever o Query1 em todas as linhas, pois o WITH é inglês é COM.. então na linha abaixo estou dizendo.
with Query1 do == Com o Query1 faça.. o que vier entre o Begin e End .
Funcionou perfeitamente,
Você tentou fazer esse teste?
Onde você esta com dificuldades especificamente?
Na criação do SQL da Query ou na passagem de parâmetros?
Abraço
08/11/2008
Guinther Pauli
Carlos,
Continuo aguardando seu retorno,
abs
nao consegui atualizar o dado no grid se vc tiver um fonte de exemplo que funcione com o trio de compontentes envia ai para mim
09/11/2008
Guinther Pauli
Carlos,
A solicitação que faz, pelo que percebi pertence ao chamado 305.
Se for, por favor coloque essa solicitação no chamado 305, este chamado é o 306.
Somente após gravar sua solicitação lá(306) que poderei analisar e responder para você.
Preciso saber também se o problema deste chamado foi resolvido (305), visto que ele ainda está em aberto.
Grato pela compreensão,
abs.
11/11/2008
Guinther Pauli
Carlos,
Você tem mais alguma dúvida neste chamado ?
Posso considerá-lo como encerrado ?
abs
boa tarde guinter
a duvida e o seguinte la no banco o campo e do tipo smalldatetime ou seja data + hora eu quero filtar os registros por determinado dia sem a hora ex 31/10/2008 nao funciona pois no dia 31/10/2008 tem 300 pedidos cadastrados e ele nao filtra por causa da hora
se tiver jeito de fazer um video como o caso do dbgrid seria otimo pois aqui comigo nao funcionou os exemplos que vc me passou
12/11/2008
Guinther Pauli
Carlos,
ok,
Iremos providenciar uma vídeo....Guenta um pouquinho ai !!
abs
13/11/2008
Guinther Pauli
Carlos,
Só para ti posicionar,
Como estamos ainda "engatinhando" neste processo de consultoria,
Estamos nos adptando, ou seja, estamos com uma série de problemas internos que ainda estamos tendo que nos ajustar....novos consultores, versões diferentes, plataformas, adsl, etc, etc....
Por isso da demora em ti responder,
Ti peço desculpas e peço a gentiliza que aguarde mais um pouco,
Estaremos dando prioridade ao seu chamado,
Obrigado pela compreensão,
abs
13/11/2008
Guinther Pauli
Carlos,
Estamos analisando seu problema aqui e em muitos casos em que trabalhei com SQL Server não tive sucesso com DBX. O Sql Server é Microsoft e nada melhor do que drivers da própria para poder acessá-lo.
Sei que voce não gostaria de mudar o trio porém vc podeira fazer uma rotina com ADOConnection e AdoQuery e daí completar com DatasetProvider e ClientDataSet.
Um outra sugestão seria alterar o tipo do campo no banco para DateTime em carater emergencial.
Estou analisando outras soluções para poder auxiliá-lo.
abs