| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Schweiko Lt JG

Registrado: 05 Jun 2008Mensajes: 65Ubicación: Argentina - Misiones
|
Publicado: Mie 15 Dic, 2010 9:13 pm Asunto: SQL insert masivo en una sola consulta? |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Tor Master


Registrado: 22 Mar 2005Mensajes: 269Ubicación: obera, misiones, argentina
|
Publicado: Sab 18 Dic, 2010 6:58 pm Asunto: |
|
|
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 |
|
 |
Schweiko Lt JG

Registrado: 05 Jun 2008Mensajes: 65Ubicación: Argentina - Misiones
|
Publicado: Sab 18 Dic, 2010 7:37 pm Asunto: |
|
|
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 |
|
 |
Tor Master


Registrado: 22 Mar 2005Mensajes: 269Ubicación: obera, misiones, argentina
|
Publicado: Dom 19 Dic, 2010 5:52 am Asunto: |
|
|
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 |
|
 |
|