Erro Dbedit executando o programa

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

Moderador: Moderadores

Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Erro Dbedit executando o programa

Mensagem por Laudelino Scarmagnani »

Pessoal, na conversao clipper para xharbour, estava ocorreu um erro ao acionar a tecla de função ativando o Dbedit do clipper, em alguns programas e em outros programas não.
Fazendo uns testes, veirifiquei que o problema ocorria quando o tamanho da linha do Dbedit era maior que 80 colunas. Então diminuí as informações que retornavam do Dbedit e funciona.
Alguém que conhece isto poderia me informar se é isso mesmo, e se há uma forma de usar o Dbedit podendo usar as setas de direita/esqueda para percorrer os campos?

Laudelino
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Mensagem por esbasso »

Explique melhor ou coloque o codigo onde tu chama o DBEDIT
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Erro Dbedit executando o programa

Mensagem por Laudelino Scarmagnani »

Entao, vai o codigo das duas situações. A que funciona e a que não funciona.
A tebela TBCLS.DBF tem os seguintes campos
definidos:
NOGRU TAMANHO 30 CHAR
NODESCRI TAMAMHO 30 cHAR
NODEP TAMANHO 30 CHAR
CDDEPMERC TAMANHO 03 NUM
CDGRUMERC TAMANHO 03 NUM
CDSGRMERC TAMANHO 03 NUM
MARKUP TAMANHO 05,2
CDHISVENDA TAMANHO 03 NUM, e por ai vai




Esta primeira, funciona.



FUNCTION CONS_CLASSES
GETLIST:={}
LAST_VAR = READVAR()
BACTELA()
WSELE=SELECT("TBCLS")
IF WSELE=0
USE TBCLS INDEX TBLS,TBCLS1 ALIAS TBCLS NEW SHARED READONLY
ENDIF
SELE TBCLS
INDCLS=INDEXORD()
SET ORDER TO 2

*
*--------------------- VETORES PARA USO DO DBEDIT ---------------------------*
DECLARE VTCON1[06],VTCON2[06],VTCON3[06],VTCON4[06]
*
VTCON1[01]="NOGRU" *******> TAMANHO 30 CHAR
VTCON1[02]="NODESCRI" *******> TAMAMHO 30 cHAR
VTCON1[03]="NODEP" *******> TAMANHO 30 CHAR
VTCON1[04]="CDDEPMERC" *******> TAMANHO 03 NUM
VTCON1[05]="CDGRUMERC" *******> TAMANHO 03 NUM
VTCON1[06]="CDSGRMERC" *******> TAMANHO 03 NUM
*
VTCON2[01]=" "
VTCON2[02]=" "
VTCON2[03]=" "
VTCON2[04]="99"
VTCON2[05]="99"
VTCON2[06]="99"
*
VTCON3[01]="GRUPO"
VTCON3[02]="CLASSE"
VTCON3[03]="DEPART"
VTCON3[04]="CD DEPTO"
VTCON3[05]="CD GRUPO"
VTCON3[06]="CD SUBG"
*
VTCON4[1]=CHR(24)+CHR(25)
VTCON4[2]="<ENTER>"
VTCON4[3]="SELECIONA"
VTCON4[4]=" "



*------------------------- INICIO DO PROGRAMA -------------------------------*
LL1=10
CC1=03
LL2=20
CC2=75
TELAVELHA=SAVESCREEN(LL1,CC1,LL2+1,CC2+1)
@ LL1,CC1 CLEAR TO LL2,CC2
@ LL1,CC1 TO LL2,CC2 DOUBLE
BOXSHADOW(LL1,CC1,LL2,CC2)
PUBLIC CAMPO:=""
wtrue=0
WNOME002=SPACE(20)
GO TOP
DO WHILE WTRUE = 0
SET FILTER TO
@ LL1,CC1 SAY "DESCRICAO:" GET WNOME002 PICT "@!"
READ
IF LASTKEY()<>27
WCHECA=SUBSTR(WNOME002,1,1)
IF WCHECA<> " "
SET SOFTSEEK ON
SEEK WNOME002
SET SOFTSEEK OFF
IF EOF()
@ 24,10 SAY "DESCRICAO NAO EXISTENTE"
LOOP
ENDIF
SET FILTER TO CDSGRMERC>0
ELSE
CAMPO=SUBSTR(ALLTRIM(WNOME002),1)
SET FILTER TO CDSGRMERC>0
GO TOP
ENDIF
DBEDIT(LL1+1,CC1+1,LL2-1,CC2-1,VTCON1,"",VTCON2,VTCON3,,,,VTCON4)
SET FILTER TO
IF LASTKEY() = 13
&LAST_VAR = CDGRUMERC
WDEP = CDDEPMERC
WGRU = CDGRUMERC
WSGR = CDSGRMERC
EXIT
ENDIF
ELSE
WTRUE=1
ENDIF
ENDDO
RESTSCREEN(LL1,CC1,LL2+1,CC2+1,TELAVELHA)
SELE TBCLS
SET ORDER TO 1
RESTELA()
SET FILTER TO
SELECT TBPRO
SET COLOR TO &WCOLOR
RETURN


