Curso de Visual FoxPro

Curso de Visual FoxPro

Seja Bem-Vindo ao curso de Visual FoxPro da Autocom3, aqui iremos te ajudar a entender essa ferramenta, que vai te ajudar no processo de desenvolvimento.

VFOX – Introdução ao Visual FoxPro

O que é o Visual FoxPro ?

O Microsoft Visual FoxPro é uma plataforma para o desenvolvimento de aplicações Windows para o desktop centradas em bases de dados, bem como front-end para sistemas cliente-servidor.
O Microsoft Visual FoxPro é uma ferramenta orientada a objetos e eventos.
Oferecendo suporte para consultas remotas, SQL Pass-Through para desenvolvimento de componentes COM+ para camada de regra de negócios para acesso a qualquer base de dados corporativa, através do seu Universal Data Access, que utilizando da classe de objeto CursorAdapter provê acesso nativo a sua base de dados própria (DBC), o acesso a XML, Microsoft SQL Server 2000 e fontes de dados baseadas em ODBC e OLE DB.
Com a integração com a plataforma .Net possui um grande número de funções nativas e exclusivas para tratamento de documentos XML e XML Web Services, permitindo o uso de XML hierárquicos e suporte a esquemas XSD.
Através de Componentes COM, incluindo Office, Microsoft Visual Studio e tecnologias Active Server Pages (ASP), pois com o seu suporte nativo a Serviços COM+, o Visual FoxPro pode criar facilmente componentes altamente escaláveis para aplicações de três camadas.

Como iniciar?

  • Instalar o Visual FoxPro;
  • Instalar a atualização do Visual FoxPro;
  • Instalar o pacote COM+.

Um pouco de lógica para programação

Conhecendo um algoritmo

Programas de computador geralmente são traduções feitas a partir de um algoritmo, um algoritmo é um plano, um projeto para a criação de um programa de computador. Algoritmo é a maneira pela qual organizamos as informações, a fim de passa-las para o computador, ou seja, consiste em um conjunto lógico e finito de ações  (instruções) que resolvem um determinado problema. Um Algoritmo é uma sequência de instruções ordenadas, de forma lógica, para a resolução de uma determinada tarefa ou problema.
Por definição verificamos que algoritmo não se aplica apenas à informática, pode ser caracterizado tanto para uma receita de bolo quanto para montagens industriais. Usamos algoritmos em procedimentos humanos diariamente.
Nenhum algoritmo será completo, normalmente algumas condições serão esquecidas, assim ao se construir um algoritmo o seu responsável deve especificar condições de entrada e saída. Vamos pegar um pequeno exemplo de algoritmo usado em nosso dia-a-dia, como um simples telefonema.

Clique na imagem para ampliar

Iniciando as expressões

Uma expressão é um conjunto de variáveis, operadores, literais e outras expressões que determinam um valor que pode ser numérico, booleano ou string.
Para desenvolvermos os algoritmos e desmembrar as expressões, usaremos uma pseudolinguagem conhecida como “Portugol” ou Português Estruturado.
“Portugol” é derivado da aglutinação de português + Algol. Algol é o nome de uma linguagem de programação estruturada, usada no final da década de 50.
Para a construção de Algoritmos, todas as expressões aritméticas devem ser linearizadas, ou seja colocadas em linhas. Isso devido à leitura que é feita pelo computador.

Clique na imagem para ampliar

Termos e componentes relacionados à programação

Variáveis

Variáveis são endereços de memória, destinados a armazenar informações temporariamente. Todo algoritmo ou programa deve possuir variáveis.
No exemplo apresentado anteriormente (um simples telefonema), declararíamos as variáveis, dizendo ao programa que os valores de entrada e saída, seriam os impulsos telefônicos.
Agora veremos alguns exemplos, pequenos programas. Assim, você pode aprender como eles são implementados, e ficar sabendo quais são as possibilidades dos algoritmos. Vamos começar com um programa muito pequeno que exibe uma mensagem na tela.

Orientação a objetos

Seria necessário um curso inteiro para falar sobre orientação a objeto, visto que este tipo de tecnologia deixa de lado a tradicional lógica de programação procedural e apresenta um novo conceito. Vamos conhecer os fundamentos básicos da orientação a objeto.

