Página 1 de 1

Optimizar actualizaci

Publicado: Vie May 21, 2010 12:11 pm
por Karl Svensson
Necesito crear una tabla SQLLite desde un dbf con 50000 registros, y busco
la manera más eficiente y rápida.
1- ¿Hay alguna instrucción SQL tipo Append From ?
2- ¿Creo 2 datasets y recorro cada registro y campo?
3- ¿ oDataSet:AddNew o Execute("INSERT...") ?
Gracias de antemano
Karl Svensson

Optimizar actualizaci

Publicado: Vie May 21, 2010 5:11 pm
por jfgimenez
Karl,
> Necesito crear una tabla SQLLite desde un dbf con 50000 registros, y busco
> la manera más eficiente y rápida.
>
> 1- ¿Hay alguna instrucción SQL tipo Append From ?
No, aunque el IDE sí­ trae una utilidad que lo hace. Abre el gestor de bases
de datos sqlite (en el menú "Base de datos", "Explorar SQLite..."); la
utilidad que digo es el cuarto botón de la toolbar.
> 2- ¿Creo 2 datasets y recorro cada registro y campo?
Funciona, pero es lento.
> 3- ¿ oDataSet:AddNew o Execute("INSERT...") ?
Siempre es más rápido usar Execute() con las sentencias exactas que
necesitas. Y asegúrate de que haces toda la importación en una transacción,
que es como SQLite va rápido de verdad.
Lo mejor es que utilices una rutina de esta forma:
USE fichero
WITH OBJECT oDataSource
:BeginTrans()
cSql := "INSERT INTO tabla( campo1, campo2, campo3 ) VALUES ( ?, ?,
? )"
WHILE !Eof()
:Execute( :BuildSqlSt( cSql, fichero->campo1, fichero->campo2,
fichero->campo3 ) )
SKIP
ENDDO
:CommitTrans()
END
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info

Optimizar actualizaci

Publicado: Vie May 21, 2010 5:36 pm
por Karl Svensson
Muchas gracias, lo probare.
Aunque he encontrado un comando interno del programa sqlite3 que ejecuto
desde el shell de sistema
sqlite3 -csv base.db ".import datos.csv tabla"
y va que vuela!
Karl
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:4bf6a297$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Karl,
>
>> Necesito crear una tabla SQLLite desde un dbf con 50000 registros, y
>> busco la manera más eficiente y rápida.
>>
>> 1- ¿Hay alguna instrucción SQL tipo Append From ?
>
> No, aunque el IDE sí trae una utilidad que lo hace. Abre el gestor de
> bases de datos sqlite (en el menú "Base de datos", "Explorar SQLite...");
> la utilidad que digo es el cuarto botón de la toolbar.
>
>
>> 2- ¿Creo 2 datasets y recorro cada registro y campo?
>
> Funciona, pero es lento.
>
>
>> 3- ¿ oDataSet:AddNew o Execute("INSERT...") ?
>
> Siempre es más rápido usar Execute() con las sentencias exactas que
> necesitas. Y asegúrate de que haces toda la importación en una
> transacción, que es como SQLite va rápido de verdad.
>
> Lo mejor es que utilices una rutina de esta forma:
>
> USE fichero
> WITH OBJECT oDataSource
> :BeginTrans()
> cSql := "INSERT INTO tabla( campo1, campo2, campo3 ) VALUES ( ?, ?,
> ? )"
> WHILE !Eof()
> :Execute( :BuildSqlSt( cSql, fichero->campo1, fichero->campo2,
> fichero->campo3 ) )
> SKIP
> ENDDO
> :CommitTrans()
> END
>
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info