Locate não funciona
olá pessoal
estou com um problemão no Locate...
meses atrás eu já postei uma pergunta referente a isso e não consegui a solução.. todas as sugestões foram em vão ... mas espero receber tod e qq ajuda !!
utilizo Delphi7 com Firebird e acesso via Bde.
tenho um FormConsulta com um Tquery ligado ao um DataSource1 este ligado a um DbGrid1.
o que acontece é o seguinte, em certo momentos vou estar navegando no FormConsulta dentro do Grid em um determinado registro ... aí a partir desta, vou para o FormCadastro, onde incluo ou altero registro .. feito isso eu preciso atualizar a TQuery do FormConsulta .. eu faço isso dando um Query1.Close e depois um Query1.Open. Antes de executar o Close eu atribuo o valor FormConsulta.Query1.FieldByName(´Horario´).AsTime para uma variável X. Após executar o Query1.Open eu preciso dar um Locate na Query para que ela se posicione no registro em q estava. Seria isso aqui: Query1.Locate(´Horario´,X,[]) ... mas isso de uma forma ou de outra não funciona com componentes TQuery .. se eu fizer tudo isso utilizando IBQuery funciona exatamente como está.
Alguém sabe como dar o Locate de campo Time no TQuery ou alguma forma de contornar isso ?
abraço
Diogo
diogoalles@hotmail.com
estou com um problemão no Locate...
meses atrás eu já postei uma pergunta referente a isso e não consegui a solução.. todas as sugestões foram em vão ... mas espero receber tod e qq ajuda !!
utilizo Delphi7 com Firebird e acesso via Bde.
tenho um FormConsulta com um Tquery ligado ao um DataSource1 este ligado a um DbGrid1.
o que acontece é o seguinte, em certo momentos vou estar navegando no FormConsulta dentro do Grid em um determinado registro ... aí a partir desta, vou para o FormCadastro, onde incluo ou altero registro .. feito isso eu preciso atualizar a TQuery do FormConsulta .. eu faço isso dando um Query1.Close e depois um Query1.Open. Antes de executar o Close eu atribuo o valor FormConsulta.Query1.FieldByName(´Horario´).AsTime para uma variável X. Após executar o Query1.Open eu preciso dar um Locate na Query para que ela se posicione no registro em q estava. Seria isso aqui: Query1.Locate(´Horario´,X,[]) ... mas isso de uma forma ou de outra não funciona com componentes TQuery .. se eu fizer tudo isso utilizando IBQuery funciona exatamente como está.
Alguém sabe como dar o Locate de campo Time no TQuery ou alguma forma de contornar isso ?
abraço
Diogo
diogoalles@hotmail.com
Diogoalles
Curtidas 0
Respostas
Marconi
07/11/2003
Tente isto
Query1.Locate(´Horario´,X,[loCaseInsensitive])
Marconi
Query1.Locate(´Horario´,X,[loCaseInsensitive])
Marconi
GOSTEI 0
Diogoalles
07/11/2003
...pessoal nada disso funciona :
Query1.Locate(´Horario´,X,[loCaseInsensitive])
Query1.Locate(´Horario´,X,[loPartialKey])
Query1.Locate(´Horario´,X,[loCaseInsensitive,loPartialKey])
obrigado
Query1.Locate(´Horario´,X,[loCaseInsensitive])
Query1.Locate(´Horario´,X,[loPartialKey])
Query1.Locate(´Horario´,X,[loCaseInsensitive,loPartialKey])
obrigado
GOSTEI 0
Marcelo.c
07/11/2003
Ocorre algum erro ou simplesmente não localiza ?
GOSTEI 0
Diogoalles
07/11/2003
Simplismente não localiza ....
já atribui o valor do X para um TTime, TDateTime, StrTotime, StrToDateTime ..etc... e mesma coisa com o campo ´Horario´ ..
Já utilizei FormatFloat ..etc...
O q vc pensar de coisas simples eu já fiz !
abraço e obrigado
Diogo
já atribui o valor do X para um TTime, TDateTime, StrTotime, StrToDateTime ..etc... e mesma coisa com o campo ´Horario´ ..
Já utilizei FormatFloat ..etc...
O q vc pensar de coisas simples eu já fiz !
abraço e obrigado
Diogo
GOSTEI 0
Marconi
07/11/2003
O pode estar acontecendo é que a variavel X não tem exatamente o mesmo formato do Campo ´Horario´.
Pare verificar mude o comando de captura da variavel X de
X:=FormConsulta.Query1.FieldByName(´Horario´).AsTime;
para
X:=FormConsulta.Query1[´horario´];
Se os formatos forem diferentes então vai dar erro aqui.
Outra coisa. O comando Locate requer uma variavel Variant, principalmente quando forem mais de um campos. Voce pode tentar assim
Query1.Locate(´Horario´,VarArrayof([X]),[loCaseInsensitive]) ;
Vamos ver se desta vez dá certo.
Marconi
Pare verificar mude o comando de captura da variavel X de
X:=FormConsulta.Query1.FieldByName(´Horario´).AsTime;
para
X:=FormConsulta.Query1[´horario´];
Se os formatos forem diferentes então vai dar erro aqui.
Outra coisa. O comando Locate requer uma variavel Variant, principalmente quando forem mais de um campos. Voce pode tentar assim
Query1.Locate(´Horario´,VarArrayof([X]),[loCaseInsensitive]) ;
Vamos ver se desta vez dá certo.
Marconi
GOSTEI 0
Diogoalles
07/11/2003
Ok pessoal
Funcionou :D
até q enfim ..mas foi barra ..graças as dicas cheguei no ponto X !!!!
declarei a minha variável X com tipo Variant
e fiz ela receber o seguinte
procedure ......
var
X : Variant;
begin
x := Query1HORARIO.Value;
Query1.Locate(´HORARIO´,X,[loCaseInsensitive]);
....
end;
resumindo .. o q matou a charada foi declarar o X como Variant ... que para dar Locate em um campo Time necessariamente precisa ser assim.
pelo menos é o q pude comprovar..
agradecido
Diogo
Funcionou :D
até q enfim ..mas foi barra ..graças as dicas cheguei no ponto X !!!!
declarei a minha variável X com tipo Variant
e fiz ela receber o seguinte
procedure ......
var
X : Variant;
begin
x := Query1HORARIO.Value;
Query1.Locate(´HORARIO´,X,[loCaseInsensitive]);
....
end;
resumindo .. o q matou a charada foi declarar o X como Variant ... que para dar Locate em um campo Time necessariamente precisa ser assim.
pelo menos é o q pude comprovar..
agradecido
Diogo
GOSTEI 0