Olá!
Parece que eu ja até entendi o bug
Tem que transformar em CHAR o Numeric... Se colocar "0" vai, assim puro 0 não vai.
Bug na função dbSelectArea()
Moderador: Moderadores
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Bug na função dbSelectArea()
Pois é....
Minhas mensagens só trataram do assunto do post.
Meu post do ppo já mostrou isso que está dizendo agora.
Minhas mensagens só trataram do assunto do post.
Meu post do ppo já mostrou isso que está dizendo agora.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Bug na função dbSelectArea()
Amiguinhos,
Chegamos a conclusão que temos uma diferenciação no que se refere a um NUMERAL e que ao usar 0 entre aspas estariámos dizendo a função que "0" é uma palavra assim como "ZERO", "Zero", "NONE", etc.
A função dbSelectArea taca um dane-se se for 0 ou 2874376, não retornando para nós um simples: "idiota, não tá vendo que esta área não existe", porque se é previsto um número máximo de área que podemos abrir deverá ocorrer erro ao ultrapassar o limite ao usar com 0 ou até sem valor.
Tentei examinar os resultados e cheguei a conclusão com base neste teste:
Se dbSelectArea( 0 ) ou dbSelectArea( "0" ) criasse uma nova área não haveria tantos 1 repetidos.
Como sempre usei NEW nas aberturas este problema nunca me afetou e creio que a todos nós. Nem sei se poderia ser exposto como bug pois se tentar resolver ou contornar seria como mudar a natureza da chave de fenda só porque um prego não tem rosca.
Chegamos a conclusão que temos uma diferenciação no que se refere a um NUMERAL e que ao usar 0 entre aspas estariámos dizendo a função que "0" é uma palavra assim como "ZERO", "Zero", "NONE", etc.
A função dbSelectArea taca um dane-se se for 0 ou 2874376, não retornando para nós um simples: "idiota, não tá vendo que esta área não existe", porque se é previsto um número máximo de área que podemos abrir deverá ocorrer erro ao ultrapassar o limite ao usar com 0 ou até sem valor.
Tentei examinar os resultados e cheguei a conclusão com base neste teste:
Código: Selecionar todos
#include "fivewin.ch"
function main()
for nArea = 1 to 10
dbSelectArea( nArea-1 )
? "Passo 1", nArea-1, Select()
// Obtive 0,1 1,1 2,2 3,3 4,4 5,5 6,6 7,7 8,8 9,9
next
for nArea = 1 to 10
dbSelectArea( 0 )
? "Passo 2", nArea-1, Select()
// Obtive 0,1 1,1 2,1 3,1 4,1 5,1 6,1 7,1 8,1 9,1
next
for nArea = 1 to 10
dbSelectArea( "0" )
? "Passo 3", nArea-1, Select()
// Obtive 0,1 1,1 2,1 3,1 4,1 5,1 6,1 7,1 8,1 9,1
next
return .t.
Como sempre usei NEW nas aberturas este problema nunca me afetou e creio que a todos nós. Nem sei se poderia ser exposto como bug pois se tentar resolver ou contornar seria como mudar a natureza da chave de fenda só porque um prego não tem rosca.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Bug na função dbSelectArea()
No manual cita primeira área livre ou próxima área disponível, dá a entender que não há um número exato.
Seu teste seguiu isso, porque tem horas que retorna o mesmo número, tem horas que retorna o próximo.
Quer dizer, depende do ponto de vista, depende se ele parte da área atual como referência, e isso não seria a primeira de todas, e sim a primeira a partir da atual.
E é considerado bug, porque sempre aceitou número ou letra.
Só deixou de aceitar número na última mexida.
Só deixa confuso mesmo o CH pra SELECT.
Talvez porque o normal é traduzir tudo pra texto, e traduzir 0 pra "0" economiza código extra
Seu teste seguiu isso, porque tem horas que retorna o mesmo número, tem horas que retorna o próximo.
Quer dizer, depende do ponto de vista, depende se ele parte da área atual como referência, e isso não seria a primeira de todas, e sim a primeira a partir da atual.
E é considerado bug, porque sempre aceitou número ou letra.
Só deixou de aceitar número na última mexida.
Só deixa confuso mesmo o CH pra SELECT.
Talvez porque o normal é traduzir tudo pra texto, e traduzir 0 pra "0" economiza código extra
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Bug na função dbSelectArea()
Amiguinhos,
JoseQuintas
No exemplo com 0 ou "0", o fato de não serem criadas novas áreas é porque nos dois casos foi nomeada somente uma área, nunca criando novas mas sim voltando a mesma previamente nomeada.
Usei a seguinte versão para testes:
JoseQuintas
Ele retornou numeros sequencias no Passo 1 apenas, pois numerei as áreas.Seu teste seguiu isso, porque tem horas que retorna o mesmo número, tem horas que retorna o próximo.
No exemplo com 0 ou "0", o fato de não serem criadas novas áreas é porque nos dois casos foi nomeada somente uma área, nunca criando novas mas sim voltando a mesma previamente nomeada.
Encontrei isto em https://www.itlnet.net onde fala de SELECT 0 que no nos .CHs é traduzido por dbSelectArea( <(area)> ) sendo assim, existe o bug.USE...NEW: Instead of using SELECT 0 and USE <xcDatabase> to
open a database file in a new work area, the preferred method is to
USE <xcDatabase> NEW.
Usei a seguinte versão para testes:
c:\temp>harbour
Harbour Compiler Alpha build 45.0 (Flex)
Copyright 1999-2005, http://www.harbour-project.org/
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Bug na função dbSelectArea()
No meu caso, eu uso pra algo mais
Se o arquivo já estiver aberto, vai retornar a área aonde ele está aberto, nesse caso já fecha e reabre.
Se não estiver aberto, retorna zero, então abre em uma área nova.
Isso garante que vai abrir exatamente arquivo e índices do jeito que precisa, independente de como foi aberto antes.
E vai usar mesma área, ou área nova.
Não precisa nem teste adicional.
Esse uso é diferente de apenas selecionar área nova
E precisaria mais fonte, se fosse diferente.
o USE é pra fechar.
Numa época dava erro o USE de arquivo já aberto, mesmo sendo na mesma área.
Sabemos que vai fechar o anterior primeiro, mas isso não era levado em conta.
Pode ser que isso mudou, pode ser que não.
Não lembro se o problema foi com Clipper, Harbour, flagship, ou outro.
Código: Selecionar todos
FUNCTION AbreArquivo( cFile )
SELECT ( Select( cFile ) )
USE
USE ( cFile )
RETURN .T.
Se não estiver aberto, retorna zero, então abre em uma área nova.
Isso garante que vai abrir exatamente arquivo e índices do jeito que precisa, independente de como foi aberto antes.
E vai usar mesma área, ou área nova.
Não precisa nem teste adicional.
Esse uso é diferente de apenas selecionar área nova
E precisaria mais fonte, se fosse diferente.
o USE é pra fechar.
Numa época dava erro o USE de arquivo já aberto, mesmo sendo na mesma área.
Sabemos que vai fechar o anterior primeiro, mas isso não era levado em conta.
Pode ser que isso mudou, pode ser que não.
Não lembro se o problema foi com Clipper, Harbour, flagship, ou outro.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/