Tenho a tarefa de converter um aplicativo Clarion antigo em um novo no SQL Server 2012.
Tudo o que tenho são 200 mesas com extensão TPS que só consigo abrir pelo programa chamado TopScan. (Sem odbc, sem documentação técnica, sem suporte).
Estou fazendo um programa C# que vai extrair dados para SQL.
Estrutura de dados que posso ver em textos como este
FILE,DRIVER('TOPSPEED'),NAME('C:\bIRA2013\BIRA_ARHIMED\PART.TPS')
PART:K_SIFPAR KEY(+PART:SIFPAR),NOCASE,PRIMARY
PART:K_ZIRO KEY(+PART:ZIRO),DUP,NOCASE
PART:K_NAZIV1 KEY(+PART:NAZIV1),DUP,NOCASE
PART:K_GRUPA KEY(+PART:GRUPA),DUP,NOCASE
PART:K_PORBR KEY(+PART:PORBR),DUP,NOCASE
PART:K_KOMER_SIFPAR KEY(+PART:KOMER,+PART:SIFPAR),DUP,NOCASE
PART:K_BANKA_SIFPAR KEY(+PART:BANKA,+PART:SIFPAR),DUP,NOCASE
PART:K_GRAD_SIFPAR KEY(+PART:GRAD,+PART:SIFPAR),DUP,NOCASE
PART:K_NACPL_SIFPAR KEY(+PART:NACPL,+PART:SIFPAR),DUP,NOCASE
PART:K_NACPLD_SIFPAR KEY(+PART:NACPLD,+PART:SIFPAR),DUP,NOCASE
PART:OPIS MEMO(2000)
RECORD RECORD
PART:SIFPAR STRING(10)
PART:ZIRO STRING(20)
PART:PORBR STRING(13)
PART:PORBRBIH STRING(10)
PART:NAZIV1 STRING(40)
PART:NAZIV2 STRING(40)
PART:GRUPA STRING(10)
PART:KUP STRING(2)
PART:DOB STRING(2)
PART:ADRESA STRING(30)
PART:GRAD STRING(25)
PART:PBROJ STRING(5)
PART:TEL1 STRING(15)
PART:TEL2 STRING(15)
PART:FAX STRING(15)
PART:OSOBA STRING(30)
PART:RABAT DECIMAL(5,2)
PART:RABATD DECIMAL(5,2)
PART:CASSA DECIMAL(5,2)
PART:CASSAD DECIMAL(5,2)
PART:NACPL STRING(2)
PART:NACPLD STRING(2)
PART:KOEF DECIMAL(5,4)
PART:DVO LONG
PART:BANKA STRING(6)
PART:VEZDOK STRING(10)
PART:IZJAVA STRING(10)
PART:KOMER STRING(3)
PART:EMAIL STRING(40)
PART:WWW STRING(60)
PART:ID STRING(2)
PART:D LONG
END
END
Acho que as ROWS entre RECORD e END representam a estrutura da tabela. Quando percorro todas as tabelas, encontro os seguintes tipos de dados como na lista
STRING(10) --many sizes (10,20,100,200)
CSTRING(256) --many sizes (2000,3000)
LONG
DECIMAL(7,4)
BYTE
REAL
GROUP
Como devo mapear esses tipos para os tipos do SQL Server?
Pra mim DECIMAL
é só golpe direto, mas não tenho tanta certeza nem disso.
Por que estou tão confuso é que não consigo encontrar o tipo correspondente para DATE
.
Sub questão é, como Clarion mantém datas em tabelas?
Pessoalmente, eu compraria o driver odbc e importaria todos os arquivos com o assistente SQL http://www.softvelocity.com/drivers/tsodbc.htm
Tarefa difícil.
Eu assumiria o pior e criaria:
Depois disso, você terá que examinar os dados em cada coluna individualmente e tomar decisões sobre suas descobertas.
As datas podem ser armazenadas como strings. (MS também é culpado disso em TypePerf.)
As datas nos arquivos Clarion TPS são armazenadas como um Clarion Long, que é um número inteiro. Eles são definidos como o número de dias decorridos desde 28 de dezembro de 1800. O intervalo de data padrão Clarion válido é 1º de janeiro de 1801 a 31 de dezembro de 9999
27 de fevereiro de 2015 - a data em que Nimoy morreu - é a data Clarion 78.223.
Uma String Clarion é um CHAR. Um Clarion Cstring é um VARCHAR - note: CString(21) = Varchar(20)