Je continue à parler de la vie avec Clarion. Dans cet article, je décrirai ma façon de résoudre l'une des tâches les plus fréquentes auxquelles sont confrontés les développeurs Clarion, c'est la migration des programmes Clarion vers le SGBD Miscrosoft SQL.
Il se trouve qu'il y a quelques mois, 2 programmes sur la technologie Clarion m'ont été remis pour service, la raison est triste, l'ancienne génération s'en va, et c'est ce qui est arrivé à mon conseiller scientifique. Pendant plusieurs années j'ai travaillé avec lui en tant que programmeur chez Clarion, puis j'ai perdu tout intérêt pour cette technologie et nos chemins ont divergé. Et maintenant, après quelques années, je suis confronté à la nécessité de soutenir et de développer occasionnellement 2 programmes.
Problématique
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. , . .
youtube . SQL.
CLDUMP
*.dat csv BULK. - . 10 15-20 . , Linux, debian. -, post , csv .
, "" , , , "" . " " " ". . , , "".
cldump debian :
apt-get install cldump
BULK insert
En une fraction de seconde, extrait une table de csv dans SQL. Dans ce cas, parce que les liaisons de données sont déjà configurées pour les identifiants existants, mais en même temps l'incrémentation automatique doit fonctionner, elle doit donc être temporairement désactivée, j'ai également passé beaucoup de temps à trouver des séparateurs appropriés:
BULK INSERT dbo.%table_name%
FROM table_name.csv WITH (
FORMAT = 'CSV',
FIELDQUOTE = '',
FIRSTROW = 1,
FIELDTERMINATOR = '0x3b',
ROWTERMINATOR = '0x0a',
CODEPAGE='65001',
TABLOCK,
KeepIdentity)
UltimateSQL et Ultimate Debug
Ces composants vous permettent de charger des données de SQL dans QUEUE comme ceci:
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)
Exécutez des requêtes sans valeurs de retour:
sql.Query('Update export_tasks set status_complete = 2 where id = ' & qexport_tasks.id)
Il y a une excellente description de la façon d'utiliser sur youtube:
De plus, lors de l'installation, à l'intérieur des modèles, il y a un "œuf de Pâques" de l'auteur, comment résoudre la quête est décrit par le lien .