Comando SQL x XBASE

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
Karine Lima Almeida
Usuário Nível 1
Usuário Nível 1
Mensagens: 25
Registrado em: 27 Set 2013 10:38
Localização: Limeira-SP

Comando SQL x XBASE

Mensagem por Karine Lima Almeida »

alxsts, então o sistema não é meu, é da empresa onde eu trabalho, e sim, o sistema roda nas duas plataformas, foi desenvolvido usando GASPRO.
Com sintaxe clipper, fizemos a conversão a pouco tempo para Harbour, já estamos trabalhando no desenvolvimento de harbour +qt.
Tenho que ser sincera, eu não conheco muito a linguagem clipper e nem harbour, o pouco que conheci foi estudando hbqt, que é a junção de harbour + qt, e a forma de se programar é um tento diferente.

o trecho do sistema onde uso o skip -1

Código: Selecionar todos

chv_=&("{||"+INDEXKEY(0)+"=["+;           // so servem os registro que
 IF(EMPT(criterio),"","T")+chv_1+"]}")*//// atendao ao filtro/relacao

 DO WHILE !EOF() .AND. !BOF() .AND.;       // pula qtos reg's forao pedidos
 a_pular != ja_pulado //.AND. EVAL(chv_)  // ate eof ou fora filtro/relacao
  IF a_pular > 0                           // pulando para frente
   SKIP
   ja_pulado++                             // conta quando foroa pulados
  ELSE                                     // pulando para traz
   SKIP -1
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Comando SQL x XBASE

Mensagem por alxsts »

Olá!

Parece a função Skipper de um TBrowse...

Se trabalhasse apenas com Windows, ia te sugerir usar ADO mas, não é o caso. Creio que, por hora, reste apenas a sugestão do Itamar, para testar com SQLMix.

Se vocês já estão usando Qt, creio que terão a solução usando as classes para acesso a SGBD que ela disponibiliza.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Karine Lima Almeida
Usuário Nível 1
Usuário Nível 1
Mensagens: 25
Registrado em: 27 Set 2013 10:38
Localização: Limeira-SP

Comando SQL x XBASE

Mensagem por Karine Lima Almeida »

alxsts, se não for pedir muito teria um exemplo de como conectar ao meu banco mysql em um servidor ubunto 13.04 como sqlmix?

estou tentando isso:
IF rddInfo( RDDI_CONNECT, { "ODBC", "192.168.1.1", "root", , "XXXX" } ) == 0
? "Unable connect to the server"
RETURN
ENDIF

mas não conecta.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Comando SQL x XBASE

Mensagem por sygecom »

Karine,
Não muda nada a parte de conexão se o Mysql está no Windows ou Linux, talvez seu problema esteja na configuração do Mysql no Linux, tentou acessar por um phpamin da vida para ver se de fora consegue conectar no Mysql ?
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Comando SQL x XBASE

Mensagem por alxsts »

Olá!

Aparentemente o código de conexão que você postou está ok:

Código: Selecionar todos

IF rddInfo( RDDI_CONNECT, { "ODBC", "192.168.1.1", "root", , "XXXX" } ) == 0
? "Unable connect to the server"
RETURN
ENDIF
Suponho que você tenha o MySQL Conector instalado. Na linha do IF acima, troque "ODBC" por "MYSQL" e teste.
[]´s
Alexandre Santos (AlxSts)
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

Comando SQL x XBASE

Mensagem por Itamar M. Lins Jr. »

Ola!
É o seguinte:
Com SQLMIX temos duas formas de acesso. Via ODBC e nativo!
Já testei aqui e funciona 100%
Nativo, test1.prg

Código: Selecionar todos

#require "rddsql"
#require "sddmy"

#include "dbinfo.ch"
#include "error.ch"

REQUEST SDDMY
REQUEST SQLMIX

ANNOUNCE RDDSYS

FIELD RESIDENTS

PROCEDURE Main()

#if defined( __HBSCRIPT__HBSHELL )
   rddRegister( "SQLBASE" )
   rddRegister( "SQLMIX" )
   hb_SDDMY_Register()
