クラリオン。ClarionアプリケーションのMicrosoftSQL2019への移行プロセス

私はクラリオンとの生活について話し続けています。この投稿では、Clarion開発者が直面する最も頻繁なタスクの1つを解決する方法について説明します。それは、ClarionプログラムのMiscrosoft SQLDBMSへの移行です。





たまたま数ヶ月前、クラリオン技術に関する2つのプログラムがサービスのために私に引き渡されました。理由は悲しいです。古い世代は去っていきます。これが私の科学顧問に起こったことです。数年間、私はクラリオンでプログラマーとして彼と一緒に仕事をしましたが、その後、このテクノロジーへの興味を失い、私たちの道は分岐しました。そして今、何年も経った今、私は2つのプログラムをサポートし、時には開発する必要に直面しています。





問題がある

Clarion, , , Update Insert Clarion , . :





       Access:Agent.Open 					! 
       Access:Agent.UseFile				! 
       clear(AGN:Record)					!     
       AGN:ID_AGENT = some_id 		!  
       set(AGN:BY_ID,AGN:BY_ID)		! ""    
       next(agent)								!     
       IF errorcode() or AGN:ID_AGENT <> some_id	!       
            RETVAL = '  '				! 
          ELSE													
            RETVAL = AGN:N_AGENT									!  
       .								
       Access:Agent.Close												  ! 
      
      



, , " " "" . . SQL :





select agent.name where id = some_id
      
      



, " 1 ", , SQL, SQL . , SQL SQL.









: 80





: 250





: + ( )





:





3





5 -









  • DCT2SQL





  • Cldump





  • BULK insert





  • UltimateSQL & Ultimate Debug





, , . . post dat .





DCT2SQL

Dictionary SQL, , foreign keys. , . .





Github





youtube . SQL.





CLDUMP

*.dat csv BULK. - . 10 15-20 . , Linux, debian. -, post , csv .





, "" , , , "" . " " " ". . , , "".





cldump debian :





apt-get install cldump
      
      



BULK insert

ほんの一瞬で、テーブルをcsvからSQLにプルします。この場合、データバインディングは既存のIDに対してすでに構成されていますが、同時に自動インクリメントが機能する必要があるため、一時的に無効にする必要があります。また、適切なセパレーターを見つけるためにかなりの時間を費やしました。





BULK INSERT dbo.%table_name%
FROM table_name.csv WITH ( 
FORMAT = 'CSV', 
FIELDQUOTE = '', 
FIRSTROW = 1, 
FIELDTERMINATOR = '0x3b', 
ROWTERMINATOR = '0x0a', 
CODEPAGE='65001',
TABLOCK, 
KeepIdentity)
      
      



UltimateSQLとUltimateDebug

これらのコンポーネントを使用すると、次のようにSQLからQUEUEにデータをロードできます。





SQL_Result = sql.query('
select id, path_to_result 
from dbo.export_tasks as et 
where 
(status_complete = 0 or status_complete = 2) 
and export_table_id = '& exp:id
,qexport_tasks)
      
      



戻り値なしでクエリを実行します。





sql.Query('Update export_tasks set status_complete = 2 where id = ' & qexport_tasks.id)
      
      



YouTubeでの使用方法についてのすばらしい説明があります:





また、インストール時に、テンプレート内に作者からの「イースターエッグ」があり、クエストを解決する方法はリンクで説明されています。








All Articles