Fórum SQLQuery do DBX e unidirecional? #231663
12/05/2004
0
Estou tendo um problema com o SQLQuery do dataset. Por um motivo particular eu nao posso usar o ClientDataSet.
Eu executo uma query com o SQLQuery e consigo dar um SQLQuery.First ou um SQLQuery.Next, mas nao consigo dar um SQLQuery.Last porque ele diz que o SQLQuery e unidirecional. Mas eu nao achei nenhuma propriedade para mudar ele pra bidirecional. alguem pode me dar um help?
Rafael
Colutti
Curtir tópico
+ 0Posts
12/05/2004
Macario
Veja so, quando se usa Componentes unidirecional, não se trabalha com ponteiros.
Digamos que vc efetue esta instrução
[color=green:317779769f]
em uma tabela com 10000 registros. A sua query trara para a maquina cliente apenas os 100 correspondentes.
por isso no motivo de nao poder dar um last ja que nao esta conectado diretamente a tabela
espero ter ajudado.
Gostei + 0
12/05/2004
Jackson Gomes
Gostei + 0
12/05/2004
Colutti
Isso eu ja sabia, o que eu queria dizer e que mesmo sendo unidirecional ele deveria ir para o ultimo registro sim, mas nao seria possivel voltar para o primeiro registro. No exemplo que vc me passou:
Select * from clientes where ID_CLI < 100
quando eu desse um SQLQuery.Last ele nao deveria ir pro registro numero 100? Porque que quando eu uso o NEXT eu consigo navegar nos registros e chegar no ultimo entao? Existe alguma funcao do tipo SQLQuery.GotoRow, para ir pra uma determinada linha?
Jackson:
Eu estou usando o Delphi 7 ... sera que pelo fato deste componente ser descendente de TDataSet nao provocaria um lentidao nao? Existe alguma perda de performance?
Rafael
Gostei + 0
12/05/2004
Thematrix:reloaded
desculpa a intromissão, mas...
vc desistiu do IBO? Pq vc está tentando agora a DBX? Já tentou usar IBX?
Para trabalhar com Interbase, o IBX (principalmente o mais atualizado , pra baixá-lo vá em www.interbase-br.com), não é tão rápido quanto o IBO, mas não é tão lento quanto o BDE ou BDX, e vc também pode ter um objeto IBQuery, sem essecialmente estar ligado a um Dataset.
É apenas um opinião, valeu?
Gostei + 0
12/05/2004
Colutti
de jeito nenhum ... nao desisti nao. Mas eu estou a frente de um projeto e tenho que tentar convercer meus diretores a comprarem o ibo .. para isso eu tenho que entender as outras tecnologias ... principalmente seus defeitos ...
eu conheco o IBX, mas encontrei algum problemas em que ele nao pode me ajudar ... posso estar enganado, mas o IBX peca muito em movimentacao no dataset ...
mas .. muito obrigado pela sua preocupacao ...
rafael
Gostei + 0
12/05/2004
Thematrix:reloaded
eu tenho uns 40 sistemas desenvolvidos com IBX, e nunca tive problema algum.
Na verdade, só tem um momento que o IBX ou BDE são lentos:
- quando vc abre a tabela e executa um .LAST, no resto é tudo legal (no IBX!)
Não conheço o IBO, na verdade já peguei uma versão demo, mas a exigência de ter componentes proprietários não me animou muito.
Mesmo assim,boa sorte em sua empreitada! :wink:
Gostei + 0
12/05/2004
Colutti
40 ? Po tu trabalha pra caramba hein! :)
o problema e que quando eu dou um recordcount antes eu tenho que dar um fetchall, alem disso como vc faz pra dar um Next?
eu usei FindNext e ele sempre retorna falso? Como vc faz pra ir pro proximo registro?
quer trocar umas ideias por email? tecnologia1@prolink.inf.br ...
rafael
Gostei + 0
12/05/2004
Aroldo Zanela
Colega,
Tenho poucas aplicações com Firebird e usei IBX sem nenhum problema. Realmente existem alguns complicadores em se trabalhar com POO e apesar do Delphi ser uma linguagem híbrida, ainda nos causa algumas dúvidas, bem como, utilzar OO e mapeamento para bancos relacionais. No caso com o FB eu fiz da maneira mais ´tradicional´ e nas situações citadas eu resolveria com: + Select count(*) from tabela e ++ método Next do objeto instanciado.
Gostei + 0
13/05/2004
Colutti
O problema e esse ... eu nao concordo em usar Count() em uma query somente para pegar o total de registros ...
Imagina um query com varios joins, inner join e coisa parecida ... ter que fazer um count e no minimo um pecado.
Sobre o Next ... tudo bem que o next va pro proximo registro. Mas eu realmente queria usar o FindNext para me retornar se existe um proximo registro.
Ai vc poderia me dizer pra fazer algo do tipo
function FindNext : Boolean
begin
if not sqlquery.EOF then begin
sqlquery.next;
result := true;
end
else begin
result := false;
end;
end;
o problema e que o EOF so funciona se eu der um FetchAll ... isso e absurdo tambem .. estes sao exemplos do que eu acho que nao funciona.
Como vc faz pra varrer todos os registros retornados por uma query?
Rafael
Gostei + 0
13/05/2004
Aroldo Zanela
O método next dos objetos IBX funcionam de forma idêntica ao BDE e ADO, veja o exemplo:
procedure TForm1.NotaFiscaldeSada1Click(Sender: TObject); var Arquivo: TextFile; Registro: String; begin if not sdNFS.Execute then exit; ibqSelecao.Close; ibqSelecao.ParamByName(´INICIO´).AsDate := dtpInicio.Date; ibqSelecao.ParamByName(´TERMINO´).AsDate := dtpTermino.Date; ibqSelecao.Open; AssignFile(Arquivo, sdNFS.FileName); ReWrite(Arquivo); nSequencia := 0; while not ibqSelecao.Eof do begin Registro := ... WriteLn(Arquivo, Registro); ibqSelecao.Next; end; CloseFile(Arquivo); ShowMessage(´Processamento concluído com sucesso.´); end;
Quanto ao método RecordCount, é necessário utilizar um método Last para se obter a quantidade de linhas no objeto.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)