#endif

   rddSetDefault( "SQLMIX" )

   ? "RDDs:"; AEval( rddList(), {| x | QQOut( "", x ) } )

   IF rddInfo( RDDI_CONNECT, { "mysql", "localhost", "root","senha_do_root", "test" } ) == 0 // test é o DB que vem por padrão no Mysql.
      ? "Could not connect to server", rddInfo( RDDI_ERRORNO ), rddInfo( RDDI_ERROR )
      RETURN
   ENDIF

   CreateTable()

   ? "Let's browse table (press any key)"
   Inkey( 0 )
   dbUseArea( .T., , "SELECT * FROM country", "country" )
   Browse()

   ? "Let's browse table ordered by resident count (press any key)"
   Inkey( 0 )
   INDEX ON field->RESIDENTS TAG residents TO country
   Browse()

   dbCloseAll()

   RETURN

STATIC PROCEDURE CreateTable()

   ? rddInfo( RDDI_EXECUTE, "DROP TABLE country" )
   ? rddInfo( RDDI_EXECUTE, "CREATE TABLE country (CODE char(3), NAME char(50), RESIDENTS int(11))" )
   ? rddInfo( RDDI_EXECUTE, "INSERT INTO country values ('LTU', 'Lithuania', 3369600), ('USA', 'United States of America', 305397000), ('POR', 'Portugal', 10617600), ('POL', 'Poland', 38115967), ('AUS', 'Australia', 21446187), ('FRA', 'France', 64473140), ('RUS', 'Russia', 141900000)" )

   RETURN
E via ODBC test2.prg:

Código: Selecionar todos

#require "rddsql"
#require "sddodbc"

#include "simpleio.ch"

REQUEST SQLMIX, SDDODBC

PROCEDURE Main()

   LOCAL nConnection, nI, aI

#if defined( __HBSCRIPT__HBSHELL )
   rddRegister( "SQLBASE" )
   rddRegister( "SQLMIX" )
   hb_SDDODBC_Register()
#endif

   Set( _SET_DATEFORMAT, "yyyy-mm-dd" )

   rddSetDefault( "SQLMIX" )
   nConnection := rddInfo( RDDI_CONNECT, { "ODBC", "Server=localhost;Driver={MySQL ODBC 5.3 Unicode Driver};dsn=;User=root;Pwd=SUA_SENHA;database=test;" } ) //Não precisa do DSN é opcional
   IF nConnection == 0
      ? "Could not connect to server", rddInfo( RDDI_ERRORNO ), rddInfo( RDDI_ERROR )
      RETURN
   ENDIF
   ? nConnection
   ? rddInfo( RDDI_EXECUTE, "DROP TABLE country" )
   ? rddInfo( RDDI_EXECUTE, "CREATE TABLE country (CODE char(3), NAME char(50), RESIDENTS int(11))" )
   ? rddInfo( RDDI_EXECUTE, "INSERT INTO country values ('LTU', 'Lithuania', 3369600),('USA', 'United States of America', 305397000), ('POR', 'Portugal', 10617600), ('POL', 'Poland', 38115967), ('AUS', 'Australia', 21446187), ('FRA', 'France', 64473140), ('RUS', 'Russia', 141900000)" )
   ? dbUseArea( .T., , "SELECT * FROM country", "country" )
   ? "LASTREC:", LastRec()
   DO WHILE ! Eof()
      aI := Array( FCount() )
      FOR nI := 1 TO FCount()
         aI[ nI ] := FieldGet( nI )
      NEXT
      ? RecNo(), hb_ValToExp( aI )
      dbSkip()
   ENDDO
   ? "LASTREC:", LastRec()
   dbCloseAll()

   RETURN

Código: Selecionar todos

C:\fontes\teste>test2

         1
.T.
.T.
.T.
.T.
LASTREC:          1
         1 {"LTU", "Lithuania", 3369600}
         2 {"USA", "United States of America", 305397000}
         3 {"POR", "Portugal", 10617600}
         4 {"POL", "Poland", 38115967}
         5 {"AUS", "Australia", 21446187}
         6 {"FRA", "France", 64473140}
         7 {"RUS", "Russia", 141900000}
LASTREC:          7
C:\fontes\teste>
PS.Estou usando harbour 3.4, Mingw 5.1, compilei o Harbour agorinha e instalei o MySQL 5.6 antes de compilar!
Setar o PATH para a DLL do MYSQL quando for acesso nativo.
C:\Program Files\MySQL\MySQL Server 5.6\lib;
Setar a Variavel do Harbour p/ achar e criar as libs do MySQL.
HB_WITH_MYSQL=C:\Program Files\MySQL\MySQL Server 5.6\include
Simples assim! ;-)

