Ir al contenido


Foto

Inserción múltiple según selección

insert consulta multiple

  • Por favor identifícate para responder
7 respuestas en este tema

#1 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 24 julio 2015 - 05:29

Hola, quiero mejorar el alta de articulos de un sistema hecho para un local de ropa.

trabajo con Lazarus y Firebird 2.5

 

Cada articulo esta formado por varios campos de otras tablas, para generalizar supongamos:

Tabla A (50 opciones)

Tabla B (50 opciones)

Tabla C (50 opciones)

Tabla D (50 opciones)

Tabla E (50 opciones)

 

Ahora bien, dado el ingreso de un nuevo articulo que viene con 5 opciones de cada una de estas tablas, deberia crear e insertar estos nuevos articulos (para el ejemplo serian 3125 en total).

 

- todos los campos son obligatorios.

- un ejemplo seria:

tabla A opcion1

tabla B opcion1

tabla C opcion50

tabla D opcion4

tabla E opcion33

 

Podria usar un TDBlistbox para tomar las opciones y luego llamarlos desde un SP,  aunque me cuesta entender como llamar varias tablas.

 

¿Ideas?

 

gracias

 

 

 

 

 


  • 0

#2 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 24 julio 2015 - 10:21

Pero que típo de info tenés en esas tablas??

Controles hay muchos para usar, desde grids, combobox, treeview, listbox, listview...

En realidad no entendi bien tu duda, es un problema de diseño de interfaz o como traer los datos de la BD?
  • 1

#3 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 25 julio 2015 - 06:26

Pero que típo de info tenés en esas tablas??

Controles hay muchos para usar, desde grids, combobox, treeview, listbox, listview...

En realidad no entendi bien tu duda, es un problema de diseño de interfaz o como traer los datos de la BD?

 

Me exprese peor de lo que pensaba.

 

Mi problema seria: la forma de realizar una insercion masiva con las combinaciones que elija

 

Ejemplo, si elijo:

Tabla A (opciones A1 y A2)

Tabla B (opciones B1)

Tabla C (opciones C1)

Tabla D (opciones D1)

Tabla E (opciones E22 y E50)

 

Los articulos creados deberian ser:

 

- A1 B1 C1 D1 E22

- A2 B1 C1 D1 E50

- A1 B1 C1 D1 E22

- A2 B1 C1 D1 E50

 

¿Me explique mejor?


  • 0

#4 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 25 julio 2015 - 06:51

¿ Como te manejas con procedimientos almacenados ?

 

Esto lo puedes hacer con un procedimiento almacenado que tenga 5 bucles encadenados. Es decir para cada opción de Tabla 1, recorres cada opció de Tabla 2, recorres cada opción de Table 3, .... y para cada iteración creas un registro.

 

El procedimiento almacenado tendría cinco parámetros, para indicar los valores seleccionados para cada tabla. El problema es que en cada parámetro aparentemente quieres poder indicar más de un valor, y Firebird no tiene un tipo que lo permita.

 

Personalmente pondría los parámetros de tipo cadena, y separaría los valores con un carácter conocido, como #

 

Es decir, en el ejemplo que pusiste :

 

Param_A : 'A1#A2'

Param_B : 'B1'

Param_C : 'C1'

Param_D : 'D1'

Param_E : 'E22#E50'

 

Para poder hacer el recorrido entre los valores pasados en un parámetro, tienes que hacer el recorrido de la cadena y cuando encuentras el carácter # es que estás tratando un nuevo valor.

 

Saludos.


  • 1

#5 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 25 julio 2015 - 06:54

Por cierto, probablemente sea bastante más rápido hacer los recorridos entre las opciones escogidas para cada Tabla desde Delphi, lanzando directamente cada una de las inserciones.

 

Es decir, que Firebird solo tenga que tratar con cada inserción individual, mientras que el cálculo de las distintas posibilidades a insertar lo haces en Delphi (te va a resultar bastante más cómodo, a menos que tengas mucha soltura con el lenguaje de procedimientos almacenados de Firebird).


  • 1

#6 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 mensajes
  • LocationMisiones, Argentina

Escrito 25 julio 2015 - 10:23

¿Lo que quieres es crear una base de datos de prueba?

Me refiero a tenner lista una base de datos para que un cliente pueda probar el programa con datos funcionales pero ficticios.


  • 1

#7 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 25 julio 2015 - 12:13

Leyendo los posts de Marc, le encontre la solucion, seria armar una tabla temporal con las opciones y llamarla desde un SP para hacer las inserciones.

La GTT solo deberia tener los IDs de las opciones.

 

gracias.


  • 0

#8 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 25 julio 2015 - 12:29

Leyendo los posts de Marc, le encontre la solucion, seria armar una tabla temporal con las opciones y llamarla desde un SP para hacer las inserciones.

La GTT solo deberia tener los IDs de las opciones.

 

gracias.

 

Si, es una muy buena solución, yo también la utilizo a veces. Había pensado proponertelo, pero pensé que aún te confundiría más.


  • 0





Etiquetado también con una o más de estas palabras: insert, consulta, multiple

IP.Board spam blocked by CleanTalk.