Bug na função dbSelectArea()

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Bug na função dbSelectArea()

Mensagem por rochinha »

Amiguinhos,

Linhares esta reportando nos grupos de que existe um bug no dbSelectArea() nas novas versões do xHarbour ou Harbour referente à área fantasma que nos permite abrir a próxima área livre sem ter de numerá-la.

Ninguém usa dbSelectArea(1)...(12)...(74). Geralmente nomeamos através do Alias que a tabela assume. Mas mudanças ocorridas podem afetar novas aberturas de áreas sem numerá-las ou nomeá-las.
Antonio Linares <antonio.fivetech@gmail.com>

Harbour Developers

Due to recent Harbour changes, this code that used to work this way:

USE CUSTOMER
? SELECT() // --> 1
DBSELECTAREA( 0 )
? SELECT() // --> used to return 2, now it is returning ZERO !!!

Has clearly changed its behavior affecting many Harbour apps.

It seems as DbSelectArea( 0 ) has changed its behavior. 

Reported by several Harbour users and confirmed by us.

many thanks
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.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Bug na função dbSelectArea()

Mensagem por JoséQuintas »

Assustou, porque o Linares postou agora a pouco no harbour-devel.

Código: Selecionar todos

PROCEDURE Main

   SetMode(30,100)
   CLS
   dbCreate( "teste.dbf", { { "CODIGO", "C", 6, 0 } } )
   ? Select()
   USE TESTE
   SELECT 0
   ? Select()
   Inkey(0)

   RETURN
Aqui mostrou corretamente 1 e 2
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/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bug na função dbSelectArea()

Mensagem por Itamar M. Lins Jr. »

Olá!
Isso não vai mudar vc. Escrever e depois apagar!

Código: Selecionar todos

select a
use aquivo
select b
use aquivob
select c
use aquivoc
Mas select a, b... é a mesma coisa de 0!!! e dai ? verificou se o arquivo foi aberto antes ? Não pode! Dá erro!!!! Pois é!!!!! Verificou ?
Podendo fazer:

Código: Selecionar todos

use arquivo new
use arquivob new
use arquivoc new
Mas como verificar se o DBF já foi aberto ?

Código: Selecionar todos

IF Select(cAlias) > 0
Vai ter que ter de toda forma.
Nisso a pessoa usa?

Código: Selecionar todos

dbSelectArea(0)
use clientes
Em uma parte do programa depois ele usa em outra parte o mesmo processo para abrir

Código: Selecionar todos

dbSelectArea(0)
use clientes
Vai dar erro! vai precisa usar IF SELECT("clientes") > 0 ... redundância de código.
Esse -> dbSelectArea(0) nada mais é do que o NEW do comando USE por isso eu não usei ele nem sabia que existia.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Bug na função dbSelectArea()

Mensagem por JoséQuintas »

Sim, você tem toda razão, o Clipper inventou isso só pra criar problemas, por isso o Clipper não fez sucesso e a empresa acabou fechando.
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/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bug na função dbSelectArea()

Mensagem por Itamar M. Lins Jr. »

Olá!
Vc tá num forum de programadores!!!! Mostre seu código provando o contrário!
Mostre por códigos que estou errado!!!
A linguagem AMADURECE, MELHORA então fique usando GTWVG!!!!!
Ou melhor fique ai fazendo o que vc ACREDITA ser uma coisa BOA!!!!
Vc acredita que os programadores irão SUBSTITUIR as IDEs gráficas do Harbour pelo PROGRAMA que vc está fazendo ?
Vc acha que o pessoal não vai usar MOUSE para COLOCAR os CONTROLES na TELA ? Vai usar linha de comando ?
Quem já usa Hwgui/Minigui etc... não tem como usar... Só para quem ainda não sabe como é, mas se mexer em 1 linha de código que posiciona os controles já não vai poder usar mais seu programa. Já pensou nisso ?
Ele lê .PRG ? armazena posições de controle ? etc....
E fica ai pagando de bonzão
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Bug na função dbSelectArea()

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:Vc tá num forum de programadores!!!! Mostre seu código provando o contrário!
Mostre por códigos que estou errado!!!

Código: Selecionar todos

Abrearquivos( "CLIENTES", "FORNEC", "PRODUTO", "ESTOQUE", "FINANCEIRO" )
...

FUNCTION AbreArquivos( ... )

   LOCAL cFile, aList := hb_AParams()

   FOR EACH cFile IN aList
      SELECT ( Select( cFIle ) )
      USE ( cFile )
   NEXT

   RETURN .T.
Sei que não adianta, mas vamos tentar.
Já até imagino qual vai ser a resposta... que faltam testes adicionais, o que não faz parte da questão do tópico.

Qualquer programador sabe que, se a linguagem criou um recurso adicional, é porque ele pode ser útil.
Um programador não precisaria provas sobre recurso adicional.

Se acha certo... vai lá no grupo do harbour, e pede comprovação de tudo que é coisa que existe no harbour.
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/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bug na função dbSelectArea()