Saudações,
Itamar M. Lins Jr.
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

Comando SQL x XBASE

Mensagem por Itamar M. Lins Jr. »

E tem gente querendo colocar na cabeça dos outros que ADO é mais simples do que isso ?

Código: Selecionar todos

   IF rddInfo( RDDI_CONNECT, { "mysql", "localhost", "root","mysql", "test" } ) == 0
      ? "Could not connect to server", rddInfo( RDDI_ERRORNO ), rddInfo( RDDI_ERROR )
      RETURN
   ENDIF
ou isso?

Código: Selecionar todos

   ? "Let's browse table (press any key)"
   Inkey( 0 )
   dbUseArea( .T., , "SELECT * FROM country", "country" )
   Browse()

   ? "Let's browse table ordered by resident count (press any key)"
   Inkey( 0 )
   INDEX ON field->RESIDENTS TAG residents TO country
   Browse()
O que é mais intuitivo para o programador xBase ?
E quando for salvar os dados o tal CRUD!

Código: Selecionar todos

STATIC PROCEDURE CreateTable()

   ? rddInfo( RDDI_EXECUTE, "DROP TABLE country" )
   ? rddInfo( RDDI_EXECUTE, "CREATE TABLE country (CODE char(3), NAME char(50), RESIDENTS int(11))" )
   ? rddInfo( RDDI_EXECUTE, "INSERT INTO country values ('LTU', 'Lithuania', 3369600), ('USA', 'United States of America', 305397000), ('POR', 'Portugal', 10617600), ('POL', 'Poland', 38115967), ('AUS', 'Australia', 21446187), ('FRA', 'France', 64473140), ('RUS', 'Russia', 141900000)" )

   RETURN
É mais simples do que ADO ou não é ?

Saudações,
Itamar M. Lins Jr.
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

Comando SQL x XBASE

Mensagem por JoséQuintas »

E tem gente querendo colocar na cabeça dos outros que ADO é mais simples do que isso ?
Ohhhhhh

Como eu disse várias vezes, isso esconde o que realmente precisa.
E é explicação vinda de quem acha que entende.

Veja, não sou eu que estou dizendo, é o seu roteiro, que até omite algumas partes:

Precisa instalar programa pra baixar do github
Precisa baixar os fontes do Harbour
precisa baixar compilador C
precisa baixar e instalar o servidor MySQL na máquina antes de gerar o Harbour
precisa configurar harbour, compilador c, pra gerar o Harbour

seguindo o seu roteiro, talvez não funcione nos terminais, por não ter a parte de MySQL - não conheço SQLMIX


É.... mais simples que ADO....
Nem quem usa SQLMIX entende direito, só quem usa ADO mesmo reconhece as falhas do roteiro.

E tem gente que fala que SQLMIX é mais fácil
kkkkkkkkkkkkkkkkkkkkkkkkkkk

Continuo acompanhando tranquilamente.
Aqui é apenas resposta ao que destaquei no início do texto.

Eu sempre disse que o ADO é mais simples de sair usando, não depende de nada. E já postei do começo ao fim tudo que terá que ser enfrentado.
Ainda não apareceu o mesmo do SQLMIX, foram sempre partes incompletas.

Nota:
Talvez possamos supor que Linux não tem Harbour nightly, e parte do que foi omitido seja tarefa comum, mas de qualquer forma está omitido.
E como ela vai usar em Linux e Windows, o ADO pode não ser opção

Nota2:

Código: Selecionar todos

? rddInfo( RDDI_EXECUTE, "DROP TABLE country" )

Código: Selecionar todos

cnMySql:Execute( "DROP TALE country" )
Nossa!
Como disserarm SQLMIX é muito mais simples, ADO é complicado demais.
Como eu disse, tanto faz, não faz diferença teimar em uma coisa ou outra, melhor aproveitar a parte comum e ir em frente sem causar confusão.
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

Comando SQL x XBASE

Mensagem por Itamar M. Lins Jr. »

