web-dev-qa-db-ja.com

SQLと最高速度のClarionテーブルの間で列タイプをマップするのを手伝ってください

SQL Server 2012で、古いクラリオンアプリを新しいアプリに変換する必要があります。

私が持っているのは、TopScanと呼ばれるプログラムによってのみ開くことができるTPS拡張機能を備えた200のテーブルだけです。 (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

これらのタイプをSQLServerタイプにマップするにはどうすればよいですか?

私にとってDECIMALは直撃のみですが、それでもそれほど自信はありません。

私がとても困惑しているのは、DATEに対応するタイプが見つからないためです。

サブ質問は、クラリオンがテーブルに日付を保持する方法は?

2
adopilot

Clarion TPSファイルの日付は、整数であるClarionLongとして保存されます。これらは、1800年12月28日から経過した日数として定義されます。有効なクラリオン標準日付範囲は、1801年1月1日から9999年12月31日までです。

2015年2月27日-ニモイが亡くなった日付-はクラリオンの日付78,223です。

クラリオン文字列はCHARです。 Clarion CstringはVARCHARです-注:CString(21)= Varchar(20)

1
riffrazor

個人的には、odbcドライバーを購入し、SQLウィザードを使用してすべてのファイルをインポートします http://www.softvelocity.com/drivers/tsodbc.htm

4
Benoit

大変な作業です。

私は最悪の事態を想定して作成します:

  • strings(x)as nvachar(x)
  • BigIntである限り
  • Dec(x、x)as Dec(x、x)

その後、各列のデータを個別に確認し、調査結果を決定する必要があります。

日付は文字列として保存される場合があります。 (MSはTypePerfでもこれについて有罪です。)

2
Dennis Post