Fórum LOCATE não funciona e não funciona #195765

18/11/2003

0

Pessoal, boa tarde !
eu achei q tinha conseguido resolver o meu problema, mas não consegui.
Simplismente eu tive uma decepção pq eu estava inserindo um registro q era o ultimo da tabela e estava dando um Last na TQuery ... e eu achei q o Locate funcionava.
O problema é o seguinte:
Utilizo FireBird 1.5 Rc 3 , Delphi 7 e 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 ?
Talvez ñ é o formato q o firebird armazena a hora ? (ñ consegui descobrir qual o formato guardado no banco) ..

obs.: A minha tabela é composta por 10 campos, sendo q Código,Data,Hora - são a PK ! .. só q qdo quero executar o Locate é só na Hora .. .. já tentei utilizar o VarArrayOf para os 03 campos mas tb não funciona.

algumas opções já utilizadas :
Query1.Locate(´Horario´,X,[loCaseInsensitive, loPartialKey])
tb já utilizei Strtodate, strtotime, strtodatetime, datetostr ..etc ... já passei o X como string, hora, data/hora, variant ... etc...

obs 2 .: UTILIZANDO O IBQUERY O LOCATE NA HORA FUNCIONA .. SÓ Q Ñ POSSO UTILIZAR OS COMPONENTES IB .. PRECISO O TQUERY NORMAL !!

tb estou no Msn se quiserem tirar alguma dúvida pra me ajudar : diogoalles@hotmail.com


abraço

Diogo
diogoalles@terra.com.br


Diogoalles

Diogoalles

Responder

Posts

18/11/2003

Travain

Diogo, é o seguinte:

O Firebird possui 3 dialetos para a criação do banco de dados. O dialeto foi mantido para que ele seja compatível com o BDE, o dialeto 2 dificilmente será usado, porque é mais para conversão de alguns dados internos do GDB e o terceiro é o que todos usam. A grande diferença entre o dialeto 1 e o 3 é que no 1 o formato DATE e TIME não existem e sim o TIMESTAMP que é a junção das duas funções. Talvez o seu LOCATE não esteja funcionando por isso. A BDE está tratando como TIMESTAMP e o Firebird gravou a informação como TIME.

Mas, por que você não abandona a BDE?
A sua aplicação fica, no mínimo, umas 10 vezes mais lenta.
Existem vários suítes de componentes excelentes para acesso, inclusive o IBX que vem junto com o Delphi.

Pense nisso.

[]´s

Trava


Responder

Gostei + 0

18/11/2003

Sapienza

Caro amigo,

Essa tabela está sendo preenchida no mesmo tempo de execução do que é feita a busca? Já estive em situações que o problema era que as alterações eram de certa forma salvas e de certa forma não (é difícil explicar), veja se é isso, se for dê um Query1.ApplyUpdates. Se não for tenho uma solução meio cavernosa mas vai te tirar desse problema. Depois de abrir e fechar a Query, faça um looping do primeiro ao último registro e quando o campo do registro em foco for igual a sua variável X ele para o looping (pode ser uma variável lógica que entraria na condição ou o comando Break.

Até...


Responder

Gostei + 0

18/11/2003

Diogoalles

O meu banco foi criado com o Dialeto 3 ... então eu não teria esse probelma, certo ?

qto a abandonar o Bde não vejo a hora de fazermos isso .. mas até abrail/maio do próximo ano isso é inviável..

abraço e obrigado !

Diogo


Responder

Gostei + 0

18/11/2003

Caverinha

heim uses adicione DB

pode ser isso :D


Responder

Gostei + 0

18/11/2003

Travain

Diogo, se o seu campo é do tipo TIME, a BDE não sabe como reconhecê-lo, talvez comece aí o problema.

Poderia tentar converter tudo para String. No campo da tabela você gravaria em formato VARCHAR e quando você der o LOCATE passar o parâmetro como ASSTRING. É uma opção para tentar contornar o problema.

[]´s


Responder

Gostei + 0

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

Aceitar