Em menos de 8 minutos eu fiz tudo isso! Que dificuldade.
Roda no Android, Linux, etc... ADO só windows!
Olhem a sintaxe do ADO.
O Quintas não é bobo... colocou um comando só, esconde os outros... é tão esperto que acha ele que sabe mais do quem criou o SQLMIX. Acha que quem criou o SQLMIX não sabia que existia ADO. Que o rapaz criou uma ferramenta sem futuro... fala sério! Esse é problema do Quintas é cego não quer enxergar, depois fica escrevendo que eu sou xiita do Harbour, que não sei do que estou falando... Diz que o Record set, que é a malha, o retorno da consulta do ADO é a mesma coisa que um DBF... só rindo mesmo de uma afirmação dessas. Que é tudo a mesma coisa. Depois criou uma função para transformar o Record set em DBF, e lá vai ele novamente recriando tudo de novo, da maneira dele para ficar parecido com SQLMIX...

Quer porque quer mostrar que isso aqui em baixo é mais fácil de entender, para um programador xBase,

Código: Selecionar todos

// Início do aplicativo:
Conexao():Open()

// final do aplicativo:
Conexao():Close()

// Função auxiliar
FUNCTION Conexao()
  STATIC oConexao
 IF oConexao == NIL
   oConexao := win_OleCreateObject( "ADODB.Connection" )
   oConexao:ConnectionString := "Driver=" + cMySqlDriver + ";Server=" + cServer + ";Option=131072;Stmt=;" + ;
    "Database=" + cDatabase + ";User ID=" + cUser + ";Password=" + cPassword + ";"
   oConexao:CursorLocation  := adUseClient // cliente
   oConexao:CommandTimeOut  := 60 // seconds
   oConexao:ConnectionTimeOut := 60 // seconds
 ENDIF
 RETURN oConexao
do que uma apenas uma linha de código do SQLMIX?

Código: Selecionar todos

IF rddInfo( RDDI_CONNECT, { "mysql", "localhost", "root","mysql", "test" } ) == 0
Ainda quer discutir que para chegar a usar isso é preciso muito trabalho ?
Se fosse mais simples, lógico que eu estaria afirmando que ADO é mais simples.... Pode ser até melhor o ADO, mas não é mais simples.
Sabe porque o SQLMIX é mais simples ? não ? então olhe o propósito do SQLMIX, estude os fontes do SQLMIX, as classes que foram criadas que poupam todo o trabalho extra que temos com ADO, tudo isso é possivel graças ao Przmek que criou a camada virtual de comunicação com todos os RDD´s.

Saudações,
Itamar M. Lins Jr
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

Comando SQL x XBASE

Mensagem por Itamar M. Lins Jr. »

Esses pequenos detalhes ele não conta... né ?
Lembre-se que a string é entre aspas simples.
Como fazer se dentro da string também tem aspas simples?
Ou data. Toda hora converter a data? Mais prático criar função.
No MySql, a barra "\" indica que o próximo caractere não faz parte do comando e deve ser usado como caractere.

Código: Selecionar todos

FUNCTION StringSql( cTexto )
 cTexto := StrTran( cTexto, [\], [\\] )
 cTexto := StrTran( cTexto, ['], [\'] )
 cTexto := ['] + cTexto + [']
 RETURN cTexto

FUNCTION DateSql( dDate )
 LOCAL cTexto
 cTexto := StrZero( Year( dDate ), 4 ) + "-" + StrZero( Month( dDate ), 2 ) + "-" + StrZero( Day( dDate ), 2 )
 IF cTexto == "0000-00-00"
   cTexto := "NULL"
 ELSE
   cTexto := StringSql( cTexto )
 ENDIF
 RETURN cTexto

FUNCTION NumberSql( xValue )
 RETURN Ltrim( Str( xValue ) )
Com SQLMIX isso não é necessário, porque já vem tudo prontinho em DBF! Todo esse tratamento, etc o pessoal do SQLMIX trata na raiz, nas classes criadas do SQLMIX para essa finalidade.
Isso ele não expõem para os outros, esconde. Agora manda ele indexar o RecordSet do ADO ? dar um DBSEEK no RecordSet, um COPY FILE...
Olhem os comandos do ADO...
Não tem nada a ver com xBase.

Código: Selecionar todos

cSql := "SELECT * FROM " + cTable + " LIMIT " + Ltrim( Str( nLimitStart ) ) + ", 1000"
oRs := cnMySql:Execute( cSql )
nQtdFields := oRs:Fields:Count() - 1
nQtdRec  := oRs:RecordCount()
E na cabeça dele é tudo a mesma coisa... porque ? ele não diz para os outros que já está acostumado com essa sintaxe, porque ele programa em VB!

Qual é o programador xBASE, que usa RECORDCOUNT() ? que eu saiba nós conhecemos o lastrec() ou RecCount(), ou fcount() olhem que no ADO é "fields:count() -1" para o mesmo resultado! E é a mesma coisa p/ ele...

Saudações,
Itamar M. Lins Jr.
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

Comando SQL x XBASE

Mensagem por Itamar M. Lins Jr. »

Para mostrar como o rapaz é exagerado!!!
Precisa instalar programa pra baixar do github
Precisa baixar os fontes do Harbour
precisa baixar compilador C
precisa baixar e instalar o servidor MySQL na máquina antes de gerar o Harbour
precisa configurar harbour, compilador c, pra gerar o Harbour
Só precisa de 2 coisas:
1)Fontes do Harbour
https://github.com/vszakats/harbour-cor ... master.zip

2)Setar os PATH´s da vida.