Princípios

O .Net Framework é totalmente orientado a objeto. Não apenas permite a utilização de objetos, mas depende disso. Praticamente tudo o que você precisa para criar uma aplicação é, de alguma forma, realmente um tipo de objeto.
Mas o que são objetos?

Definição

Imagine que você compre uma televisão. Supondo que você não conheça eletrônica, você não saberá o funcionamento dela, ou seja, os atributos. Porém todos os televisores tem muitos aspectos físicos em comum, apesar de diferentes, assim como funcionamento, ou seja, na parte “externa” os televisores podem ser alterados. Esse é o conceito de ENCAPSULAMENTO. Podemos, então, dizer que uma “televisão” é uma CLASSE, que possui propriedades, métodos e eventos. Cada “aparelho de televisão” é uma instância da classe televisão, que herda as suas propriedades, métodos e eventos. Esse é o conceito de HERANÇA em orientação a objeto. Ainda existe o conceito do POLIMORFISMO, que consiste na instância poder ter mais de um método com assinaturas diferentes, por exemplo. Esses conceitos ficarão mais claros no decorrer do curso, onde utilizaremos na prática.

Propriedades

Propriedades são partes do objeto onde ele receberá valores que determinarão seu comportamento.
Utilizando o exemplo do objeto “televisão”, podemos ter a propriedade “tipo”, que pode ser LCD, Plasma ou LED.
Também podemos ter a propriedade “Tamanho”, que determinará as polegadas da tela, e assim por diante.

Métodos

Métodos são simplesmente procedimentos que seu objeto irá fazer internamente e retornará um resultado útil. Métodos
são amplamente utilizados em orientação a objeto. Do nosso exemplo da televisão, um método poderia ser “PassarEnergia”
quando ligamos o aparelho.

Eventos

Evento é algo que pode ser acessado externamente ao objeto. É muito parecido com o método. Um exemplo seria “AoLigar”
da televisão. Isso irá disparar uma sequência de processos no objeto, por exemplo, o evento “AoLigar” chama o método
“PassarEnergia”.

Introdução ao Visual FoxPro – Um programa para criar um banco de dados avançado

O Visual FoxPro 9.0 é uma poderosa ferramenta para construir soluções de bases de dados. Os usuários podem construir todo o tipo de bases de dados, incluindo aplicações individuais e remotas para PCs Tablet que rodem Windows. Podem também criar e acessar componentes COM e serviços XML Web, os quais são compatíveis com a tecnologia Microsoft .NET.

Porque então utilizar o Visual FoxPro?

O Visual FoxPro 9.0 inclui um motor local de cursores e uma relação próxima entre linguagem e dados. Há também a possibilidade de criar soluções compatíveis com .NET com serviços XML e XML Web hierárquicos. Este conta com um robusto conjunto de ferramentas direcionadas para a criação de aplicação de bases de dados para computadores, oferecendo aos programadores tudo o que precisam para gerir os seus dados. Estas ferramentas de gestão incluem pesquisas, a criação de um sistema integrado de gestão de bases de dados relacionais (DBMS), organizar tabelas de informação e mais. Esta aplicação completa de gestão de dados irá ajudar os usuários a gerir eficazmente todos os seus dados e aplicações.
O Visual FoxPro 9.0 inclui também ferramentas de produtividade para programadores. Agora podem melhorar a interface de usuário com os controles de ancoragem automática, suporte de imagens melhorado e formulários IDE. Existe até uma opção para personalizar a janela de propriedades com todos os tipos de letras e definições de cor personalizadas. Esta ferramenta completa ajuda a melhorar o seu processo de design quando criar soluções de bases de dados, e esta inclui um conjunto de ferramentas e aplicações que são extremamente úteis.

Como a Autocom3 cria aplicativos não suportados pelo Visual FoxPro

O Visual foxpro possui 100% integração com a tecnologia .NET, sendo assim tais desenvolvimentos serão realizados em C#.

Princípios Básicos

Existem quatro especificidades que você deve saber ao começar a programar em Visual FoxPro:
Não é case sensitive; aceita abreviação de comandos; comentários; caracteres terminal; e blocos.

Não é Case Sensitive

O visual foxpro não é case sensitive, ou seja “CASE” ou “Case” ou “case” é a mesma coisa para ele.

Comentários

Comentários são trechos do código fonte onde as informações existentes nele são ignoradas pelo compilador, ou seja você pode adicionar alguma informação dentro do código, por exemplo, para explicar alguma função, e quando o compilador verifica que se trata de um comentário, ele não o inclui na compilação.
Existe duas formas de comentários em Visual FoxPro, no início da linha e na mesma linha e usa o * ou &&.
* Isto é um comentário no início da linha
IF
ELSE  && Isso é um comentário dentro da linha
ENDIF

Caractere Terminal

O Visual FoxPro entende que cada linha é um comando e não exige um caracter de terminal, como no C#.
Mas se um comando for muito grande e você desejar utilizar uma quebra de linha, utilize o caracter ponto-e-virgula (;).
* Código em apenas uma linha
Replace ltransf with ‘’ all
* Mesmo código com quebra de linha
Replace Ltransf ;
With ‘’ ;
all

Blocos

Amplamente utilizada na linguagem C#, Java e C, as chaves ({}) demarcam o inicio e o final dos blocos. No Visual FoxPro o uso de blocos não é necessário:

Clique na imagem para ampliar

Classes

O estudo da orientação a objeto assusta muitas vezes, porém se você conseguir absorver o conceito em si, não será difícil entender.
As classes nada mais são que os modelos, as formas dos objetos, ou seja, o que o objeto poderá fazer, Ela consiste em métodos, propriedades e eventos. Ou seja, o que o objeto poderá fazer. Ela consiste em métodos, propriedades e eventos. Ou seja, o caminho inverso, um objeto é uma instancia de uma classe, que terá os mesmos métodos, propriedades e eventos.

Escopo de Classe

A classe pode ser declarada como publica, privada ou protegida:
-Publica – sem restrição de acesso.
-Private – a classe somente é acessada no contexto onde foi declarada.
-Protected – a classe somente é acessível pela sua própria classe ou por suas classes derivadas.

Variáveis e Constantes

quando você utiliza aplicações, você realmente não se importa como os dados da aplicação são armazenados, simplesmente o faz. Entretanto como um programador, você tem que pensar sobre isso. Qual o tipo de dados o usuário irá inserir? Será texto, número, datas ou qualquer outra coisa?
Isso importa porque como você armazena os dados internamente em sua aplicação, afetará não somente como você irá ligar os dados, mas também o que você poderá fazer com esses dados. Para armazenar dados internamente, são utilizadas variáveis, e as variáveis tem tipos. Por exemplo , tem um tipo de dados chamado string. Não surpreendentemente, é utilizado para armazenar dados de texto. Tem um tipo de dados chamado Date para datas e horas, um tipo integer para números e um tipo decimal ou double para números flutuantes. Cada um tem diferentes características: o tipo integer pode somente armazenar números inteiros, e tentar armazenar outro tipo de dados em uma variável integer irá provocar um erro.

Tipos de Variáveis

Os tipos de variáveis são:

CharacterCampo alfanumérico de até 254 caracteres.
DateCampo do tipo data.
DateTimeCampo do tipo data e time.
NumericAceita inteiro ou decimais com a faixa – .9999999999E+19 to .9999999999E+20
LogicalCampo logico, aceita TRUE ou FALSE
GeneralAceita arquivos binários
IntegerAceita números inteiros, sem decimais
MemoAceita textos grandes
VarcharAceita campos do tipo VARCHAR
ARRAYMatriz de valores e pode ser mono ou bidirecional

Declarando variáveis

O visual foxpro aceita declarações de variáveis também, como o C#
LOCAL nome AS CHARACTER
Nome = “Whilder”
Mas isso não é obrigatório, o que é mais comum no visual foxpro é utilizar dessa forma:
Nome = “Whilder”
Data = ctod(’31/03/2019’)
Salario = 1200
Veja que não é necessário declarar previamente o tipo da variável, o Visual FoxPro já altera o tipo para o valor que você colocar e por incrível que pareça, uma troca de tipo não gera erro e é aceito, porém, não é uma boa prática de programação:
Nome = “Whilder”  && Variavel vira character
Nome = 1200  && Variável que era character vira numérica
Nome = CTOD(’31/03/2019’)  && Variável que era numérica vira DATE

Escopo das variáveis

Podem ser PUBLICAS ou LOCAIS.
Variáveis PUBLICAS são disponibilizadas em todo o sistema e em todos os ambientes, ou seja, são globais e disponíveis em todo o sistema.
Variáveis LOCAIS tem o escopo somente dentro do método atual e é destruída após o RETURN ou ENDFUNC da função ou método.

Nomeando variáveis

Algumas sugestões:
PUBLICAS:  Primeira letra “g”, indicando global, segunda letra como tipo, exemplo “n,d,c,i,m”, etc…
LOCAIS: Primeira letra “l”, indicando local, segunda letra como tipo, exemplo “n,d,c,i,m”, etc…

Como é usado no Autocom3?

Apenas as globais usa a sugestão acima para variáveis publicas.
Nas variáveis locais é usado apenas um “_”, sem identificação do tipo de dados.

Operadores aritméticos

Operadores aritméticos são os comumente utilizados para a realização de cálculos matemáticos.

Adição+x+y
Subtraçãox-y
Multiplicação*x*y
Divisão/x / y
Potenciação^x ^y
Resto de divisão%x % y

Precedência de Operadores

quando efetuamos cálculos matemáticos, a ordem em que são feitas as contas influenciam bastante no resultado final. Por padrão, primeiro são feitas as contas de multiplicação e divisão, depois a soma de subtração.
Como exemplo, nós temos que somar 2 ao número 5, e depois multiplicar por 2. Isso irá resultar no número 14 (2+5=7 -> 7*2=14).
O comum, é pensar na expressão desta forma: 2+5*2. porém , neste caso, o resultado seria 12, e não 14.
para evitar esses imprevistos, são utilizados parênteses nas operações.
(2+5)*2=12
funções matemáticas avançadas
Existem algumas funções que são predefinidas na programação em visual foxpro, para facilitar os cálculos mais complicados. Seguem abaixo alguns exemplos na linguagem C# e um compatível na linguagem Visual FoxPro.

Clique na imagem para ampliar

Conversão de Valores

A conversão de dados é muito importante em qualquer linguagem de programação, as mais usadas em Visual Fox Pro são:
Converter Número em Texto
_variável = STR(12.34,2)  && transforma em “12.34”
Converter Texto em Número
_Variavel = VAL(“12.34”)  && Transforma em 12.34
Converter Decimal em Inteiro
_Variavel = INT(12.34)  && Transforma em 12
Converter Texto em Data
_Variavel = CTOD(’31/12/2019’)  && Converte texto ‘31/12/2019’ em data como 31/12/2019
Converter Data em Texto
_Texto = CTOD(’31/12/2019’)
_Variavel = DTOC(_Texto)  && Converte o texto que está na variável _Texto em tipo de Data

Operadores Lógicos e de Comparação

Os operadores lógicos e de comparação são amplamente utilizados nas estruturas de decisão e repetição. Eles fornecem a base para que a aplicação decida qual caminho deve tomar. Operadores de comparação sempre envolvem uma expressão a ser avaliada.
O resultado, invariavelmente sempre será True ou False.

Maior>x > y
Maior ou Igual>=x >= y
Menor<x < y
Menor ou Igual<=x <= y
Idêntico==x == y
Diferente!=x != y
AND (E)ANDx AND y
OR (OU)ORX OR y
NOT (NÃO)!x = !y
NOT (NÃO)NOTX = NOT Y

Estruturas de Decisão

Em toda aplicação um pouco mais elaborada, as estruturas de decisão estão presentes. Elas indicam qual caminho, ou qual código a ser executado diante da resposta de um teste lógico. Como vimos em Operadores Lógicos e de Comparação, o resultado sempre será True ou False.
Existem basicamente duas estruturas de decisão padrões: IF/ELSE/ENDIF ou DOCASE/ENDCASE
No C# a primeira estrutura tem a seguinte sintaxe:

Estrutura IF

IF (teste_logico1)
//código a executar se teste_logico1 retornar TRUE
ELSE
//código a executar se teste_logico1 retornar FALSE
ENDIF

Estrutura DOCASE

A estrutura DOCASE/ENDCASE é um pouco diferente:
DO CASE
CASE _VARIAVEL = “A”
* Executa o código se _variável = “A”
* Sai do case e executa a linha imediatamente após o ENDCASE
CASE _VARIAVEL = “B”
* Executa o código se _variável = “B”
* Sai do case e executa a linha imediatamente após o ENDCASE
CASE _VARIAVEL = “C”
* Executa o código se _variável = “C”
* Sai do case e executa a linha imediatamente após o ENDCASE
CASE _VARIAVEL = “D”
* Executa o código se _variável = “D”
* Sai do case e executa a linha imediatamente após o ENDCASE
OTHERWISE
* Executa o código se _variável não for A,B,C,D
* Sai do case e executa a linha imediatamente após o ENDCASE
ENDCASE

Estruturas de repetição:

Existem 4 estruturas de repetição básicas:
FOR  FOR EACH  DO WHILE  SCAN
ENDFOR  NEXT  ENDDO  ENDSCAN
FOR VarName = nInitialValue TO nFinalValue [STEP nIncrement]
Commands
[EXIT]
[LOOP]
ENDFOR | NEXT
FOR EACH Var [AS Type [OF Class Library]] IN Group [FOXOBJECT]
Commands
[EXIT]
[LOOP]
ENDFOR | NEXT [Var]
DO WHILE lExpression
Commands
[LOOP]
[EXIT]
ENDDO
SCAN [NOOPTIMIZE] [Scope] [FOR lExpression1] [WHILE lExpression2]
[Commands]
[LOOP]
[EXIT]
ENDSCAN

Procedures x Functions

Muitas vezes confundimos toda rotina como sendo uma função da aplicação. Porém essas rotinas estão divididas em dois tipos específicos: Procedures e Functions.
Procedures são rotinas que não retornam valores. Elas executam algum procedimento, algum cálculo mas não são obrigadas a retornar algum tipo de dado a ser utilizado em outra rotina.

Exemplo de PROCEDIMENTOS

PROCEDURE ProcedureName
[ LPARAMETERS parameter1 [ ,parameter2 ] ,… ]
Commands
[ RETURN [ eExpression ] ]
[ENDPROC]
PROCEDURE ProcedureName ( [ parameter1 [ AS para1type ][ ,parameter2 [AS para2type ] ] ,…] ) [ AS returntype ]
Commands
[ RETURN [ eExpression ] ]
[ENDPROC]
Exemplo de FUNÇÕES
FUNCTION FunctionName [ LPARAMETERS parameter1 [ ,parameter2 ] , … ]
Commands
[ RETURN [ eExpression ] ]
[ENDFUNC]
FUNCTION FunctionName( [ parameter1 [ AS para1type ][ ,parameter2 [ AS para2type ] ],…] ) [ AS returntype ]
Commands
[ RETURN [ eExpression ] ]
[ENDFUNC]

Tratamento de Erros

Erros acontecem, e nem sempre é o programador que erra quando está codificando. Muitas variáveis de ambiente podem ocasionar o erro, como uma entrada inválida por parte do usuário, por exemplo.
Por esse motivo, é de vital importância que o desenvolvedor da aplicação utilize os tratamentos de erro, para que o fluxo da aplicação não se interrompa, e o programa consiga atingir seu objetivo.
O Visual FoxPro trata os erros de duas maneiras, de uma maneira GLOBAL e de uma maneira ESPECÍFICA.
A maneira GLOBAL é uma declaração ON ERROR suafuncaodetratamento()
ON ERROR DO suafuncaodetratamento WITH ;
ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM( ), LINENO( )
USE nodatabase
ON ERROR  && Restores system error handler.
PROCEDURE suafuncaodetratamento
PARAMETER merror, mess, mess1, mprog, mlineno
CLEAR
? ‘Error number: ‘ + LTRIM(STR(merror))
? ‘Error message: ‘ + mess
? ‘Line of code with error: ‘ + mess1
? ‘Line number of error: ‘ + LTRIM(STR(mlineno))
? ‘Program with error: ‘ + mprog
ENDPROC
E a outra forma é através da função TRY/CATCH/FINALLY
TRY
[ tryCommands ]
[ CATCH [ TO VarName ] [ WHEN lExpression ]
[ catchCommands ] ]
[ THROW [ eUserExpression ] ]
[ EXIT ]
[ FINALLY
[ finallyCommands ] ]
ENDTRY

VFOX – Comparando Visual FoxPro com C#

C# round 1 – Comparando as linguagens

Para começar é importante recordar que C# é uma das opções padrão que temos no .NET para desenvolvimento web, e por isso que mais a frente vamos falar tanto de ASPX como de C# já que estão intimamente relacionadas.
Vou dar um pequeno passeio pelo C# mostrando-lhe as similaridades e diferenças entre ambas as linguagens para que seja mais fácil de entender você e possa fazer uma comparação visual.
Algo que é muito importante de destacar é o fato que C# é case sensitive, quer dizer que faz diferença entre as maiúsculas e as minúsculas portanto tenha cuidado especial já que for não é o mesmo que For.
Também é importante que a maioria das linhas de código tenham um ponto e vírgula no final das mesmas, por sorte o ambiente de desenvolvimento é bastante amigável e marca sugestivamente um erro sublinhando de vermelho (como se fosse um erro ortográfico do Word) assim como também se auto-corrige a tabulação de um bloco ao fechar uma chave ou copiar um texto de outro lugar e o colorido da sintaxe é igual ao Visual FoxPro, e por isso que se ao escrever um comando o mesmo não ficar colorido, é melhor revisar se não cometeu um erro.
Os comando como ifcase for em C# se manipulam de um modo um pouco diferente que no Visual FoxPro já que estes comandos utilizam as chaves {} para indicar o início e o fim de um bloco de código, do seguinte modo:
 
Tabela 1: If-EndIf

VISUAL FOXPROC#
If cNombre = “pablo”     * Para comentarios usar o asterisco     * Processar algo … Else     * Processar algo mais … EndIfif (cNombre == “pablo”)    {    // Para comentarios usar    //barra dupla    // Processar algo …    } else    {    // Processar algo mais … }

No caso de C# não existe um ENDIF, ENDCASE, ENDDO nem ENDFOR o NEXT, já que ao fechar a chave se esta dando fim a uma instrução. Assim também, é o caso do if há dois pontos a considerar… 1. A condição lógica do if deve estar fechada entre os parenteses. 2. Em C# não é o mesma coisa um sinal de igual que dois de modo que: a. Um sinal de igual atribui um valor como por exemplo idade = 44, neste caso estou atribuindo o valor 44 para a variável idade. b. Dois sinais de igual comparam um valor, onde idade == 44 significa que quero saber se o valor da variável idade é de 44. NOTA: Se o comando tem apenas uma linha de código, não é necessário colocar as chaves de inicio e fim de bloco.
 
Tabela 2: Do Case-EndCase

VISUAL FOXPROC#
Do Case    Case nValor = 1       * Processar algo …    Case nValor = 2       * Processar algo …    Case nValor = 3       * Processar algo …    OtherWise       * Processar algo … EndCaseswitch(nValor)    {    case 1;    // Processar algo …       break;    case 2;    // Processar algo …       goto case 1;    case 3;    // Processar algo …       break;    default    // Processar algo …       break;    }

Evidentemente, a versão do C# é mais estruturada, sem duvida é fácil destacar as diferenças mais importantes.

  • Toda a lógica do case deve apontar para uma única variável indicada no começo.
  • A variável dever ir entre parenteses.
  • Se deve indicar com o comando break que se quer sair do case;
    caso contrário se seguem avaliando os cases seguintes.
  • Se pode ir de um case a outro utilizando o goto case n.
  • É equivalente ao Otherwise e Padrão.

 
Tabela 3: For-Next

VISUAL FOXPROC#
For i = 1 to 30    * Processar algo … Nextfor (int i=1; i<=30; i++ )    {     // Processar algo …    }

Como se pode ver, a versão de C# é um pouco mais completa a primeira vista já que separa em três partes:

  • A primeira indica a variável (que pode ser declarada in situ).
  • Em segundo lugar esta a condição de loop .
  • Em terceiro lugar está o incremento (STEP no caso do Visual FoxPro) é onde a variável ponteiro se incrementa de 1 em 1.

O uso de i++ se interpreta como se a variável i soma 1 a seu atual valor e existem as seguintes combinação:

  • i++ é o mesmo que i=i + 1
  • i+= 10 é o mesmo que i=i + 10
  • i– e o mesmo que i=i – 1

Dentro do loop também se pode utilizar ++i que significa em lugar de somar 1 ao terminar de processar o bloco de código será somado antes de processar o bloco de código.

 
Tabela 4: Do While-EndDo

VISUAL FOXPROC#
Local i as integer I = 30 Do While i > 0    i = i – 1    * Processar algo … EndDoint i=30; while (i>0)    {        i–;        // Processar algo …     }

Como se vê as diferenças neste caso são mínimas, já que se bem no C# se tem a condição lógica vá entre parenteses.
É importante ressaltar que tanto no if como no case, o while e o for a condição principal de cada um esta entre parenteses, quer dizer, que neste caso do if e o While a condição lógica esta entre parenteses, e é o caso de case a variável vai entre parenteses e no caso do for os parenteses do loop vão entre parenteses não tem ponto e virgula no final da linha seguinte é uma chave no inicio do bloco.
O que no Visual FoxPro conhecemos como AND no C é &&, também ocorre o mesmo com OR no Visual FoxPro que é o ||.

Manipulando dados em C#

Em C# se utiliza um conceito de manipulação de dados bastante interessante que é o DataSet, o qual é um conjunto de tabelas contidas em um objeto, semelhante a ter uma base de dados Fox com todas as tabelas em uma variável, algo muito interessante. Porém o uso que é vamos dar ele é bastante reduzido por hora.
Como o objeto DataSet é um objeto container, contém tabelas, que contém registros que contém campos, e deste modo como se deve acessar a informação contida em um DataSet lembrando sempre que as matrizes em C# são base zero portanto se quiser pedir a primeira tabela do DataSet dsDatos eu devo fazer:

dsDatos.Tables[0]; // A primeira tabela
dsDatos.Tables[1]; // A segunda tabela

Seguindo esta minha lógica, para acessar os registro de uma tabela:

dsDatos.Tables[0].Rows[0]; // O primeiro registro da primeira tabela
dsDatos.Tables[0].Rows[1]; // O segundo registro da primeira tabela
dsDatos.Tables[0].Rows[2]; // O terceiro registro da primeira tabela
dsDatos.Tables[2].Rows[9]; // O oitavo registro da terceira tabela

Agora, para poder saber o valor do campo “Apellido” se dever escrever:

x = dsDatos.Tables[0].Rows[0]["Apellido"];

E no caso de querer saber o valor do quarto campo do array:

x = dsDatos.Tables[0].Rows[0][3];

Também se pode querer saber a quantidade de tabelas ou de registro que tem uma tabela para qual existe:

dsDatos.Tables.Count;
dsDatos.Tables[0].Rows.Count;

Tabela 5: Declaração de variáveis
VISUAL FOXPROC#
Local nEdad As Integer Local cNombre As String Local oRs As MiDll.Metodoint nEdad = 0; string cNombre = “”; MiDll.Metodo oRs = new MiDll.MetodoClass();

 
Em C# se deve indicar como primeira instância o tipo de variável que irá utilizar, logo o nome da variável e finalmente se deve atribuir um valor. Em se tratando de um objeto é necessário colocar new entre o igual e o objeto.
A maioria dos objetos tem a possibilidade de converter qualquer que seja seu valor em uma string utilizando ToString(), esta função é bastante interessante devido o fato dela incorporar um modo pouco convencional para aqueles desenvolvedores que não estão acostumados a programar em C.
 
Tabla 6: Converter valores

VISUAL FOXPROC#
Local nEdad As Integer Local cEdad As String Local nLargo As Integer nEdad = 55 cEdad = Alltrim(Str(nEdad)) nLargo = Len(cApellido)int nEdad = 0; string cEdad = “”; int nLargo = 0; nEdad = 55; cEdad = nEdad.ToString().Trim(); nLargo = cApellido.Length();

No caso do C# existe Convert o qual se encarrega de converter quase todos os tipos de dados suportados pelo sistema, basta escrever Convert na janela de edição para que apareça o intellisense com todas as opções possíveis.

Percorrendo uma tabela

Embora em C# os dados sejam manipulados como objetos, vemos uma sutil equivalência de como é percorrer uma tabela no Visual FoxPro e como faze-lo em C# e adicionar uma variável.

VISUAL FOXPROC#
Local nTotal as Integer nTotal = 0 Select MiCursor Scan    * Totalizar todos os registro do cursor …    nTotal = nTotal + Importe EndScandecimal nTotal = 0; For(int i=0; i<dsDatos.Tables[0].Rows.Count; i++ )    {    // Totalizar todos os registro da tabela …    nTotal += dsDatos.Tables[0].Rows[i][“importe”]    }

Como se pode ver a primeira vista não se requer muito mais código, não obstante é necessário começar a trabalhar com objetos como DataSet no caso que de se estar manipulando um conjunto de tabelas ou com o DataTable no caso usar uma única tabela.
Mais adiante veremos que podemos carregar um XML em um DataSet, o que significa que podemos carregar vários XML em um mesmo DataSet e utilizar um conjunto de Tabelas para acessar as diferentes tabelas do DataSet.

Tratamento de Erros

Em C# existe o try-catch que esta presente no Visual FoxPro 8.0, se bem que a funcionalidade seja muito similar, para aqueles que ainda não tenham programado nada em Visual FoxPro 8.0 irei contar do que se trata.

C#
try    {    // Ao produzir um erro dentro da instrução try, salta-se o bloco do catch    } catch(Exception exc)    {    // A variável exc, do tipo Exception, contém o erro produzido. Se tenho uma página    // chamada error.aspx que recebe um parametro com o text da menssagem de error…    Response.Redirect(“error.aspx?mensaje=” + exc.ToString().Trim())    }

Temos que levar em conta certas características quando ao funcionamento, como por exemplo:

  • Não se pode direcionar para outra página dentro do try.
  • Se houver um erro e entrar no catch se direciona para uma página com Response, não se pula o código que está abaixo como mostra o exemplo seguinte:

Nesta rotina para enviar um email se pode ver que no final da rotina se chama a pagina mensaje.aspx para informar o usuário que o email foi enviado com sucesso essa linha de código jamais se pula se surgir um erro.

C#
private void Enviar_Mail( string MailMSG ) {    MailMessage msgMail = new MailMessage();    try    {       msgMail.To = “quemsera@servidor.com.ar”;       msgMail.From = quemsera@servidor.com.ar;       msgMail.Subject = “Novo usuário”;       msgMail.BodyFormat = MailFormat.Text;       msgMail.Body = MailMSG;       // Enviar o email para o administrador       SmtpMail.SmtpServer = “smtp.servidor.com.ar”;       SmtpMail.Send(msgMail);    }    catch (Exception exc)    {       Response.Redirect(“error.aspx?Mensaje=” + exc.ToString().Trim());    }    Response.Redirect(“mensaje.aspx?Mensaje=Email foi enviado”); }

Através seu funcionamento, se produz algum erro dentro do try será capturado pelo catch o qual chama a pagina de error.aspx que fará com que não se execute a penúltima linha da rotina que mostra uma mensagem indicando que um email foi enviado, pelo contrario se não tiver nenhum erro se executará a penúltima linha da rotina.

Conclusão

Como pudermos ver, C # não é uma linguagem difícil e além das diferenças evidentes entre ambas as linguagens eu acredito que está claro que C# é completamente intuitivo mesmo quando seja necessário lembrar de pôr o ponto e virgula no final da maioria das linhas de código ou que seja necessário colocar o código entre colchetes.
 

Autor: Wendell Peixoto

Leia também:

Tendências de vendas para 2021

Como Funciona um SSD

O comercial do futuro

Receba as nossas novidades!

Ao informar os dados eu concordo com a Política de Privacidade

CONTATO COM NOSSO ATENDIMENTO

Dê mais este passo para o crescimento da sua empresa.Preencha seus dados abaixo: