Erro nos parâmetros do dbEdit

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

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Erro nos parâmetros do dbEdit

Mensagem por cjp »

Pessoal, depois que migrei do xharbour para o harbour, estou tendo alguns erros estranhos no meu programa, que não davam no xharbour.

A informação do erro é "Error BASE/1071 Erro nos parâmetros: ="

A linha do programa apontada, no entanto, nem tem esse parâmetro. Confira-se:

Código: Selecionar todos

                     dbedit(,,maxrow()-2,,v1,"responde",,v3)
No xharbour, nem mesmo dá qualquer erro.

Alguém poderia me ajudar com isso?
Editado pela última vez por Pablo César em 19 Out 2012 21:48, em um total de 1 vez.
Razão: Título re-editado
Inacio de Carvalho Neto
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

erro estranho no Harbour

Mensagem por alxsts »

Olá!

Estive pesquisando em outros fóruns e realmente existem diferenças entre Clipper, Harbour e xHarbour, como já sabemos. "Error BASE/1071 Argument error: =". Realmente muito estranho...

Tente passar todos os parâmetros para a DbEdit().
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

erro estranho no Harbour

Mensagem por Pablo César »

Está faltando os parâmetros. Quando você informa valor nenhum é o mesmo que Nil e este não é um valor nem numérico nem do tipo caracter e dai o processo de compilação é interrompido com erro.
Tente sempre seguir a sintaxe de cada função para não ter problemas, o DBEDIT é o mesmo que o Clipper, veja:
Faz um browse em registros no formato de tabela
────────────────────────────────────────────────────────────────────────────
Sintaxe

DBEDIT([<nTopo>], [<nEsquerda>], [<nBase>], <nDireita>],
[<acColunas>],
[<cFunçaoUsuário>],
[<acMáscarasColunas> | <cMáscaraColunas>],
[<acCabeçalhosColunas> | <cCabeçalhoColunas>],
[<acSeparadoresCabeçalhos> | <cSeparadorCabeçalhos>],
[<acSeparadoresColunas> | <cSeparadorColunas>],
[<acSeparadoresRodapés> | <cSeparadorRodapés>],
[<acRodapésColunas> | <cRodapéColunas>]) --> NIL

Argumentos

<nTopo>, <nEsquerda> e <nBase>, <nDireita> definem as coordenadas do canto superior esquerdo e o canto inferior direito da janela da DBEDIT(). Os valores da linha podem variar de zero até MAXROW() e os posicionamentos de coluna podem variar de zero até MAXCOL(). Caso nao sejam especificados, as coordenadas assumidas sao 0, 0, MAXROW(), e MAXCOL().

<acColunas> é um vetor de expressoes caractere contendo os nomes de campos do arquivo de dados ou expressoes para utilizar como valores para cada linha exibida. Se este argumento nao é especificado, DBEDIT() exibe todos os campos presentes na área corrente como sendo as colunas.

<cFunçaoUsuário> é o nome de uma funçao definida pelo usuário que é executada quando uma tecla nao reconhecível é pressionada ou quando nao há nenhuma tecla pendente no buffer do teclado. O nome da funçao é especificada como sendo uma expressao caractere sem os parênteses ou argumentos. Note que o comportamento da funçao DBEDIT() é afetado pela presença desses argumentos. Para maiores informaçoes veja os tópicos discutidos abaixo.

<acMáscarasColunas> é um vetor paralelo contendo as máscaras de formataçao de cada coluna. Especificando
<cMáscaraColunas> em vez do vetor, este será assumido para a exibiçao de todas as colunas com o mesmo formato. Consulte também TRANSFORM() ou @...SAY para maiores informaçoes sobre máscaras.

<acCabeçalhosColunas> é um vetor paralelo contendo expressoes caractere que definem os cabeçalhos para cada coluna. Se especificada <cCabeçalhoColuna> em vez do vetor de cabeçalhos, é assumido o mesmo cabeçalho para todas as colunas. Para exibir cabeçalhos em mais de uma linha, inclua um ponto-e-vírgula dentro da expressao de cabeçalho onde você deseje que a cadeia seja separada. Caso nao seja especificado, os cabeçalhos das colunas sao tomados do vetor <acColunas>, ou sao assumidos os nomes dos campos presentes na área corrente se o argumento <acColunas> nao for mencionado.