Neste caso, funciona, mudou o tamanho das informações (o numero de
campos para o DBEdit)

FUNCTION CONS_CLASSES_N
GETLIST:={}
LAST_VAR = READVAR()
BACTELA()
WSELE=SELECT("TBCLS")
IF WSELE=0
USE TBCLS INDEX TBCLS,TBCLS1 ALIAS TBCLS NEW SHARED READONLY
ENDIF
SELE TBCLS
INDCLS=INDEXORD()
SET ORDER TO 2

*
*--------------------- VETORES PARA USO DO DBEDIT ---------------------------*
DECLARE VTCON1[04],VTCON2[04],VTCON3[04],VTCON4[04]
*
VTCON1[01]="NODESCRI" **********> TAMANHO 30 CHAR
VTCON1[02]="CDDEPMERC" **********> TAMANHO 02 NUM
VTCON1[03]="CDGRUMERC" **********> TAMANHO 02 NUM
VTCON1[04]="CDSGRMERC" **********> TAMANHO 02 NUM
*
VTCON2[01]=" "
VTCON2[02]="99"
VTCON2[03]="99"
VTCON2[04]="99"
*
VTCON3[01]="CLASSE"
VTCON3[02]="DEPTO"
VTCON3[03]="GRUPO"
VTCON3[04]="SUBG"
*
VTCON4[1]=CHR(24)+CHR(25)
VTCON4[2]="<ENTER>"
VTCON4[3]="SELECIONA"
VTCON4[4]=" "

*------------------------- INICIO DO PROGRAMA -------------------------------*
LL1=10
CC1=03
LL2=20
CC2=75
TELAVELHA=SAVESCREEN(LL1,CC1,LL2+1,CC2+1)
@ LL1,CC1 CLEAR TO LL2,CC2
@ LL1,CC1 TO LL2,CC2 DOUBLE
BOXSHADOW(LL1,CC1,LL2,CC2)
PUBLIC CAMPO:=""
wtrue=0
WNOME002=SPACE(20)
GO TOP
DO WHILE WTRUE = 0
SET FILTER TO
@ LL1,CC1 SAY "DESCRICAO:" GET WNOME002 PICT "@!"
READ
IF LASTKEY()<>27
WCHECA=SUBSTR(WNOME002,1,1)
IF WCHECA<> " "
SET SOFTSEEK ON
SEEK WNOME002
SET SOFTSEEK OFF
IF EOF()
@ 24,10 SAY "DESCRICAO NAO EXISTENTE"
LOOP
ENDIF
SET FILTER TO CDSGRMERC>0
ELSE
CAMPO=SUBSTR(ALLTRIM(WNOME002),1)
SET FILTER TO CDSGRMERC>0
GO TOP
ENDIF
DBEDIT(LL1+1,CC1+1,LL2-1,CC2-1,VTCON1,"",VTCON2,VTCON3,,,,VTCON4)
SET FILTER TO
IF LASTKEY() = 13
* &LAST_VAR = CDGRUMERC
WDEP = CDDEPMERC
WGRU = CDGRUMERC
WSGR = CDSGRMERC
EXIT
ENDIF
ELSE
WTRUE=1
ENDIF
ENDDO
RESTSCREEN(LL1,CC1,LL2+1,CC2+1,TELAVELHA)
SELE TBCME
SET ORDER TO 1
RESTELA()
SET FILTER TO
SELECT TBPRO
SET COLOR TO &WCOLOR
RETURN


Caso consiga uma luz, agradeço
Laudelino
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Mensagem por esbasso »

Afinal de contas , qual não funciona, pois nos doiS caso voce diz que funciona.
Percebi uma coisa sem olhar o codigo melhor

voce define num caso vertores de 6 poisções e no outro caso vetores de 4
,mas em ambos os casos o vetor VTCON4 esta atribuido somente em 4 posicoes. Num dos casos as duas posições finais a 5 e a 6 teriam valore logicos de .F. CONDIZENTE COM O ERRO teu erro. VERIFIQUE ISSO
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Erro Dbedit executando o programa

Mensagem por Laudelino Scarmagnani »

Desculpe,
No primeiro caso, não funciona. Mas, vou analisar o que voce argumentou e tentar resolver. Como a maioria deles a logica é igual, resolvendo um, resolvo os outros.
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Erro Dbedit executando o programa

Mensagem por Laudelino Scarmagnani »

Luiz, obrigado pela dica. Mataste a charada (se é que se pode chamar isso de charada). Arrumei de acordo com o que "falaste" e funcionou.
No clipper funcionava blz, porem o xhb não. Que coisa, ein. Mas valeu. Estou me animando com xharbour.
Obrigado.
Laudelino.
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Mensagem por esbasso »

Esta do DBEDIT tambem passei, mas porque passava os parametros com .T. onde não tinha como dizia o manual do clippper. Mas no Xharbour eles mudaram e o default virou "".
Mas o Xharbou é 10, vale a pena migrar tudo.
Vai ter mais algumas coisinhas a ajustar , principalmente porque o Xharbour é mais rigido nas verificações.
MAS VAI VALER A PENA
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Erro Dbedit executando o programa

Mensagem por Laudelino Scarmagnani »

Pessoal, bom dia.
É o seguinte: não sei se fiz algo errado, mas uma consulta com DBEdit é chamada ora por tecla de função (set key), ora por DO <função>. Quando chama por tecla função, funciona. Quando não preenche os campos e o sistema chama por DO <função>, da o seguinte erro:

******************************* Error log file ********************************

Date ............: 13/02/07
Time ............: 07:08:34
Available Memory : 82016
Multi Threading : No
VM Optimization : 0
Application : C:\Sistema\xHB\sistem32.exe
Operating System : Windows XP Professional 5.01.2600 Service Pack 2
Compiler : Borland C++ 5.5.1
xHarbour Version : xHarbour build 0.99.61 Intl. (SimpLex)
Build Date : Mar 8 2006 10:37:46

-------------------------- Environmental Information --------------------------

Exact is ........: Off
Fixed is ........: Off
Decimals is at ..: 2
Date Format is ..: dd/mm/yy
Epoch is ........: 1950
Path is .........:
Default is ......:
Exclusive is ....: Off
SoftSeek is .....: Off
Unique is .......: Off
Deleted is ......: On
Cancel is .......: On
Debug is ........: False
Color is ........: W+/B,N/W,N/N,N/N,N/W
Cursor is .......: 1
Console is ......: On
Alternate is ....: Off
AltFile is ......:
Device is .......: SCREEN
Printer is ......: False
PrintFile is ....: PRN
Margin is .......: 0
Bell is .........: Off
Confirm is ......: Off
Escape is .......: On
Insert is .......: Off
Intensity is ....: On
Scoreboard is ...: Off
Delimeters is ...: Off
Delimchars is ...: ::
Wrap is .........: On
Message is ......: 24
MCenter is ......: On

===========================Detailed Work Area Items============================


++++++++++++++++++++ Internal Error Handling Information +++++++++++++++++++++

Subsystem Call ..: BASE
System Code .....: 1133
Default Status ..: False
Description .....: Bound error
Operation .......: array assign
Arguments .......: [ 1] = Type: N Val: 5
Involved File ...:
Dos Error Code ..: 0

Trace Through:
----------------
VER_OPERAC : 272 in Module: SISTEMA.PRG
VENDA : 364 in Module: SISTEMA.PRG
SAIDAS : 52 in Module: SISTEMA.PRG
MAIN : 582 in Module: SISTEMA.PRG

Este log emitido pelo xHarbour é excelente!
Se alguem puder me dar uma luz, agradeço.
Laudelino
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Mensagem por esbasso »

Veja o teu erro
Description .....: Bound error
Operation .......: array assign
Arguments .......: [ 1] = Type: N Val: 5
agora veja aqui ER_OPERAC : 272 in Module: SISTEMA.PRG
nesta linha.
Deve ter um vetor que esta estourando, acima do limite
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Erro Dbedit executando o programa

