Página 1 de 2
Bug na função dbSelectArea()
Enviado: 06 Mar 2024 18:40
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
Bug na função dbSelectArea()
Enviado: 06 Mar 2024 22:10
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
Bug na função dbSelectArea()
Enviado: 06 Mar 2024 22:13
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:
Mas como verificar se o DBF já foi aberto ?
Vai ter que ter de toda forma.
Nisso a pessoa usa?
Em uma parte do programa depois ele usa em outra parte o mesmo processo para abrir
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.
Bug na função dbSelectArea()
Enviado: 06 Mar 2024 22:19
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.
Bug na função dbSelectArea()
Enviado: 06 Mar 2024 22:25
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
Bug na função dbSelectArea()
Enviado: 06 Mar 2024 22:37
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.
Bug na função dbSelectArea()
Enviado: 06 Mar 2024 22:39
por Itamar M. Lins Jr.
Olá!
Me explique pq sou muito burro!
Onde esse código contradiz o que escrevi ?
Bug na função dbSelectArea()
Enviado: 06 Mar 2024 22:50
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.
Bug na função dbSelectArea()
Enviado: 06 Mar 2024 23:00
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()
Bug na função dbSelectArea()
Enviado: 06 Mar 2024 23:01
por Itamar M. Lins Jr.
Olá!
Bug na função dbSelectArea()
E ele vem com select()
Bug na função dbSelectArea()
Enviado: 06 Mar 2024 23:07
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
Bug na função dbSelectArea()
Enviado: 06 Mar 2024 23:14
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!
Bug na função dbSelectArea()
Enviado: 07 Mar 2024 00:55
por JoséQuintas
Nas mensagens apagadas postei o include do harbour:
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.
Bug na função dbSelectArea()
Enviado: 07 Mar 2024 01:09
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!
Bug na função dbSelectArea()
Enviado: 07 Mar 2024 01:17
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.