<acSeparadoresCabeçalhos> é um vetor paralelo contendo expressoes do tipo caractere que definem os caracteres que serao utilizados para desenhar as linhas horizontais separando os cabeçalhos das colunas da área de exibiçao dos campos. Especificando a expressao <cSeparadorCabeçalhos> em vez do vetor é utilizado o mesmo separador
para todas as colunas. Caso este argumento nao seja mencionado, o separador assumido é uma linha gráfica dupla.

<acSeparadoresColunas> é um vetor paralelo contendo expressoes caractere que definem os caracteres utilizados para desenhar as linhas verticais que separam as colunas. Especificando a expressao <cSeparadorColunas> em vez do vetor é utilizado o mesmo separador para todas as colunas. Caso este argumento nao seja mencionado, o separador assumido é uma linha gráfica simples.

<acSeparadoresRodapés> é um vetor paralelo contendo expressoes caractere que definem os caracteres que serao utilizados para desenhar as linhas horizontais que separam os rodapés das colunas da área de exibiçao dos campos. Especificando a expressao <cSeparadorRodapés> em vez do vetor é utilizado o mesmo separador de rodapé para todas as colunas. Caso este argumento nao seja mencionado, nao é exibido nenhum separador para os rodapés.

<acRodapésColunas> é um vetor paralelo contendo expressoes caractere que definem os rodapés para cada coluna. Especificando a expressao <cRodapéColunas> em vez do vetor é utilizado o mesmo rodapé para todas as colunas. Para exibir rodapés em mais de uma linha, inclua um ponto-e-vírgula na expressao contendo o rodapé onde você
deseje que a cadeia seja separada. Caso este argumento nao seja mencionado, nao é exibido nenhum rodapé para as colunas.

Retorno

DBEDIT() Em Clipper sempre retorna NIL.
Em Harbour retorna .F. se não houver base de dados a ser utilizada ou se o número de colunas para mostrar é zero, também DBEdit() retorna . T.

Descriçao

DBEDIT() além de ser uma funçao de interface com o usuário é também uma funçao de compatibilidade que exibe registros de uma ou mais áreas de trabalho na forma de tabela. A janela de visualizaçao da DBEDIT() é uma área com células dividida em colunas e linhas. As colunas correspondem aos campos do arquivo de dados e as linhas aos registros deste arquivo. Cada coluna é definida por um elemento do vetor <acColunas>. A largura assumida para a exibiçao de cada coluna é determinada pela avaliaçao da expressao da coluna contida no vetor <acColunas> ou pela máscara da coluna especificada no vetor <acMáscarasColunas>.

Todas as teclas de movimentaçao do cursor sao manipuladas dentro da DBEDIT(), incluíndo PgUp, PgDn, Home, End, as quatro setas de navegaçao, e todas as combinaçoes válidas da tecla Ctrl que realizam a movimentaçao do cursor. As teclas de navegaçao às quais a DBEDIT() responde quando o argumento da funçao do usuário nao é especificado estao mostradas na tabela Teclas Ativas na próxima página.

Tabela 5-8: Teclas Ativas em DBEDIT()
&nbspTecla&nbsp&nbspAçao&nbsp
&nbspCursor para cima&nbsp&nbspSobe uma linha&nbsp
&nbspCursor para baixo&nbsp&nbspDesce uma linha&nbsp
&nbspCursor para esquerda&nbsp&nbspColuna à esquerda&nbsp
&nbspCursor para direita&nbsp&nbspColuna à direita&nbsp
&nbspCtrl-Cursor para esquerda&nbsp&nbspPainel uma coluna para esquerda&nbsp
&nbspCtrl-Cursor para direita&nbsp&nbspPainel uma coluna para direita&nbsp
&nbspHome&nbsp&nbspColuna mais à esquerda na tela&nbsp
&nbspEnd&nbsp&nbspColuna mais à direita na tela&nbsp
&nbspCtrl-Home&nbsp&nbspColuna inicial&nbsp
&nbspCtrl-End&nbsp&nbspColuna final&nbsp
&nbspPgUp&nbsp&nbspTela anterior&nbsp
&nbspPgDn&nbsp&nbspPróxima tela&nbsp
&nbspCtrl-PgUp&nbsp&nbspPrimeira linha da coluna corrente&nbsp
&nbspCtrl-PgDn&nbsp&nbspUltima linha da coluna corrente&nbsp
&nbspReturn&nbsp&nbspEncerra DBEDIT()&nbsp
&nbspEsc&nbsp&nbspEncerra DBEDIT()&nbsp
Quando o argumento da funçao do usuário (<cFunçaoUsuário>) é especificado, todas as teclas indicadas na tabela Teclas Ativas estao ativas com exceçao do Esc e Return. Quando a DBEDIT() chama a funçao do usuário, esta passa automaticamente dois argumentos:

■ O modo corrente passado como um valor numérico

■ O índice da coluna corrente com base no vetor <acColunas>
passado como um valor numérico

O parâmetro modo indica o estado corrente da DBEDIT() dependendo da última tecla que foi executada. Os possíveis valores dos modos estao mostrados na tabela Modos da DBEDIT().

Tabela 5-9: Modos de DBEDIT()
&nbspStatus&nbsp&nbspDbedit.ch&nbsp&nbspDescriçao&nbsp
&nbsp0&nbsp&nbspDE_IDLE&nbsp&nbspInativa, todas teclas foram manipuladas&nbsp
&nbsp&nbsp&nbsp&nbsp&nbspe nao há teclas pendentes&nbsp
&nbsp1&nbsp&nbspDE_HITTOP&nbsp&nbspTentativa de passar início de arquivo&nbsp
&nbsp2&nbsp&nbspDE_HITBOTTOM&nbsp&nbspTentativa de passar final de arquivo&nbsp
&nbsp3&nbsp&nbspDE_EMPTY&nbsp&nbspArquivo vazio na área corrente&nbsp
&nbsp4&nbsp&nbspDC_EXCEPT&nbsp&nbspTeclagem exceçao&nbsp
O parâmetro índice aponta para a posiçao da coluna corrente definida no vetor <acColunas>. Caso o vetor <acColunas> nao seja especificado, o parâmetro índice apontará para a posiçao do campo da estrutura do
arquivo de dados corrente. O nome do campo pode ser acessado utilizando a funçao FIELD().

Quando a funçao do usuário tiver sido chamada, um valor deve ser retornado para instruir à DBEDIT() que açao realizar em seguida. A tabela Valores de Retorno da Funçao do Usuário sumariza os possíveis valores de retorno e as açoes correspondentes:
Tabela 5-10: Valores de Retorno da Funçao de Usuário de DBEDIT()
&nbspValor&nbsp&nbspDbedit.ch&nbsp&nbspDescriçao&nbsp
&nbsp0&nbsp&nbspDE_ABORT&nbsp&nbspAborta DBEDIT()&nbsp
&nbsp1&nbsp&nbspDE_CONT&nbsp&nbspContinua DBEDIT()&nbsp
&nbsp2&nbsp&nbspDE_REFRESH&nbsp&nbspForça reler e reescrever a tela e&nbsp
&nbsp&nbsp&nbsp&nbsp&nbspcontinuar; após reescrever, processa&nbsp
&nbsp&nbsp&nbsp&nbsp&nbspteclas, e vai para inativa&nbsp
A funçao do usuário é chamada nos seguintes casos:

■ Ocorrência de uma tecla de exceçao. Isto acontece quando a DBEDIT() captura uma tecla pressionada e esta nao é reconhecida.
Quaisquer teclas pendentes permanecem no buffer do teclado até que seja capturada dentro da funçao do usuário ou até que a DBEDIT() continue.

■ DBEDIT() entra no modo inativo (i.e., quando todas as teclas pendentes tenham sido executadas). Isto acontece quando o buffer do teclado está vazio ou após ser efetuado um refresh da tela. Nesta ocorrência, há uma chamada para a funçao do usuário e entao a DBEDIT() espera por uma tecla.

■ Início ou final do arquivo é encontrado. Esta ocorrência é a mesma que a inatividade da DBEDIT(). Todas as teclas pendentes sao executadas, e há uma chamada à funçao do usuário com a mensagem de status indicadora.

Note que quando a DBEDIT() é executada pela primeira vez, todas as teclas pendentes no buffer do teclado sao executadas e logo após a DBEDIT() entra no modo inativo com a chamada à funçao do usuário. Caso nao existam teclas pendentes, o modo inativo é imediato.

A estrutura da funçao do usuário deve ser desenhada para manipular todos os modos e as mensagens de status recebidas da DBEDIT().

