Jump to content
Fivewin Brasil

Iniciando migração de Dbf para MySql...


Valdir

Recommended Posts

Olá pessoal...

Após 4 anos da compra da SqlLib, novamente tentarei iniciar a migração do meu Sistema.

Como um bom asno, preciso de um passo-a-passo para entender os princípios desta jornada.

Sei que muitos amigos estarão dispostos à ajudar e portanto, peço humildemente que tenham paciência comigo,

Vamos lá.... :

- Baixei a MySql 5.5.13 Win32 e MySql Essencial 5.1.50 Win32.

- Devo instalar as duas versões no meu Servidor ou apenas uma delas? Qual ?

- Existe algum tutorial ou vídeo que ensina a instalar a MYSQL corretamente ?

(Antigamente o Vailton disponibilizou um vídeo, porém está desatualizado.)

Por enquanto é só

Obrigado.

Link to comment
Share on other sites

Para instalar o MySql não é muito difícil, na 1º parte da instalação é so NExt! na 2ª Parte que é a configuração vc terá os seguintes passos:

1- Selecione 'Detailed Configuration' -> Next

2-Server Machino -> Next

3-Multfuncional Database -> Next

4-Installation Path - selecione onde ficará o banco eu costumo deixar como está -> next

5-Online Transation processing(OLTP) -> Next

6-Marque todas as opções ->Next

7-Default->Next

8-Marque todas as opções->Next

9-coloque um senha, repita a mesma e selecione (enable root acess from remote machines) -> Next

10-Clique em executar (obs se aparecer uma tela com 'conection erro', é so clicar em retry até passar )

esse são os passos

Link to comment
Share on other sites

Señores

Muy buenas noches, al parecer mi post les ha generado molestias, quisiera me entiendan, este señor AlexAvel, Don Juan o como se llame me estafó.

Ayer me habló con indignación, en vez de pedir perdon e intentar arreglar la situación, me amenazó con denunciarme por calumnia.

Doy por perdido mi dinero, mi tiempo y sobre todo MI CONFIANZA, pero quiero que no le pase a nadie mas, no se relacionen con este señor Alex, Axel, AlexAvel, Alessandro Avelino, Don Juan, etc. por que al igual que yo la van a pasar mal.

Pidiendo las disculpas del caso, me despido.


Luis Torres

Lima-Perú


Traducido por Google



Srs.

Boa noite, aparentemente meu post gerou desconforto, gostaria de me entender, este senhor AlexAvel, Don Juan ou o que me enganou.

Ontem falei com indignação, em vez de pedir perdão e tentar corrigir a situação, eu ameaçava me processar por calúnia.

Aproveito perdi meu dinheiro, meu tempo e, especialmente, a minha confiança, mas eu quero que não aconteça com mais ninguém, não relacionados com esse cara Alex, Axel, AlexAvel, Alessandro Avelino, Don Juan, etc. porque eu gosto de ir a dar errado.

Fazendo as desculpas apropriadas, eu digo adeus.


Luis Torres

Lima-Peru

Link to comment
Share on other sites

Grande Valdir blz?

Bom, deixa eu te dar algumas dicas:

1 - Para usar SQL é de vital importância deixar de pensar da forma que se usa DBF para entender melhor o SQL. A cultura muda, os comandos mudam, o controle de tudo fica por conta do banco, etc. Então o que você puder ler sobre SQL (tem vários tutoriais bons falando sobre o assunto na internet) leia, vai te ajudar muito, principalmente porque em desenvolvimento com SQL a parte mais importante é o banco de dados. O programa em si vai ser apenas pra mostrar os dados que estão no banco, mas você vai poder até mesmo colocar as regras de negócio no próprio banco de dados, permitindo assim uma portabilidade muito grande;

2 - Veja tudo o que puder sobre normalização de banco de dados. Isto vai te ajudar a rever as tuas tabelas DBF com seus relacionamentos e então pensar em criar um banco no MySQL com todos os relacionamentos pré-definidos, sem criação de problemas posteriores, tipo retrabalho (em criar o banco).

3 - A partir daí tente migrar teu sistema VISANDO usar unicamente o SQL. O SQLLIB ou qualquer outro RDD te permite isso, tem até mesmo a classe TDolphin do Daniel Garcia que permite isso, mas veja bem, ESCREVER em SQL é bem melhor do que usar o SQLLIB para continuar usando comandos xBASE, pois vais perder e muito em questão de performance do banco, principalmente se o banco for remoto.

Parece meio difícil, mas na verdade não é. Se seguires estes passos com certeza você poderá fazer a migração do teu sistema de uma forma muito mais segura e consistente.

De qualquer forma, é só minha opinião.

Abraços,

Link to comment
Share on other sites

Pessoal,

Notei que os colegas do fórum adquiriram muita experiência nesse assunto, por favor, deixa-me postar três dúvidas antigas sobre SQL que, por não encontrar respostas, ainda não me senti seguro para migrar:

1ª) Uma grande vantagem do meu sistema é que o próprio cliente baixa-o do meu site, instala e pronto! O executável cria as tabelas, os índices e o cliente já sai usando.
Pergunta: Existe uma forma de criar um instalador que instale e configure o SQL automaticamente ou eu precisarei instalá-lo e configurá-lo para cada novo cliente? Em caso de afirmativo, ao instalar novas versões do executável, o instalador percebe que o SQL já foi configurado?

2ª) Com tabelas DBF, quando eu preciso alterar alguma tabela ou criar um novo índice para atender a uma solicitação de um novo cliente, eu incluo um algoritmo no meu EXE que quando o cliente instala essa nova versão, ao acessar o sistema ele verifica todas as tabelas e se houver qualquer alteração de tamanho de campo, exclusão de campo, novo campo, novo índice, ele altera a tabela automaticamente sem perder nenhum dado.

Pergunta: Dá para ter essa flexibilidade de modificar as tabelas em tempo de execução com banco de dados SQL ou eu terei que acessar manualmente o banco de dados e alterá-lo a cada modificação necessária?

3ª) Tenho clientes multi-lojas que utilizam algumas tabelas para todas as lojas e outras são separadas por loja, então, eu montei o seguinte esquema. Numa pasta raiz (C:\BD\) ficam as tabelas que são compartilhadas por todas as lojas e depois, cada loja tem a sua própria pasta (C:\BD\001, C:\BD\002, etc). O interessante é que o cliente define quais tabelas ele irá compartilhar numa tela de parâmetros e o sistema faz a separação nas pastas automaticamente. E o cliente pode mudar esse parâmetro quando desejar que o sistema se adapta realocando a tabela entre a raiz e a pasta da loja.

Pergunta: Dá para manter esse esquema com o SQL?

Certo de que vocês terão experiência para responder essas questões, aguardo e desde já agradeço.

Link to comment
Share on other sites

Respondendo Oscar Ribeiro

1ª) Uma grande vantagem do meu sistema é que o próprio cliente baixa-o do meu site, instala e pronto! O executável cria as tabelas, os índices e o cliente já sai usando.
Pergunta: Existe uma forma de criar um instalador que instale e configure o SQL automaticamente ou eu precisarei instalá-lo e configurá-lo para cada novo cliente? Em caso de afirmativo, ao instalar novas versões do executável, o instalador percebe que o SQL já foi configurado?

Sim, tem como criar um instalador para ele instalar o Bando de dados se usar o Firebird é ainda mais fácil fazer isso pois é só Next direto, ou vc pode pegar os arquivos criar uma pasta e mandar rodar ele

2ª) Com tabelas DBF, quando eu preciso alterar alguma tabela ou criar um novo índice para atender a uma solicitação de um novo cliente, eu incluo um algoritmo no meu EXE que quando o cliente instala essa nova versão, ao acessar o sistema ele verifica todas as tabelas e se houver qualquer alteração de tamanho de campo, exclusão de campo, novo campo, novo índice, ele altera a tabela automaticamente sem perder nenhum dado.

Pergunta: Dá para ter essa flexibilidade de modificar as tabelas em tempo de execução com banco de dados SQL ou eu terei que acessar manualmente o banco de dados e alterá-lo a cada modificação necessária?

Sim, eu tenho em meus sistemas uma rotina que verifica todas as tabelas se estão acessadas e compara com a estrutura da nova versão se tiver necessidade de alterar ele fará isso e se for preciso excluir o indice ou criar isso ele fará sem nenhum problema

3ª) Tenho clientes multi-lojas que utilizam algumas tabelas para todas as lojas e outras são separadas por loja, então, eu montei o seguinte esquema. Numa pasta raiz (C:\BD\) ficam as tabelas que são compartilhadas por todas as lojas e depois, cada loja tem a sua própria pasta (C:\BD\001, C:\BD\002, etc). O interessante é que o cliente define quais tabelas ele irá compartilhar numa tela de parâmetros e o sistema faz a separação nas pastas automaticamente. E o cliente pode mudar esse parâmetro quando desejar que o sistema se adapta realocando a tabela entre a raiz e a pasta da loja.

Pergunta: Dá para manter esse esquema com o SQL?

Com certeza, meus sistemas também são mult empresas com Postgres, Mysql, e Firebird vc cria schemas com os nomes dos diretorios onde ficaram as tabelas

Link to comment
Share on other sites

Oscar,

Complementando as respostas:

1 - Realmente é possível, inclusive tem posts aqui no fórum mostrando como se faz isso;

2 - Este é um ponto crítico, pois se precisa alterar a estrutura de uma tabela significa que a modelagem de dados não foi bem definida, pois TODAS as possibilidades tem que ser checadas nessa fase. Se realmente houver a necessidade de se modificar uma tabela, isto deve ser analisado com muita cautela, pois pode ter várias implicações no teu banco de dados. É possível sim, mas vejo com muuuuuuuita cautela. Daí quando isto acontece o bom mesmo é rever toda a modelagem do banco.

3 - Se você tiver o banco remotamente (hospedado em algum provedor ou do próprio cliente mas que seja acessível via WEB) isto ocorre sem problema nenhum e com uma facilidade muito maior do que com DBF.

Só pra concluir, pensem no seguinte:

1 - DBF não é banco de dados; é um repositório, pois todo o controle de transações, índices etc, é feito no sistema.

2 - Bancos SQL contém a DDL (Data Definition Language), usando SQL e é onde você faz todas as criações / modificações possíveis mas dentro do próprio ambiente do banco.

3 - Esqueçam os métodos/jeitinhos/gambiarras que costumamos fazer com DBF; Com bancos SQL é outra história.

Link to comment
Share on other sites

bom dia pessoal tambem tenho interesse de mudar o meu sistema para sql vcs acham é interessante primeiro fazer um curso de Sql para poder migrar e se sim alguem pode indicar aqui em São Paulo

obrigado

Edutraini,

Não sou de São Paulo, mas se você puder fazer um curso de SQL, é interessante sim. Os colegas que moram em SP devem ter sugestões.

Como diz um amigo meu: "Conhecimento diminui limitações".

Link to comment
Share on other sites

Amigos, obrigado.

Segue as perguntas adicionais.

1ª) Uma grande vantagem do meu sistema é que o próprio cliente baixa-o do meu site, instala e pronto! O executável cria as tabelas, os índices e o cliente já sai usando.
Pergunta: Existe uma forma de criar um instalador que instale e configure o SQL automaticamente ou eu precisarei instalá-lo e configurá-lo para cada novo cliente? Em caso de afirmativo, ao instalar novas versões do executável, o instalador percebe que o SQL já foi configurado?

A ) Sim, tem como criar um instalador para ele instalar o Bando de dados se usar o Firebird é ainda mais fácil fazer isso pois é só Next direto, ou vc pode pegar os arquivos criar uma pasta e mandar rodar ele

B ) Realmente é possível, inclusive tem posts aqui no fórum mostrando como se faz isso;

Oscar: Vou procurar melhor no fórum para ver como se faz isso com MySQL.

2ª) Com tabelas DBF, quando eu preciso alterar alguma tabela ou criar um novo índice para atender a uma solicitação de um novo cliente, eu incluo um algoritmo no meu EXE que quando o cliente instala essa nova versão, ao acessar o sistema ele verifica todas as tabelas e se houver qualquer alteração de tamanho de campo, exclusão de campo, novo campo, novo índice, ele altera a tabela automaticamente sem perder nenhum dado.

Pergunta: Dá para ter essa flexibilidade de modificar as tabelas em tempo de execução com banco de dados SQL ou eu terei que acessar manualmente o banco de dados e alterá-lo a cada modificação necessária?

A ) Sim, eu tenho em meus sistemas uma rotina que verifica todas as tabelas se estão acessadas e compara com a estrutura da nova versão se tiver necessidade de alterar ele fará isso e se for preciso excluir o indice ou criar isso ele fará sem nenhum problema

B ) Este é um ponto crítico, pois se precisa alterar a estrutura de uma tabela significa que a modelagem de dados não foi bem definida, pois TODAS as possibilidades tem que ser checadas nessa fase. Se realmente houver a necessidade de se modificar uma tabela, isto deve ser analisado com muita cautela, pois pode ter várias implicações no teu banco de dados. É possível sim, mas vejo com muuuuuuuita cautela. Daí quando isto acontece o bom mesmo é rever toda a modelagem do banco.

Oscar: Eu preciso fazer isso porque eu tenho um único sistema que atende a vários setores e vez por outra há necessidade de ajustar o banco para atender a alguma necessidade específica de um setor. Então eu preciso que o banco se ajuste automaticamente aos novos layouts que são documentados dentro da programação.
- Vocês tem algum exemplo de como eu posso fazer isso com SQL?

3ª) Tenho clientes multi-lojas que utilizam algumas tabelas para todas as lojas e outras são separadas por loja, então, eu montei o seguinte esquema. Numa pasta raiz (C:\BD\) ficam as tabelas que são compartilhadas por todas as lojas e depois, cada loja tem a sua própria pasta (C:\BD\001, C:\BD\002, etc). O interessante é que o cliente define quais tabelas ele irá compartilhar numa tela de parâmetros e o sistema faz a separação nas pastas automaticamente. E o cliente pode mudar esse parâmetro quando desejar que o sistema se adapta realocando a tabela entre a raiz e a pasta da loja.

Pergunta: Dá para manter esse esquema com o SQL?

A ) Com certeza, meus sistemas também são mult empresas com Postgres, Mysql, e Firebird vc cria schemas com os nomes dos diretorios onde ficaram as tabelas

B ) Se você tiver o banco remotamente (hospedado em algum provedor ou do próprio cliente mas que seja acessível via WEB) isto ocorre sem problema nenhum e com uma facilidade muito maior do que com DBF.

Oscar: Vocês tem algum exemplo de como eu posso configurar o banco de dados para multi-empresas com tabelas separadas por loja conforme parametrizado pelo cliente?

Aguardo, obrigado.
Link to comment
Share on other sites

Oscar,

Vamos lá:

1 - Eu preciso fazer isso porque eu tenho um único sistema que atende a vários setores e vez por outra há necessidade de ajustar o
banco para atender a alguma necessidade específica de um setor. Então eu preciso que o banco se ajuste automaticamente aos novos layouts que são documentados dentro da programação.

- Vocês tem algum exemplo de como eu posso fazer isso com SQL?

Particularmente eu criaria um banco de dados para cada setor, para que fique bem definido o projeto para que setor funciona. Você nunca conseguirá atingir todos os setores com apenas um único banco, a não ser que na tua definição de banco de dados (modelagem) você vá definindo várias tabelas específicas para cada setor.

2 - Vocês tem algum exemplo de como eu posso configurar o banco de dados para multi-empresas com tabelas separadas por loja conforme
parametrizado pelo cliente?

O melhor exemplo que eu posso te dar, seria uma modelagem de um banco, pois é nela que eu defino nas tabelas se vai ter uma que tenha o cadastro das empresas e se for assim, todas as demais tabelas terão que ter o código dessa tabela de empresas (chave estrangeira).

Como você pode ver, tudo passa pela modelagem do banco. Pra ter um sistema eficiente usando bancos SQL, é necessário criar um projeto de banco de dados para que não seja necessário ajustar posteriormente, a não ser que haja algum erro durante o projeto.

Link to comment
Share on other sites

Bom, Oscar vou tentar passar a minha forma como eu faço


Primeiramente eu crio no meu sistema um vetor com minhas tabelas, o qual criar minhas tabelas, modficiar e acessar


exemplo:

AADD(atab,{'Usuaruio' ,'sis'}) Tabelas do Sistema

AADD(atab,{'configura' ,'sis'}) Tabelas do Sistema

AADD(atab,{'empresa' ,'sis'}) Tabelas do Sistema

AADD(atab,{'cliente' ,'emp'}) Tabelas das empresas

AADD(atab,{'fornecedor' ,'emp'}) Tabelas das empresas


o parametro 'sis' são tabelas de sistema e o parameto 'emp' são tabelas das empresas

Então quando eu crio um cadastro de uma empresa eu faço ele gerar um string tipo CNPJ+APELIDO DA EMPRESA, ficando mais ou menos assim sendo com o Firebird


EXEMPLO: dbsistema.fdb

12245424554548EMPRESA01.fdb

12245424554548EMPRESA02.fdb

12245424554548EMPRESA03.fdb


Obs: Isso também funciona para MySql e Postgres


Que será quardado da tabela EMPRESA, que criará as tabemas parametrizadas como EMP, criando um novo banco de dados que será acessado toda vez que eu selecionar a empresa x ou y

sendo que a conexão com a base de sistema ficará sempre ativa simultâneamente


quando ele for abrir as tabelas ele verificará se é SIS ele pega a conexão 1 se for EMP ele pegará a conexão 2
Link to comment
Share on other sites

Alessandro,

Pelo que entendi, eu posso criar vários bancos, abrir todos eles e em tempo de execução determinar a tabela de qual banco eu irei atualizar?

Exemplo:

BDMestre -> Clientes

BDLJJ001 -> NotasFiscais

BDLJ002 -> NotasFiscais

Abro todos os bancos em tempo de execução criar um novo registro na tabela de clientes e a nota no banco BDL001 se a loja for 001.

É isso?

Link to comment
Share on other sites

Alessandro,

Pelo que entendi, eu posso criar vários bancos, abrir todos eles e em tempo de execução determinar a tabela de qual banco eu irei atualizar?

Exemplo:

BDMestre -> Clientes

BDLJJ001 -> NotasFiscais

BDLJ002 -> NotasFiscais

Abro todos os bancos em tempo de execução criar um novo registro na tabela de clientes e a nota no banco BDL001 se a loja for 001.

É isso?

Sim.. isso mesmo!

Link to comment
Share on other sites

Instalei o MySQL seguindo com <next> até o final, só digitei a senha+confirmação.

Agora estou tentando criar um banco com o comando:

cConString1:="MySQL="+lower(ALLTRIM(cConnName)) + ";" + "UID="+lower(ALLTRIM(cConnUsrs))+ ";"+"pwd="+lower(ALLTRIM(cConnPass))+ ";" +"dtb=mysql"+";PRT=3306"
nCon1 := SR_AddConnection( CONNECT_MYSQL, cConString1 )
Deu o seguinte erro:
Aplicacao
=========
   Erro ocorrido em..: 19/02/2014 as 11:26:29 horas
   Aplicativo........: O:\SIST\WOASYS\mvend.exe
   Versao............: 19.02.2014
   Computador\Usuario: OASYS1\Oscar\ 
   Descricao do erro.: Erro SR_MYSQL/0  SQLExecDirect Error
(1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@' at line 1 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@' at line 1
Command sent to database : 
CREATE DATABASE @

Sequencia de erros
==================
   Programa: SR_MYSQL:RUNTIMEE Linha: 861
   Programa: SR_MYSQL:EXEC     Linha: 367
   Programa: CONECTAR          Linha: 3411
   Programa: SQLCONECTAR       Linha: 3366
   Programa: MAIN              Linha: 140

Avaliacao do Sistema 
=====================
   Sistema Operacional.......: Windows 8 Professional 6.02.9200 
   Memoria Fisica............: 2799547136 (2733932 megas)

Variaveis usadas
================
   Programa        Tipo Valor
   =============== ==== =====
   THROW
     Param   1:    O    Class: ERROR
     Local   1:    U    
     Local   2:    U    
   SR_MYSQL:RUNTIMEERR
     Param   1:    C    ""
     Param   2:    C    "SQLExecDirect Error
(1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@' at line 1 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@' at line 1
Command sent to database : 
CREATE DATABASE @        "
     Local   1:    O    Class: SR_MYSQL
     Local   2:    O    Class: ERROR
     Local   3:    C    "SQLExecDirect Error
(1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@' at line 1 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@' at line 1
Command sent to database : 
CREATE DATABASE @        
Steatment handle  : 
Connection handle : 
RetCode           :       1064
"
   SR_MYSQL:EXEC
     Param   1:    C    "CREATE DATABASE @        "
     Local   1:    L    .T.
     Local   2:    L    .F.
     Local   3:    U    
     Local   4:    U    
     Local   5:    U    
     Local   6:    N    99999999999999
     Local   7:    L    .F.
     Local   8:    C    "SR_RECNO"
     Local   9:    C    "SR_DELETED"
     Local  10:    U    
     Local  11:    N    0
     Local  12:    C    "01"
     Local  13:    O    Class: SR_MYSQL
     Local  14:    N    1064
     Local  15:    U    
     Local  16:    U    
     Local  17:    U    
     Local  18:    U    
     Local  19:    U    
     Local  20:    U    
     Local  21:    U    
     Local  22:    U    
     Local  23:    U    
     Local  24:    N    0
     Local  25:    U    
     Local  26:    U    
     Local  27:    U    
     Local  28:    U    
   CONECTAR
     Param   1:    C    "MYSQL"
     Param   2:    C    "@        "
     Param   3:    C    "localhost            "
     Param   4:    C    "1Q2W3E    "
     Param   5:    C    "ROOT      "
     Local   1:    C    ""
     Local   2:    C    "MySQL=localhost;UID=root;pwd=1q2w3e;dtb=mysql;PRT=3306"
     Local   3:    N    1
     Local   4:    C    ""
     Local   5:    U    
     Local   6:    L    .F.
   SQLCONECTAR
     Local   1:    O    Class: TDIALOG
   MAIN
     Local   1:    U    

RDDs ligadas
============
   SQLRDD
   SQLEX
   DBF
   DBFFPT
   DBFBLOB
   DBFCDX
   DBFNTX

Arquivos em uso
===============

Alias usados:
=============

Classes usadas:
===============
     1 ERROR
     2 HASHENTRY
     3 C Structure C Array of [2] CType: -4
     4 C Structure ULONGLONG
     5 C Structure C Array of [2] CType: 4
     6 C Structure LONGLONG
     7 C Structure C Array of [15] CType: -40
     8 C Structure EXCEPTION_RECORD
     9 C Structure C Array of [4] CType: -4
    10 C Structure CONTEXT
    11 C Structure EXCEPTION_POINTERS
    12 HBCLASS
    13 HBOBJECT
    14 TFONT
    15 TWINDOW
    16 TCONTROL
    17 TICON
    18 TBRUSH
    19 TDIALOG
    20 TRECT
    21 TSAY
    22 TCOMBOBOX
    23 TGET
    24 GET
    25 TCLIPGET
    26 TBUTTON
    27 TBUTTONBMP
    28 SR_CONNECTION
    29 SR_MYSQL
    30 SQLFASTHASH
    31 SR_WORKAREA

Analise da memoria
==================
   Memoria estatica:
      Segmento de dados.: 64k
      Tamanho inicial...: 0 bytes  (SYMP=0, Stack=0, Heap=0)
      Clipper Stack.....: 22121 bytes
      Variveis estaticas: 3101 usando 43414 bytes

   Memoria dinamica:
      Valor Atual.......: 0 bytes
      Valor Maximo......: 0 bytes

O que devo fazer?

Link to comment
Share on other sites

Estou usando o SQLRDD.

Consegui criar o banco de dados e criar uma tabela nele assim:

     MatVrf := {{"PROD      ","C",015,000},;
                {"ARQ       ","C",001,000},;
                {"TIPO      ","C",001,000},;
                {"LSTPR     ","C",005,000},;
                {"DATALT    ","D",008,000},;
                {"HORALT    ","C",008,000}}
      DbCreate("ALTPROD",MatVrf)

Mas quando eu tento abrir a tabela com:

Use ALTPROD Via SQLRDD

Dá erro irrecuperável 9003

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...