Thiago B. Postado Novembro 6, 2008 Denunciar Share Postado Novembro 6, 2008 Olá pessoalEstou com um probleminha na hora de execultar o ADOQUERY, a mensagem de erro é a Seguinte."Qbjeto Parameter definido incorretamente.As informações são incosistentes ou incompletas"."isso ocorre quando na hora de excultas o AdoQuery".Segue logo abaixo o fonte a linguagem q estou usando e á C++ . AnsiString DataInicialSTC,DataFinalSTC; AnsiString DataInicialSTC2008,DataFinalSTC2008; AnsiString HoraInicialSTC2008,HoraFinalSTC2008; AnsiString Localizador; AnsiString usuarios, dataHoraInicial, dataHoraFinal; int indice; indice = CBoxConsumidoresSTC2008->ItemIndex; usuarios = CBoxConsumidoresSTC2008->Items->Strings[indice]; DataInicialSTC2008 = DTPickeDataInicialSTC2008->Date.DateString(); HoraInicialSTC2008 = DTPickeHoraInicialSTC2008->Time.TimeString(); DataFinalSTC2008 = DTPickeDataFinalSTC2008->Date.DateString(); HoraFinalSTC2008 = DTPickeHoraFinalSTC2008->Time.TimeString(); dataHoraInicial = DataInicialSTC2008 + " " + HoraInicialSTC2008; dataHoraFinal = DataFinalSTC2008 + " " + HoraFinalSTC2008; Localizador = "SELECT * FROM CurvaCargaUsuario WHERE USUARIO = " + usuarios + " AND DATA_HORA_INTEGRACAO >= #" + dataHoraInicial + "# AND DATA_HORA_INTEGRACAO <= #" + dataHoraFinal + "#"; ADOQuerySTC2008->Close(); ADOQuerySTC2008->SQL->Clear(); ADOQuerySTC2008->SQL->Add(Localizador); ADOQuerySTC2008->ExecSQL();Vlw ae galera, se alguém puder me ajudar Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MrMALJ Postado Novembro 6, 2008 Denunciar Share Postado Novembro 6, 2008 tente assim:Localizador = "SELECT * FROM CurvaCargaUsuario WHERE USUARIO = " & usuarios & " AND DATA_HORA_INTEGRACAO >= #" & dataHoraInicial & "# AND DATA_HORA_INTEGRACAO <= #" & dataHoraFinal & "#"; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thiago B. Postado Novembro 7, 2008 Autor Denunciar Share Postado Novembro 7, 2008 tente assim:Localizador = "SELECT * FROM CurvaCargaUsuario WHERE USUARIO = " & usuarios & " AND DATA_HORA_INTEGRACAO >= #" & dataHoraInicial & "# AND DATA_HORA_INTEGRACAO <= #" & dataHoraFinal & "#";Muito Obrigado pela ajuda mas, não funciono. Deu erro na hora de compilar, estou usando o C++ Builder 6.0. Tem outra opção que possa me ajudar ??? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MrMALJ Postado Novembro 7, 2008 Denunciar Share Postado Novembro 7, 2008 Thiago era pra funcionar, agora até eu fiquei na dúvida de qual sessão enviar seu post mais como o foco é SQL vou mover para a sessão de SQL. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thiago B. Postado Novembro 7, 2008 Autor Denunciar Share Postado Novembro 7, 2008 valeu, aqui o pessoal que trabalha com SQL podem me ajudar, se você tiver outra soluçao rsrs eu preciso de uma luz porque também estou bolado com isso ! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Novembro 9, 2008 Denunciar Share Postado Novembro 9, 2008 Thiago B., não vejo esse problema como uma questão necessariamente de SQL em si, mas é coisa do MS Access mesmo.O access consegue ser chato com o fato de usar delimitadores de data diferentes do padrão (que poderia ser aspas duplas). Então, entra outra questão que, esta sim, é comum em outros bancos: a data usada no formato inverso. Parece-me que esta é a origem do seu problema. Assim, ela deve ser concatenada no formato: yyyy/mm/dd hh:mm:ss.O filtrar apenas data, no MS Access, não ocorre erro na consulta se você pensar em utilizar o formato dd/mm/yyyy - mas a data pode ser tratada no formato mm/dd/yyyy.Por exemplo, uma data gravada com este valor: 9/11/2008 04:04:49 (hoje), se for filtrada a tabela deste modo - supondo dd/mm/yyyy:select * from Tabela1 where data_hora between #01/11/2008# and #10/11/2008# o resultado é vazio, porque na verdade foi interpretado como mm/dd/yyyy. No entanto, uma salada de formatos também é aceita. Note que pelos valores passados, a data inicial estaria no formato mm/dd/yyyy e a data final no formato dd/mm/yyyy. select * from Tabela1 where data_hora between #10/20/2008# and #30/11/2008#e o resultado é retornado corretamente.Então, para não ter erro, é mais seguro que use o formato yyyy/mm/dd.Na sessão Delphi, eu costumo recomendar que não seja feita a concatenação, mas sim a parametrizaçao, justamente para evitar esta situação e pelo fato de que, se você mudar de banco de dados, o código não vai ter que ser ajustado.Não programo em C++, mas por analogia da classe apresentada, imagino que você possa usar o recurso de parametros de forma similar. Caso você já não o conheça, procure verificar na documentação sobre a classe ADOQuery - deve haver uma propriedade ParametersA título de informação: Jet: Date, Time, and Timestamp LiteralsAbraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Novembro 9, 2008 Denunciar Share Postado Novembro 9, 2008 mas q banco você ta usando?? sql ou access??se for access não tem nd a ver com essa sala aqui.e otra coisa, o erro é na hora de compilar ou é em tempo de execucao??se for na hora de compilar tb não tem nd a ver com a query.mas tenta por a data no formato YYYY-MM-DD com tracinho no lugar de barra.se não conseguir resolver, em vez de executar o codigo, imprime a query pra ver o q aparece.tipo, veja o conteudo q esta sendo executado q ta na variavel Localizador, e se não tira nenhuma conclusao, posta esse conteudo ai pra gente ver.otra coisa, a mensagem de erro fala sobre o Objeto Parameter. essa mensagem seria erro do banco de dados ou do codigo?? ele estaria se referindo ou parametro da query ou esse objeto Parameter é alguma coisa relacionada com essa classe do ado q você ta usando (dentro do c)?? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thiago B. Postado Novembro 11, 2008 Autor Denunciar Share Postado Novembro 11, 2008 Obrigado Micheus, sua explicação foi ótimo deu pra clarear muitas coisas obrigado mesmo.Pena que não funcional o Builder me retorna no mesmo erro com essas modificações no formato da data.kuroi o banco de dados q estou usando é access mas estou usando comandos SQL pra fazer as consultas, primeiro eu tinha colocado este post na sala de Access mas foi movido pra SQL, acredito que é porque estou usando os comandos sql.O erro da no tempo de execução, na hora de compilar tudo ok mas na hora de execultar a query da o erro !Bom, vou tentar fazer novos testes ! Obrigado... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thiago B. Postado Novembro 11, 2008 Autor Denunciar Share Postado Novembro 11, 2008 (editado) Bom fiz alguns teste e segui a dica que o Micheus me deu em relação ao formato da datase for neste formato yyyy/mm/dd funciona beleza mas se colocar as horas da o erro.Por exemplo: LocalizadorSTC = "SELECT * FROM CurvaCargaUsuario WHERE USUARIO = 0 AND DATA_HORA_INTEGRACAO >= #2008/11/3 00:30:00# AND DATA_HORA_INTEGRACAO <= #2008/11/5 13:00:00#"; ======> Este da erro. LocalizadorSTC = "SELECT * FROM CurvaCargaUsuario WHERE USUARIO = 0 AND DATA_HORA_INTEGRACAO >= #2008/11/3# AND DATA_HORA_INTEGRACAO <= #2008/11/5#"; =======> este não da erro. funciona beleza !então eu preciso de uma Seleção com precisao, ou seja com Data e Hora :S.Bom quem souber o que pode ser estou precisando com urgencia ! OBrigado ! Editado Novembro 11, 2008 por Thiago B. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 raphael_suporte Postado Novembro 11, 2008 Denunciar Share Postado Novembro 11, 2008 Thaigo você seguiu o conselho do Kuroi em colocar YYYY-MM-DD HH:MM:SSmas tenta por a data no formato YYYY-MM-DD com tracinho no lugar de barra.se não conseguir resolver, em vez de executar o codigo, imprime a query pra ver o q aparece.tipo, veja o conteudo q esta sendo executado q ta na variavel Localizador, e se não tira nenhuma conclusao, posta esse conteudo ai pra gente ver. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thiago B. Postado Novembro 11, 2008 Autor Denunciar Share Postado Novembro 11, 2008 Bom Pessoal eu agradeço a todos pela ajuda, muito obrigado mesmo, meu problema esta resolvido.vocês não vao acreditar o q tive q fazer pra funcionar o SELECT com a DATA e HORAA Data tem q ser no formato yyyy-mm-dde a hora tem de ser no formato hh.mm.ssentão concatena data_hora = "2008-11-3" + " " + 00.15.00 +"; Exemplo: LocalizadorSTC = "SELECT * FROM CurvaCargaUsuario WHERE USUARIO = 0 AND DATA_HORA_INTEGRACAO >= #2008-11-3 00.15.00# AND DATA_HORA_INTEGRACAO <= #2008-11-5 23.00.00#";RESOLVIDO ! OBRIGADO Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Novembro 11, 2008 Denunciar Share Postado Novembro 11, 2008 raphael_suporte, trocar a "/" por "-" na formatação da data não deverá mudar o resultado. Citei deste modo, justo por ter testado:By micheus at 2008-11-11Na verdade, estamos com o foco na coisa errada. Vamos voltar a mensagem de erro citada incialmente pelo colega Thiago B.:Estou com um probleminha na hora de execultar o ADOQUERY, a mensagem de erro é a Seguinte."Qbjeto Parameter definido incorretamente.As informações são incosistentes ou incompletas".Como não é muito comum passarmos horas junto com datas na cláusula where, acaba-se por não perceber que este erro possa acontecer.se for neste formato yyyy/mm/dd funciona beleza mas se colocar as horas da o erro.Por exemplo: LocalizadorSTC = "SELECT * FROM CurvaCargaUsuario WHERE USUARIO = 0 AND DATA_HORA_INTEGRACAO >= #2008/11/3 00:30:00# AND DATA_HORA_INTEGRACAO <= #2008/11/5 13:00:00#"; ======> Este da erro.Na verdade, isto é fruto da forma como o componente é implementado, ou seja, é previsto que a definição de parâmetro (parameter) ocorra através da colocação do caracter ":" a frente (e junto) de um identificador. Logo, o que está ocorrendo é que o componente está tentando tratar a hora como sendo um parâmetro e, em geral, um identificador não deve começar com número - provável motivo da mensagem informar: definido incorretamente.Assim, caímos naquela situação que sugeri anteriormente:Na sessão Delphi, eu costumo recomendar que não seja feita a concatenação, mas sim a parametrizaçao, justamente para evitar esta situação e pelo fato de que, se você mudar de banco de dados, o código não vai ter que ser ajustado.Não programo em C++, mas por analogia da classe apresentada, imagino que você possa usar o recurso de parametros de forma similar. Caso você já não o conheça, procure verificar na documentação sobre a classe ADOQuery - deve haver uma propriedade Parameters... Localizador = "SELECT * FROM CurvaCargaUsuario WHERE USUARIO = " + usuarios + " AND DATA_HORA_INTEGRACAO >= :dataHoraInicial AND DATA_HORA_INTEGRACAO <= :dataHoraFinal"; ADOQuerySTC2008->Close(); ADOQuerySTC2008->SQL->Clear(); ADOQuerySTC2008->SQL->Add(Localizador); ADOQuerySTC2008->Parameters->ParamByName('dataHoraInicial').Value := StrToDateTime(dataHoraInicial); ADOQuerySTC2008->Parameters->ParamByName('dataHoraFinal').Value := StrToDateTime(dataHoraFinal); ADOQuerySTC2008->Open();Dê uma verificada, pois deve haver uma função para transformação da data-hora string em um TDateTime (é o que faz a função StrToDateTime e neste caso, ela usa o formato: MM/DD/YY HH:MM:SS - veja help)Eu também troquei no exemplo a chamada ao método ExecSQL() por Open(), porque em princípio a primeira é utilizada para execução de SQL's que não retornam linhas (resultados), como é o caso de INSERT, UPDATE, DELETE e outras.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Thiago B.
Olá pessoal
Estou com um probleminha na hora de execultar o ADOQUERY, a mensagem de erro é a Seguinte.
"Qbjeto Parameter definido incorretamente.As informações são incosistentes ou incompletas".
"isso ocorre quando na hora de excultas o AdoQuery".
Segue logo abaixo o fonte a linguagem q estou usando e á C++ .
AnsiString DataInicialSTC,DataFinalSTC;
AnsiString DataInicialSTC2008,DataFinalSTC2008;
AnsiString HoraInicialSTC2008,HoraFinalSTC2008;
AnsiString Localizador;
AnsiString usuarios, dataHoraInicial, dataHoraFinal;
int indice;
indice = CBoxConsumidoresSTC2008->ItemIndex;
usuarios = CBoxConsumidoresSTC2008->Items->Strings[indice];
DataInicialSTC2008 = DTPickeDataInicialSTC2008->Date.DateString();
HoraInicialSTC2008 = DTPickeHoraInicialSTC2008->Time.TimeString();
DataFinalSTC2008 = DTPickeDataFinalSTC2008->Date.DateString();
HoraFinalSTC2008 = DTPickeHoraFinalSTC2008->Time.TimeString();
dataHoraInicial = DataInicialSTC2008 + " " + HoraInicialSTC2008;
dataHoraFinal = DataFinalSTC2008 + " " + HoraFinalSTC2008;
Localizador = "SELECT * FROM CurvaCargaUsuario WHERE USUARIO = " + usuarios + " AND DATA_HORA_INTEGRACAO >= #" + dataHoraInicial + "# AND DATA_HORA_INTEGRACAO <= #" + dataHoraFinal + "#";
ADOQuerySTC2008->Close();
ADOQuerySTC2008->SQL->Clear();
ADOQuerySTC2008->SQL->Add(Localizador);
ADOQuerySTC2008->ExecSQL();
Vlw ae galera, se alguém puder me ajudar
Link para o comentário
Compartilhar em outros sites
11 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.