Código: Selecionar todos
SET MAX_JOIN_SIZE=1111111111111
Moderador: Moderadores

Código: Selecionar todos
SET MAX_JOIN_SIZE=1111111111111

Código: Selecionar todos
novaconsado("select * from tarsequencias where id>0",,,,,,,,55,"[ENTER] - marca *; [DEL]-apaga registro","fu_tarsequencias")
...
function novaconsado(sql,or,modo,coluna,prov,nTop1,nTop2,nBottom1,nBottom2,cRodape,func_usuario)
..
retorno=&(func_usuario)(sql)

Código: Selecionar todos
oTbrowse:goTop():forceStable()
While Empty( Eval( oTBrowse:getcolumn(1):block ) )
oTBrowse:down():forceStable()
If oTBrowse:hitbottom()
EXIT
Endif
EnddoVixe, muita calma nessa hora.
A velha história de 2 tabelas em uma.
Tem delete na mesma tabela que tá fazendo browse.
E mais de um servidor, o que é esquisito.
Vai precisar também refresh na consulta ADO, mas preciso entender melhor esse fonte.
Não, não é o caso.Nota: imagino que esse fonte é apenas um agrupamento de outros fontes pra poder postar, e no aplicativo não se trata de um único fonte.
Sim. Isto foi necessário para uma das tabelas, que tem muitos registros. Mas não é o caso desta aqui em questão.Isso é pra definir quantidade máxima de registros na consulta ?
Realmente não fazia sentido e não era necessário. Já suprimi.Passa pra função de usuário o texto do select, não faz sentido.
Ainda estou tentando entender bem a classe TBrowse. A maior parte deste código é cópia do código que vc postou tempos atrás, e muita coisa eu não sei explicar bem. Mas funciona.Não estou disposto a tentar entender o conjunto, vai levar muito tempo.
Bom....
Se está incluindo/alterando/excluindo informações no servidor, precisa chamar oRs:Requery() pra consulta conter as atualizações.
Isso é equivalente a fazer outro select, mas é mais rápido.
E nesse caso, e também se está alterando a posição dentro do recordset, precisa do oBrowse:RefreshAll() antes de retornar ao Browse.
Se for apenas alteração no registro atual, oBrowse:refreshCurrent() seria suficiente.
Tente imaginar que são três coisas diferentes:
1) uma é sua consulta, e o registro atual da consulta
2) outra é a situação no servidor, que conforme a situação vai ficar diferente da consulta atual
3) outra é a situação do browse na tela, que considera o registro atual como a linha atual, e se mexer na posição, desconfigura o browse
Com base nisso, vai olhar sua rotina e o que acontece em cada parte.
Se atualizou o (2) vai precisar atualiar o (1) oRs:Requery(), e também atualizar (3) o browse oBrowse:RefreshAll()
Se atualizou o (2) apenas o registro atual, atualizar o (1) oRs:Requery(), no (3) browse só precisa atualizar esse registro oBrowse:RefreshCurrent()
Se mexeu na posição de (1), vai ter que atualizar (3) o browse geral oBrowse:RefreshAll()

Código: Selecionar todos
@ 20,5 say "Confirma exclusão deste registro?"get conf pict "@!"
read
if conf="S"
exqado("delete from tarsequencias where id="+alltrim(str(nId)),3)
if pegadado("tarefa","tarsequencias","id="+alltrim(str(nId+1)))="Bíblia" .and. pegadado("marcacao","tarsequencias","id="+alltrim(str(nId+1)))#"*"
exqado("delete from tarsequencias where id="+alltrim(str(nId+1)),3)
endif
do while .t.
nId=pegadado("id","tarsequencias","id>"+alltrim(str(nId))+" and tarefa='"+cTar+"'")
if hb_isnumeric(nId)
exqado("delete from tarsequencias where id="+alltrim(str(nId)),3)
if pegadado("tarefa","tarsequencias","id="+alltrim(str(nId+1)))="Bíblia" .and. pegadado("marcacao","tarsequencias","id="+alltrim(str(nId+1)))#"*"
exqado("delete from tarsequencias where id="+alltrim(str(nId+1)),3)
endif
else
exit
endif
enddo
endif
return 1
endif

Voltando nisso.Sim. Isto foi necessário para uma das tabelas, que tem muitos registros. Mas não é o caso desta aqui em questão.
Sim, exclui também o registro seguinte, mas não é multitabela não.Achei que era multitabela por conta disto
Dá a impressão de que exclui mais de um registro.
Entendo.Voltando nisso.
Veja com atenção qual é a situação, e se dá pra otimizar.
Se tem muito registro, sinal de que está usando muita informação e muito servidor.
Não pode considerar normal, enquanto não esgotar as opções de otimizar.
O servidor SQL procura otimizar, mas não faz milagre, às vezes precisa de ajuda.
Quando faz um JOIN, ele pode multiplicar as tabelas.
SELECT A JOIN B JOIN C, se cada tabela tem 1.000 registros, se não definir direito, o servidor vai trabalhar com 1.000.000.000, um bilhão de registros.
Isso seria o extremo, deixar de colocar filtros ou deixar de indicar relacionamentos.
Erro estranho, porque FU_AULAS, neste exemplo, é o nome da função de usuário, não é variável (se bem que o nome da função de usuário é passado como variável para a função novaconsado).Ocorreu o erro: Error BASE/1003 Varißvel nÒo existe: FU_AULAS