Eu continuo a falar sobre a vida com a Clarion. Neste post vou descrever minha maneira de resolver uma das tarefas mais frequentes enfrentadas pelos desenvolvedores Clarion, é a migração de programas Clarion para o SGBD SQL Miscrosoft.
Acontece que há alguns meses, 2 programas em tecnologia Clarion foram entregues a mim para manutenção, o motivo é triste, a velha geração está indo embora e foi isso que aconteceu com meu orientador científico. Por vários anos trabalhei com ele como programador na Clarion, depois perdi o interesse por essa tecnologia e nossos caminhos divergiram. E agora, após um lapso de anos, sou confrontado com a necessidade de apoiar e ocasionalmente desenvolver 2 programas.
Problemático
Na minha opinião, o principal problema e complexidade é o trabalho do programa apenas com o DBMS Clarion nativo, o acesso aos dados com esta abordagem é muito malsucedido, uma grande quantidade de código é necessária para escrever até as tarefas mais simples, que são resolvidas por enviando o mais simples Update ou Insert para o servidor no Clarion, são dezenas de linhas de código para abrir um arquivo, obter acesso ao infe e depois fechá-lo. Abaixo está um exemplo:
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
Em uma fração de segundo puxa uma tabela do csv para o SQL. Neste caso, porque as vinculações de dados já estão configuradas para IDs existentes, mas, ao mesmo tempo, o incremento automático precisa funcionar, portanto, deve ser desativado temporariamente. Também gastei muito tempo para encontrar separadores adequados:
BULK INSERT dbo.%table_name%
FROM table_name.csv WITH (
FORMAT = 'CSV',
FIELDQUOTE = '',
FIRSTROW = 1,
FIELDTERMINATOR = '0x3b',
ROWTERMINATOR = '0x0a',
CODEPAGE='65001',
TABLOCK,
KeepIdentity)
UltimateSQL e Ultimate Debug
Esses componentes permitem que você carregue dados de SQL em QUEUE desta forma:
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)
Execute consultas sem valores de retorno:
sql.Query('Update export_tasks set status_complete = 2 where id = ' & qexport_tasks.id)
Há uma ótima descrição de como usar no youtube:
Além disso, ao instalar, dentro dos templates há um “ovo de Páscoa” do autor, como resolver a quest é descrito pelo link .