Código: Selecionar todos

SET PATH=%PATH%;C:\Hb34\bin;C:\Mingw32\bin;C:\Program Files\MySQL\MySQL Server 5.6\lib;
SET HB_WITH_MYSQL=C:\Program Files\MySQL\MySQL Server 5.6\include
HB_INSTALL_PREFIX=C:\HB34
>\Lugar_onde_descompactou_os_fontes\win-make.exe clean install
Oh! Mais isso é muito complicado!!!
Precisa do compilador C é ? hummmm e como é que vc consegue usar o Harbour sem compilador C ?

As outras coisinhas mais, é preciso p/ qualquer situação com ADO ou SQLMIX
Não precisa de programa nenhum p/ baixar do GIT, MYSQL é necessário nas DUAS situações, e a configuração do Harbour e compilador C ? é preciso nas duas situações.

Porque isso ? O Harbour por padrão não vem com as DLL´s e libs do MySQL, até porque tem diversas versões de MySQL... Então é preciso pegar os fontes do Harbour, instalar o MySQL e criar as libs para o MySQL.

Saudações,
Itamar M. Lins Jr.
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

Comando SQL x XBASE

Mensagem por JoséQuintas »

Pra conectar: servidor, usuário, senha e nome do banco de dados.
Igual nos dois.
O resto é fixo. Qual a diferença?

Um único open() e um único close() no aplicativo inteiro. Qual a complicação?

Achar que isso é complicado para o pessoal xBase....
Aí pegou pesado.

Existirem outros tipos de campos no servidor, melhor pra decidir onde agilizar.

Saber que existem caracteres que não podem ser usados.....
Quando envia um comando SQL no SQLMIX não precisa se preocupar com isso?

Se for isso, quando o cara for usar um HeidiSQL, não vai entender porque o comando não funciona.
Interessante... aí ele pede ajuda pra mexer no banco de dados que ele mesmo criou.
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

Comando SQL x XBASE

Mensagem por Itamar M. Lins Jr. »

Achar que isso é complicado para o pessoal xBase....
Eu não estou desqualificando nada, se desqualifiquei, retiro o que disse.
Para mim, qualquer coisa que funcione tem sua serventia.
Agora eu uso o SQLMIX para importar dados p/ meu sistema, e em breve eu poderei usar MySQL ou outro melhor...
E pelo pouco que entendo desse assunto, eu sei que é uma coisa muito boa, leio os comentários das pessoas em todo mundo agradecendo pelo SQLMIX.

É uma coisa bem simples de entender. Para quê criar RDDADO se tem ADO ? para quê criar SQLMIX se tem ADO ? é sinal que o ADO tem suas complicações ou limitações para as pessoas do xBase.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Comando SQL x XBASE

Mensagem por sygecom »

Karine,
Resolveu ou consegui evoluir no caso?
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
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

Comando SQL x XBASE

Mensagem por Itamar M. Lins Jr. »

Ola!
Só mais isso aqui que passou despercebido.
Ainda não apareceu o mesmo do SQLMIX, foram sempre partes incompletas.
Falta o quê mesmo ?

Eu heimm, é tão difícil assim de entender SQLMIX ?
Está tudo ai no exemplo.
Conectar, criar,gravar...

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