Página 2 de 2
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 13:28
por JoséQuintas
AUTOEDIT parece ser pra outra coisa.
Então a pergunta é:
Como fazer um browse sem edição, ou qual outro controle serve pra isso?
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 13:45
por JoséQuintas
Sinceramente....
Não sei se resolvi ou se estraguei, me sinto como se fosse o único usuário de hwgui, já que usar um browse parece algo muito comum.
Também não sei se é esse browse mesmo, já que tem outro browse na hwgui.
Só sei que alterei aqui e não dá mais erro.
Ou talvez seja obrigatório definir um fonte, e não existe fonte default.
Ou talvez a falta de uma Main() hwgui deixe isso sem default.
Só sei que algum fonte default foi usado, senão não apareceria o browse.
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 13:58
por Itamar M. Lins Jr.
Olá!
Pois é, como vc está usando/testando de uma formar diferente. O método PROPS2ARR não estava ativado, e eu mesmo não uso array, quando testei funcionou. Mas isso tem um tempo.
Por isso, acredito que essa IF !NIL ... resoveu o BO, para seu caso específico.
Saudações,
Itamar M. Lins Jr.
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 14:08
por JoséQuintas
Eu não gosto de complicação, fazer o que....
Meu browse atual do aplicativo em GTWVG:
Código: Selecionar todos
METHOD GridSelection() CLASS JPTABCFOPClass
LOCAL oTBrowse
WITH OBJECT ::cnSQL
:Execute( "SELECT * FROM JPTABCFOP ORDER BY CFOPNOME" )
oTBrowse := { ;
{ "CFOP", { || :String( "IDCFOP", 6 ) } }, ;
{ "NOME", { || :String( "CFOPNOME", 60 ) } } }
BrowseADO( ::cnSQL, oTBrowse, "CFOPNOME", { || :String( "IDCFOP" ) } )
:CloseRecordset()
ENDWITH
RETURN NIL
o browse que montei em hwgui como teste:
Código: Selecionar todos
PROCEDURE PTESHWGUI( cModule, cTitle, ... )
LOCAL cnSQL := ADOLocal(), oBrowseList
WITH OBJECT cnSQL
:Execute( "SELECT * FROM JPTABCFOP" )
oBrowseList := { ;
{ "CFOP", { || :String( "IDCFOP", 6 ) } }, ;
{ "NOME", { || :String( "CFOPNOME", 60 ) } } }
hwguiBrowse( cTitle, cnSQL, oBrowseList )
:CloseRecordset()
ENDWITH
( cModule )
RETURN
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 14:24
por Itamar M. Lins Jr.
Olá!
Erro velho detectado pelo Gilberto.
https://pctoledo.org/forum/viewto ... rr#p149137
E vc mesmo José Quintas tinha dado a resposta.
Saudações,
Itamar M. Lins Jr.
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 14:40
por JoséQuintas
Pequena alteração pra confirmar resultado, deu certo:
Código: Selecionar todos
WITH OBJECT cnSQL
:Execute( "SELECT * FROM JPTABCFOP" )
oBrowseList := { ;
{ "CFOP", { || :String( "IDCFOP", 6 ) } }, ;
{ "NOME", { || :String( "CFOPNOME", 60 ) } } }
hwguiBrowse( cTitle, cnSQL, oBrowseList )
MsgExclamation( :String( "CFOPNOME" ) )
:CloseRecordset()
ENDWITH
Mostrou o nome correto de onde cliquei, o recordset está posicionado aonde era pra estar.
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 18:14
por Itamar M. Lins Jr.
Olá!
Precisa debugar o retorno daqui. -> oDlg := Atail( HDialog():aModalDialogs
Se volta NIL ou EMPTY() -> " " ou etc.
Entre parenteses não força analisar o .OR. ?
Saudações,
Itamar M. Lins Jr.
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 18:19
por Itamar M. Lins Jr.
Olá!
A linha toda:
IF ( ( oDlg := Atail( HDialog():aModalDialogs ) ) == Nil .OR. oDlg:handle != handle ) .AND. ( oDlg := HDialog():FindDialog( handle ) ) == Nil
Está dentro do parêntesis. Se Atail( HDialog():aModalDialogs ) ) voltar outra coisa que não seja NIL e não seja objeto ? E mesmo assim esse parêntesis acredito que força a avaliação do .OR.
Saudações,
Itamar M. Lins Jr.
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 18:50
por JoséQuintas
Itamar M. Lins Jr. escreveu:E mesmo assim esse parêntesis acredito que força a avaliação do .OR.
isto AND aquilo => qualquer falso resolve, se o primeiro for falso, é perda de tempo analisar o segundo
isto OR aquilo => qualquer verdadeiro serve, se o primeiro for verdadeiro, é perda de tempo analisar o segundo
A otimização existe nos dois casos, mas depende do verdadeiro/falso de cada um
No caso da HWGUI, se retornar Nil, já resolveu a questão do "um ou outro", e não testa oDlg:Handle.
Acho que você se confundiu por causa do tipo de teste verdadeiro/falso que são diferentes no .AND. e .OR..
E por isso falei antes, que estava esquisito, porque eu também estava tentando entender isso dos parênteses que pareciam no lugar errado.
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 18:58
por Itamar M. Lins Jr.
Olá!
Tá bom, vamos por sua analise.
Então quando é que ele entra aqui: .OR. oDlg:handle != handle ?
Pq se entrar oDlg precisa ser objeto precisa ser uma DIALOG. E o erro é ai.
Se for da forma que vc está falando essa opção não faz sentido pq nunca será avaliada.
Saudações,
Itamar M. Lins Jr.
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 19:01
por JoséQuintas
Faltou dizer:
aDlg := Atail(...)
Isso é pra pegar o último elemento do array.
Ou retorna o elemento, ou Nil se não tem nada.
E o array é a lista de Dialogs modal da hwgui, então com certeza, ou é Nil, ou é uma Dialog modal.
Vai fazer o .OR. oDlg quando oDlg contiver uma dialog, e a dialog vai ter handle.
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 19:05
por JoséQuintas
Mais simples, apesar que o Harbour vai impedir o b := "minhoca" por ser inútil.
Código: Selecionar todos
b := "minhoca"
a := { 1, 2, 3 }
IF ( b := Atail( a ) ) == Nil .OR. b != 4
? "Não achou 4"
ENDIF
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 19:10
por JoséQuintas
Um exemplo mais adequado:
Código: Selecionar todos
a := { ;
{ 1, 1 }, ;
{ 2, 2 } }
IF ( b := Atail( a ) ) == Nil .OR. b[ 2 ] != 3
Só executar isso com esse conteúdo, e depois com a := {}
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 19:15
por JoséQuintas
Não deu erro em nenhum dos dois, apesar de no segundo caso não existir b[2]
Error BASE/1004 No exported method: PROPS2ARR
Enviado: 27 Out 2021 19:22
por JoséQuintas
Ampliado pra dois possíveis erros.
Mas a otimização não deixa dar erro.
Comparar array com letra não dá.
Agora ficou bem próximo do que hwgui faz naquele pedaço. (mas aqui tem erro proposital, lá não).