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
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Optimizar actualizaci
-
- Mensajes: 81
- Registrado: Mar Oct 18, 2005 7:20 pm
Optimizar actualizaci
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
> 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
-
- Mensajes: 81
- Registrado: Mar Oct 18, 2005 7:20 pm
Optimizar actualizaci
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
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