Fórum Stored procedure #306

04/11/2008

0

boa noite   tenho um stored proc no banco sqlserver 2005 que visualiza as entregas feitas pelo motoqueiro em um determinado periodo. La no banco sql o campo datacad e do tipo smalldatetime ou seja data hora     como eu faço no delpi para passar esses trez parametros motoqueiro , dtinicial e dtfinal ?     estou usando um query ,datasetprovider , um clientdataset um datasource e um dbgrid     como ficaria o comando sql da query ?      
Carlos Faria

Carlos Faria

Responder

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;    
Responder

Gostei + 0

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;
Responder

Gostei + 0

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...  
Responder

Gostei + 0

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
Responder

Gostei + 0

05/11/2008

Carlos Faria

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 ?  
Responder

Gostei + 0

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
Responder

Gostei + 0

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  
Responder

Gostei + 0

08/11/2008

Guinther Pauli

Carlos, Continuo aguardando seu retorno,   abs
Responder

Gostei + 0

09/11/2008

Carlos Faria

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
Responder

Gostei + 0

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.
Responder

Gostei + 0

11/11/2008

Guinther Pauli

Carlos,   Você tem mais alguma dúvida neste chamado ?   Posso considerá-lo como encerrado ?   abs
Responder

Gostei + 0

11/11/2008

Carlos Faria

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
Responder

Gostei + 0

12/11/2008

Guinther Pauli

Carlos, ok, Iremos providenciar uma vídeo....Guenta um pouquinho ai !! abs    
Responder

Gostei + 0

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    
Responder

Gostei + 0

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar