Ich rede weiter über das Leben mit Clarion. In diesem Beitrag werde ich meine Art der Lösung einer der häufigsten Aufgaben beschreiben, mit denen Clarion-Entwickler konfrontiert sind. Es handelt sich um die Migration von Clarion-Programmen auf das Miscrosoft SQL DBMS.
So kam es, dass mir vor einigen Monaten zwei Programme zur Clarion-Technologie zum Service übergeben wurden. Der Grund ist traurig, die alte Generation geht, und genau das ist meinem wissenschaftlichen Berater passiert. Ich habe mehrere Jahre als Programmierer bei Clarion mit ihm zusammengearbeitet, dann das Interesse an dieser Technologie verloren und unsere Wege gingen auseinander. Und jetzt, nach einigen Jahren, stehe ich vor der Notwendigkeit, zwei Programme zu unterstützen und gelegentlich zu entwickeln.
Problematisch
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
In Sekundenbruchteilen zieht eine Tabelle von CSV in SQL. In diesem Fall, weil Datenbindungen sind bereits für vorhandene IDs konfiguriert, aber gleichzeitig muss die automatische Inkrementierung funktionieren, sodass sie vorübergehend deaktiviert werden muss. Außerdem habe ich viel Zeit damit verbracht, geeignete Trennzeichen zu finden:
BULK INSERT dbo.%table_name%
FROM table_name.csv WITH (
FORMAT = 'CSV',
FIELDQUOTE = '',
FIRSTROW = 1,
FIELDTERMINATOR = '0x3b',
ROWTERMINATOR = '0x0a',
CODEPAGE='65001',
TABLOCK,
KeepIdentity)
UltimateSQL & Ultimate Debug
Mit diesen Komponenten können Sie Daten aus SQL wie folgt in QUEUE laden:
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)
Abfragen ohne Rückgabewerte ausführen:
sql.Query('Update export_tasks set status_complete = 2 where id = ' & qexport_tasks.id)
Es gibt eine großartige Beschreibung der Verwendung auf Youtube:
Bei der Installation befindet sich in den Vorlagen ein "Osterei" des Autors. Wie Sie die Quest lösen, wird durch den Link beschrieben .