Mensagem por Itamar M. Lins Jr. »

Olá!
Me explique pq sou muito burro!
Onde esse código contradiz o que escrevi ?
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Bug na função dbSelectArea()

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:Me explique pq sou muito burro!
Onde esse código contradiz o que escrevi ?
Contradiz totalmente.
Sua postagem não ter a ver com o assunto do tópico, e a minha tem.
Estou mostrando uma utilidade da área zero bem prática.
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/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bug na função dbSelectArea()

Mensagem por Itamar M. Lins Jr. »

Olá!
Tá todo mundo vendo!
dbSelectArea() Cadê ?
Troca ai select() por dbSelectarea() para ver como é.
Aqui no meu deu erro com dbselectarea()
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bug na função dbSelectArea()

Mensagem por Itamar M. Lins Jr. »

Olá!
Bug na função dbSelectArea()
E ele vem com select()
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bug na função dbSelectArea()

Mensagem por Itamar M. Lins Jr. »

Olá!
O bagulho nem retorno tem.

Código: Selecionar todos

DBSELECTAREA()

Change to another work area

Syntax

      DBSELECTAREA(<xArea>) -

Arguments

<xArea> Alias or work area

Description

This function moves the Harbour internal primary focus to the work area designated by <xArea>. If <xArea> is numeric, then it will select the numeric work area; if <xArea> is character, then it will select the work area with the alias name.

DBSELECTAREA(0) will select the next avaliable and unused work area. Up to 255 work areas are supported. Each work area has its own alias and record pointer, as well as its own FOUND(), DBFILTER(), DBRSELECT() and DBRELATION() function values.

Examples

      PROCEDURE Main()
         LOCAL nId
         USE tests NEW INDEX tests
         USE tests1 NEW INDEX tests1
         DBSELECTAREA( 1 )
         nId := tests->Id
         DBSELECTAREA( 2 )
         IF DBSEEK( nId )
            ? tests1->cName
         ENDIF
         DBCLOSEALL()
         RETURN

Compliance

Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bug na função dbSelectArea()

Mensagem por Itamar M. Lins Jr. »

Olá!
Aqui mostrou corretamente 1 e 2
Tá falando de DBSELECTAREA() e vc testa SELECT() ainda diz que no seu funciona. É mole ?
Pode ser o Harbour que não está na versão do GIT ?
Tá VENDO ?
Select() eu uso, sem ela como irei saber se o DBF foi aberto ou não, se ela retorna um numero quando o DBF já foi aberto!
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Bug na função dbSelectArea()

Mensagem por JoséQuintas »

Nas mensagens apagadas postei o include do harbour:

Código: Selecionar todos

#command SELECT <area>           => dbSelectArea( <(area)> )
Meu teste foi baseado nisso.

Mas fiz outro teste:

SELECT 0 funciona

dbSelectArea( 0 ) não funciona

Porque um funciona e o outro não, se no CH diz ser a mesma coisa ?
Coube mais um teste aqui, compilar usando /p pra ver o fonte gerado.

original:

Código: Selecionar todos

PROCEDURE Main

   SetMode(30,100)
   CLS
   dbCreate( "teste.dbf", { { "CODIGO", "C", 6, 0 } } )
   ? Select()
   USE TESTE
   SELECT 0
   ? Select()
   Inkey(0)

   RETURN
Compilado com /p

Código: Selecionar todos

d:\temp>type test.ppo
#line 3 "test.prg"
PROCEDURE Main

   SetMode(30,100)
   Scroll() ; SetPos( 0, 0 )
   dbCreate( "teste.dbf", { { "CODIGO", "C", 6, 0 } } )
   QOut( Select() )
   dbUseArea( .F.,, "TESTE",, iif( .F. .OR. .F., ! .F., NIL ), .F. )
   dbSelectArea( "0" )
   QOut( Select() )
   Inkey(0)

   RETURN
Itamar M. Lins Jr. escreveu:Tá falando de DBSELECTAREA() e vc testa SELECT() ainda diz que no seu funciona. É mole ?
Explicado acima. Não confunda SELECT comando, com Select() função.
Meu fonte tem os dois.
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/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bug na função dbSelectArea()

Mensagem por Itamar M. Lins Jr. »

Olá!
Explicado acima. Não confunda SELECT comando, com Select() função.
O que que tem a ver ?
Tem um bug na dbselectarea() e pronto!
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bug na função dbSelectArea()

Mensagem por Itamar M. Lins Jr. »

Olá!
Olhe a diferença do PPO dele para o seu.

Código: Selecionar todos

function main
cFile := "/home/itamar/databases/clientes"
dbUseArea( .F.,, (cFile),, iif( .F. .OR. .F., ! .F., NIL ), .F. )
QOut( SELECT() )
DBSELECTAREA( 0 )
QOut( SELECT() )
inkey(0)
Se for defeito do include std.ch não sei. Mas é diferente do seu teste.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder