我的任务是在 SQL Server 2012 下将旧的 Clarion App 转换为新的。
我只有 200 个带有 TPS 扩展名的表,我只能通过名为 TopScan 的程序打开它们。(没有 odbc,没有技术文档,没有支持)。
我正在制作一个将数据提取到 SQL 的 C# 程序。
我可以在这样的文本中看到的数据结构
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
我认为 RECORD 和 END 之间的 ROWS 代表表的结构。当我浏览所有表格时,我发现列表中的以下数据类型
STRING(10) --many sizes (10,20,100,200)
CSTRING(256) --many sizes (2000,3000)
LONG
DECIMAL(7,4)
BYTE
REAL
GROUP
我应该如何将这些类型映射到 SQL Server 类型?
对我DECIMAL
来说只是直接命中,但我什至对此都不太放心。
为什么我这么困惑是因为我找不到对应的类型DATE
。
子问题是,Clarion 如何在表中保存日期?
就个人而言,我会购买 odbc 驱动程序并使用 SQL 向导导入所有文件 http://www.softvelocity.com/drivers/tsodbc.htm
艰巨的任务。
我会假设最坏的情况并创建:
之后,您必须单独查看每一列中的数据并根据您的发现做出决定。
日期可能存储为字符串。(MS 在 TypePerf 中也犯了这个错误。)
Clarion TPS 文件中的日期存储为 Clarion Long,这是一个整数。它们被定义为自 1800 年 12 月 28 日以来经过的天数。有效的 Clarion 标准日期范围是 1801 年 1 月 1 日到 9999 年 12 月 31 日
2015 年 2 月 27 日——Nimoy 去世的日期——是号角日期 78,223。
Clarion String 是一个 CHAR。Clarion Cstring 是 VARCHAR - 注意:CString(21) = Varchar(20)