![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
La razón por la que hay que añadir esos tres espacios es para que las cadenas sean todas de la misma longitud. En caso contrario Firebird 1.5 no sabe que tipo debe ser el resultado de la unión.
Una forma más fácil de entender (aunque más larga de escribir) es hacerlo así : INSERT INTO table1 (col1, col2) SELECT 10, cast('ten' as varchar(20)) FROM RDB$DATABASE UNION ALL SELECT 11, cast('eleven' as varchar(20)) FROM RDB$DATABASE UNION ALL SELECT 12, cast('twelve' as varchar(20)) FROM RDB$DATABASE;
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#2
|
||||
|
||||
Exactamente guillotmarc, exactamente.
Saludos.
__________________
Uno es responsable de lo que hace y de lo que omite hacer. |
#3
|
||||
|
||||
Pues Santiago, creo que al olvidado la Ley de Costo-Beneficio. Una consulta bien hecha, con parámetros y preparada no va a significar mucha diferencia con respecto a una una inserción masiva. Sin embargo, acabo de imaginar la siguiente técnica: Pasar en formato CSV los valores a insertar a un procedimiento almacenado. Éste último se encargará se hacer las respectivas inserciones. Esta técnica no es muy practica y puede que valga la pena aplicarla si es que necesitas de estás inseciones masivas en un numero limitado de casos.
Saludos. |
#4
|
||||
|
||||
![]() Habría que hacer algunas pruebas, pero creo que una inserción masiva es mas eficiente que un for con un insert unitario que vaya metiendo datos en la BD. Vuelvo a insistir, en una LAN la diferencia es mínima, pero si se quiere hacer algo mayor, digamos con Internet en el medio, es diferente.
__________________
Uno es responsable de lo que hace y de lo que omite hacer. |
#5
|
||||
|
||||
Hola santiago14, yo tambien tenía un inconveniente de ese tipo y mi solución fue sencilla.
si me cuentas qué componentes utilizas podría ayudarte. GustavoCruz |
#6
|
||||
|
||||
Cita:
Utilizo Delphi 7, Firebird 1.5 (estoy pasándome al 2.1), MDO la última versión que hay. Para las grillas uso StringGrid y NextGrid. ¿Necesitas saber algo mas? Saludos.
__________________
Uno es responsable de lo que hace y de lo que omite hacer. |
#7
|
||||
|
||||
Gustavo, quedaste en contestarme... Saludos.
__________________
Uno es responsable de lo que hace y de lo que omite hacer. |
#8
|
|||
|
|||
Bueno, ya me di cuenta que este tema se agotó hace un rato, pero me sirvió para lo que estoy haciendo: cargo una lista de 3.000.000 de códigos de 8 caracteres contenidos en un archivo txt. Cada código es una línea que termina con CR LF. Leer el archivo lo hice con TFileStream, y eso funciona a la perfección. Mi problema ha sido la inserción de cada código en una base Firebird, usando las ZLib (Delphi 7), con tres campos, el código mismo (como llave única), un entero de estado, y un entero identificador (correlativo).
Al principio use un ZTable y AppendRecord dentro de un bucle <for i:= 1 to TXT.Size> ... funcionaba bien con una prueba de 1000 registros, pero con 100.000 ya empezaba a inquietar al más paciente, ni les digo con tres millones: medí como dos horas, y aún no terminaba. Buscando otros métodos dí con este blog y el insert masivo. Mi base de datos es Firebird 2.1 así que utilicé la forma EXECUTE BLOCK AS BEGIN INSERT INTO table1 (col1, col2) VALUES (2, 'two'); INSERT INTO table1 (col1, col2) VALUES (4, 'four'); INSERT INTO table1 (col1, col2) VALUES (5, 'five'); END Reemplacé el ZTable por ZQuery, agregando un INSERT en el SQL.Text por cada registro La única dificultad es que el bloque sólo acepta 255 INSERT, así que en mi bucle ejecuto el query cada 200 registros, entonces reinicio el SQL.Text. O sea, inserto los registros en bloques de 200. Con esto logré reducir el tiempo de a 25 minutos... no será una maravilla, pero es bastante mejor de lo que tenía. Decidí escribir este post, por si a alguien le sirve de utilidad. Y si saben como hacerlo todavía mejor, agradecería una sugerencia. Saludos |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Insert masivo en firebird | santiago14 | Firebird e Interbase | 2 | 24-05-2010 02:50:29 |
Envio masivo de mensajes via web | supermanpy | Varios | 5 | 08-05-2010 19:00:26 |
Update Masivo... | BlueSteel | SQL | 9 | 30-10-2007 17:11:59 |
upload masivo | kayetano | PHP | 12 | 06-12-2006 16:45:39 |
Traspaso masivo de datos .DBF | eibarra | Conexión con bases de datos | 1 | 06-04-2005 16:06:59 |
![]() |
|