DBEDIT() é completamente recursiva, isto significa que você pode realizar chamadas aninhadas a ela. Utilizando esta característica, você pode ter múltiplas janelas de browse na tela ao mesmo tempo.
DBEDIT() é uma funçao de compatibilidade e, portanto, nao é recomendada sua utilizaçao como dispositivo de browse. Para este propósito, ela está superada pela classe de objeto TBrowse. Para maiores informaçoes, consulte o capítulo Classes Padrao presente neste livro.

Exemplos

Este exemplo demonstra como chamar a DBEDIT() com uma funçao do usuário:

Código: Selecionar todos

    USE Customer INDEX Customer NEW
    USE Sales INDEX Sales NEW
    SET RELATION TO CustNum INTO Customer
    //
    acColumns = {"Branch", "Salesman", "Amount", "Customer->Customer"}
    DBEDIT(4, 0, 22, 79, acColumns, "UserFunc")
Arquivos: Biblioteca RTL, arquivos header Dbedit.ch e Inkey.ch.
Sabemos que entre o Harbour e xHarbour há diferenças. O Harbour é mais padronizado.

Pode consultar o DBEDIT no Harbour em: http://www.elektrosoft.it/tutorials/Har ... tm#DBEDIT*
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

erro estranho no Harbour

Mensagem por alxsts »

Olá!
Pablo César escreveu:Está faltando os parâmetros. Quando você informa valor nenhum é o mesmo que Nil e este não é um valor nem numérico nem do tipo caracter e dai o processo de compilação é interrompido com erro.
Será? Não acredito. Segundo a documentação, todos os parâmetros são opcionais e valores default são assumidos em caso de omissão de algum deles. E outra: segundo o OP, no xHarbour compila. Testei também e funcionou.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

erro estranho no Harbour

Mensagem por Pablo César »

alxsts escreveu:Segundo a documentação, todos os parâmetros são opcionais e valores default são assumidos em caso de omissão de algum deles.
Sim, de fato deveria aceitar o default quando forem Nil os parâmetros, eu verifiquei e deveria ser assim menos no sétimo parâmetro. Pois pareceria haver um erro no dbedit.prg (linha 162 14674 2010-06-03 15:09:04Z vszakats), pois não trata o 7º parâmetro quando for Nil, veja parte do código:

Código: Selecionar todos

      IF ISARRAY( xColumnSayPictures ) .AND. nPos <= Len( xColumnSayPictures ) .AND. ISCHARACTER( xColumnSayPictures[ nPos ] ) .AND. !Empty( xColumnSayPictures[ nPos ] )
         oColumn:picture := xColumnSayPictures[ nPos ]
      ELSEIF ISCHARACTER( xColumnSayPictures ) .AND. !Empty( xColumnSayPictures )
         oColumn:picture := xColumnSayPictures
      ENDIF
A mensagem do erro, não é muito clara, mas tem a ver com o tipo de dado passado, neste caso Nil.
BASE/1071 Argument error: =
Explanation: The arguments to the = operator were of incompatible
Então, o estranho que eu compilei com Harbour 3.2 e não deu erro algum. Caberia checar a versão do Harbour que o colega está compilando e que viesse algum desses parâmetros dar algum erro.
E outra: segundo o OP, no xHarbour compila. Testei também e funcionou.
Estamos falando em Harbour, não é ? xHarbour não vem ao caso.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

erro estranho no Harbour

Mensagem por alxsts »

Olá!

Creio que é interessante comparar. É o que o cjp está fazendo, pois está migrando de um para o outro. Sabemos que no Clipper e xHarbour o código funciona. Você acaba de identificar um erro nos fontes do Harbour que não existe nos demais. Às vezes esses casos me preocupam... que outros erros podem existir? Será que a parte de cálculos matemáticos está ok?
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

erro estranho no Harbour

Mensagem por Pablo César »

Você acaba de identificar um erro nos fontes do Harbour que não existe nos demais.
Não espera ai, eu voltei atrás com o que eu tinha dito, alterei a minha mensagem ao ver que estava compilando. Portanto o 7º parâmetro não dá erro pela falta. Deve ser algo com respeito a versão do Harbour que ele está utilizando. Re-leia a minha mensagem anterior.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

erro estranho no Harbour

Mensagem por alxsts »

Olá!

