Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

SQL insert masivo en una sola consulta?

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: SQL insert masivo en una sola consulta? Responder citando

Hola gente, tengo una duda. Tengo una rutina que recorre un StringGrid (de donde saco los datos) y los va insertando en una tabla de Firebird.

Lo hace fila a fila. Pero hace lo hace asi
Prepara la sentencia en un AnsiString SQL.
activo la transacción
agrego la sentencia al IBQuery

IBQuery->Prepare();
IBQuery->ExecSQL();
IBTransaction1->CommitRetaining();

pero esto se hace cada vez que leo una fila del StrinGrid.
(osea que todo eso esta dentro del siclo for que recorre el StringGrid)

Hay alguna manera mas eficiente de Preparar las inserciones y hacerlas todas en una sola transacción?

Gracias

Uso Firebird 2.0, CodeGear 2007. bajo Windows.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Si el INSERT no es a partir de otra tabla, hay que ir fila por fila.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola Schweiko, deberías preparar la consulta solo una vez y usar transacciones explicitas. Mas información en el libro "La cara oculta de c++ builder" pag 416.

saludos tor
_________________
Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr)
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

es lo que estoy haciendo. pero quisiera saber si el Transaction->CommitRetaining(); se coloca dentro del ciclo (for en mi caso, while en el ejemplo que me mencionaste) o lo pongo fuera del ciclo.

Un abrazo, gracias por la respuesta.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola Schweiko, sin animo de ofender creo que te lleva mas tiempo escribir la pregunta que correr la linea de código y probar vos mismo los resultados.
Si no funciona debería saltar una excepción o los datos no se graban etc.

Lamentablemente yo no estoy usando mas C++ Builder, para contrastar tiempos, pero si esa es la idea, realizar un solo commit luego de insertar una gran cantidad de datos, generalmente se fragmenta la cantidad de registros a insertar, por si ocurre algún error.

saludos
_________________
Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr)
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.