Mensagem por Laudelino Scarmagnani »

Agora mudou um pouco o erro. Mas tenho outra logica igual, so muda a tabela, e funciona. Esta da o seguinte erro, agoraÇ

Subsystem Call ..: BASE
System Code .....: 1068
Default Status ..: False
Description .....: Argument error
Operation .......: array access
Arguments .......: [ 1] = Type: U [ 2] = Type: N Val: 1
Involved File ...:
Dos Error Code ..: 0

Trace Through:
----------------
(b)TDATACACHE:TDATACA : 171 in Module: tbrowse.prg
TDATACACHE:GETCELLCOL : 0 in Module: tbrowse.prg
TBROWSE:DISPCELL : 2,768 in Module: tbrowse.prg
TBROWSE:HILITE : 2,735 in Module: tbrowse.prg
TBROWSE:PERFORMSTABIL : 2,361 in Module: tbrowse.prg
TBROWSE:FORCESTABLE : 2,210 in Module: tbrowse.prg
DBEDIT : 255 in Module: dbedit.prg
VER_FINALIDADE : 386 in Module: SISTEMA.PRG
(b)CONFF : 54 in Module: SISTEMA.PRG
HBGETLIST:GETDOSETKEY : 710 in Module: tgetlist.prg
HBGETLIST:GETAPPLYKEY : 288 in Module: tgetlist.prg
HBGETLIST:READER : 210 in Module: tgetlist.prg
READMODAL : 141 in Module: getsys.prg
CONFF : 268 in Module: SISTEMA.PRG
COITEM : 510 in Module: SISTEMA.PRG
ENTRADAS : 38 in Module: SISTEMA.PRG
MAIN : 584 in Module: SISTEMA.PRG

Laudelino.
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Erro Dbedit executando o programa

Mensagem por Laudelino Scarmagnani »

Desculpem o transtorno.
No problema acima, fiquei testando e imaginei a possibilidade do retorno em branco (nao achou registro), devido um set filter. Tirei o set filter e funcionou. Só que o set filter seria interessante. Por exemplo, tenho uma tabela com as operações de saidas de mercadorias e entradas de mercadorias. As operacoes de saidas são maiores que 500. Então, se a consulta for a partir da tela de saida de mercadorias (Vendas, Pedidos, Orçamento, Ajuste de estoques, Requisição de mercadorias,...) a relação da consulta deverá ser com as operações a partir de 500.
Não sei se me fiz entender.
Laudelino.
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Mensagem por esbasso »

TENTA ASSIM
SE DEPOIS DO SET FILTER VOCE DEVE DAR UM GOTOP.
DEPOIS DISSO TESTA A CONDIÇÃO
SET FILTER TO CONDICAO
DBGOTP()
IF EOF()
NENUM REGISTRO ENCONTRADO
RETURN
ENDIF
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Erro Dbedit executando o programa

Mensagem por Laudelino Scarmagnani »

Continuando os testes, o problema na lógica era o seguite:
havia o comando select da estrutura,
go top e
então o comando set filter, reornando vazio neste caso.
mudei para
select, set filter e go top, solucionando o problema.
Com o tempo, aprendo. Nem tudo que funciona no clipper, funciona o xharbour, da mesma forma.
Laudelino.
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Erro Dbedit executando o programa

Mensagem por Laudelino Scarmagnani »

esbasso escreveu:TENTA ASSIM
SE DEPOIS DO SET FILTER VOCE DEVE DAR UM GOTOP.
DEPOIS DISSO TESTA A CONDIÇÃO
SET FILTER TO CONDICAO
DBGOTP()
IF EOF()
NENUM REGISTRO ENCONTRADO
RETURN
ENDIF
Ok, acertei as rotinas quanto ao gotop.
Inclui dbgotop() em substituição à leitura previa para ver se existia lançamentos e funcionou. É bem mais prático desta forma. Meu problema é que a linguagem que trabalho diariamente é LINC e há muiots recursos no Clipper e agora no xHarbour, que meus programas porderiam ficar mais enxutos. Mas depois que descobri este forum, ficou mais facil a pesquisa e com a ajuda do pessoal então, fica muito mais facil.
Valeu!
Laudelino.
Responder