Aliás, ele trata quando é NIL sim ( IsEmpty( NIL ) == .T.), tanto no caso do parâmetro ser um array de strings:

Código: Selecionar todos

IF ISARRAY( xColumnSayPictures ) .AND. nPos <= Len( xColumnSayPictures ) .AND. ISCHARACTER( xColumnSayPictures[ nPos ] .AND. !Empty( xColumnSayPictures[ nPos ] )
.AND. !Empty( xColumnSayPictures[ nPos ] ) quanto no caso do parâmetro ser uma string que servirá de picture para todas as colunas:

Código: Selecionar todos

ELSEIF ISCHARACTER( xColumnSayPictures ) .AND. !Empty( xColumnSayPictures )
.AND. !Empty( xColumnSayPictures ). E se não for um dos dois casos deixa em branco a picture, o que creio eu, não causa problema.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

erro estranho no Harbour

Mensagem por Pablo César »

Pois é... não causa problemas. Só que não podemos pedir que um produto ou ferramenta seja infalível. Sabemos que é aperfeiçoado ao longo de extensivos testes e detectando as falhas. O dbedit sofreu muitas alterações (inclusive no xHarbour). Aqui compilou normal de acordo o que o colega passou com as falta de parâmetros. De todas formas, é uma boa prática colocar os parâmetros necessários. Espero saber da versão do Harbour que ele utilizou.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

erro estranho no Harbour

Mensagem por cjp »

Pessoal,

Em primeiro lugar, obrigado pela ajuda.

Desculpem a demora na resposta, mas a coisa aqui está corrida.

A versão que eu estou usando é a 3.0.0, sugerida pelo colega Jairo.

Então, o problema seria apenas a falta dos parâmetros? Se eu colocar:

Código: Selecionar todos

  dbedit(0,0,maxrow()-2,,v1,"responde",,v3)
Resolveria?

O que eu acho mais estranho é que esse erro não acontece sempre, nem mesmo no Harbour. No xharbour nunca aconteceu. E no Harbour, só às vezes.
Inacio de Carvalho Neto
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

erro estranho no Harbour

Mensagem por alxsts »

Olá!

Coloque o parâmetro da coluna inferior direita (nRight), entre o -2 e o v1. Por exemplo:

Código: Selecionar todos

dbedit(0,0,maxrow()-2,MaxCol(),v1,"responde",,v3)
[]´s
Alexandre Santos (AlxSts)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

erro estranho no Harbour

Mensagem por cjp »

Entendido, meu caro. Eu havia esquecido desse outro parâmetro. Obrigado.
Inacio de Carvalho Neto
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Erro nos parâmetros do dbEdit

Mensagem por cjp »

Colegas,

Tenho um outro erro de parâmetro que não consigo entender, sendo que este é até anterior à mudança para o Harbour:

Código: Selecionar todos

Ocorreu o erro: Error BASE/1081  Erro nos parâmetros: +
O erro ocorre porque estou somando +1 a um parâmetro. O parâmetro é numérico. Por que o erro?
Inacio de Carvalho Neto
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Erro nos parâmetros do dbEdit

Mensagem por rochinha »

Amiguinhos,

Este tipo de erro apresenta dificuldades para encontrar, ja que o mesmo nao apresenta uma linha especifica no codigo para irmos direto a ela.

Erro de argumento, como este, não tem referencia a parametrom sendo que argumento não é parametro, mas usamos estas palvras com um mesmo significado.

Dias atras tive um erro parecido.

Solução:

Verificar locais no codigo que contenham calculos, quebras de linhas e possiveis espaços nos vinculso de variaveis, tipo M ->variavel, x : =a ou z > =y.

Espaços colocados nestes pontos podem causar os erros de argumentos =, - ou +.
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.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Erro nos parâmetros do dbEdit

Mensagem por cjp »

Entendo, Rochinha, e por isso estou lutando com este erro há meses (por sorte, ele ocorre numa função que só eu uso e por isso não estou tendo maiores problemas).

Mas veja só: fiz o seguinte teste:

Código: Selecionar todos

   ?pr
   ?type(pr)
   ?pr+1
Resposta do programa:

Código: Selecionar todos

3
N
erro no parâmetro +
Então note: pr = 3; é um numeral; por que dá erro no pr+1? Não consigo entender isso. Parece tão simples.
Inacio de Carvalho Neto
Responder