Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-03-2005
arieliten arieliten is offline
Miembro
 
Registrado: mar 2005
Posts: 29
Poder: 0
arieliten Va por buen camino
Problema Principante!

Hola, tengo varias dudas y problemas que espero puedan ayudarme. Tengo una BD Interbase con dos tablas: una de peliculas y una de actores. Tambien tengo una tabla mas donde guardo la relacion "ActuaEn" que almaceno el Id_Pelicula y el Id_Actor para saber el reparto de actores de una determinada pelicula.

Ahora el problema es que cuando estoy en un formulario para insertar una pelicula, tengo todos DBEdits asociados a cada campo de la pelicula y un boton para cargar los actores. El tema es que para cargar los actores de esa pelicula no puedo hacerlo directamente ya que necesito el Id_Pelicula (que aún no tengo porque no la he insertado aún). Asi que no puedo insertar los actores directamente hasta no tener insertada la pelicula (hehco el POST de pelicula).

Ahora bien, lo que hice es hacer algo como ListBoxs donde voy cargando los actores seleccionados para esa pelicula y un array donde guardo los IDs de esos actores para luego poder almacenarlos en la tabla "Actua_En". El tema es que se me ha despelotado todo y se me complica mucho el manejo de los arrays dinamicos (errores de memoria, etc).

La pregunta es: ¿qué me recomiendan uds usar para hacer esto?
Y otra cosa: si tengo el ID autonumerico (generado por un generador) ¿como pueod averiguar cuál es el ID que le tocó al registro que toy insertando para asi luego poder usarlo en la insercion de la tabla de la relacion?

MUCHISIMAS GRACIAS si pueden ayudarme y perderme por ser tan extenso
Responder Con Cita
  #2  
Antiguo 15-03-2005
JulioGO JulioGO is offline
Miembro
 
Registrado: ago 2004
Posts: 94
Poder: 20
JulioGO Va por buen camino
Hola Arieliten:

Primeramente el Id_Pelicula deberias tenerlo desde un contador propio(sin usar ID autonumerico), lo recomendable es que crees una tabla CONTADOR y desde ahi "jales" el id a la pelicula.

Con respecto al ingreso de los datos de "ActuanEn", simplemente no uses array, pues puedes agregar un DBGrid a tu formulario y dos botones Agregar y Quitar. Al momento de pulsar el boton Agregar solo muestra un listado de los Actores, y si seleccionas un actor solo jalas el ID de la pelicula que has jalado de la tabla CONTADOR. El codigo del boton Agregar seria el siguiente:

If frmListaActores.ShowModal = mrOk then begin
ibdsActuanEn.Edit;
ibdsActuanEn.FieldValues['ID_PELICULA']:=ibdsPelicula.FieldValues['ID_PELICULA'];
ibdsActuanEn.FieldValues['ID_ACTOR']:=ibdsListaActor.FieldValues['ID_ACTOR'];
ibdsActuanEn.Post;
end;

Ojala te sirva la recomendación que te mando

Saludos.
Responder Con Cita
  #3  
Antiguo 16-03-2005
arieliten arieliten is offline
Miembro
 
Registrado: mar 2005
Posts: 29
Poder: 0
arieliten Va por buen camino
Gracias JuliGo, pero el tema es que no puedo insertar el ID_Pelicula en la tabla "Actua_En" porque todavia no inserté la pelicula en si, sino que toy llenando todos los datos. Es por eso que los actores los tengo que ir almacenando en una estructura temporal (usaré arrays?) hasta que el usuario clickee en ACEPTAR que hará el POST de todos los datos de la película y que a su vez almacenará en "Actua_En" todos los ID_Actor que tengo en el arreglo junto con el ID_Pelicula de la pelicula que insertamos.
¿La pregunta era si en vez de arrays podía usar algún comoponente que no sea de acceso directo a la BD y que funcione de manera similar un DBLookup en el sentido de que pueda mostrar algo (Nombre y APellido en este caso) pero que su valor real para usar sea otro (la KeyField seria el Id_Actor)?
¿Se entiende?
Muchas gracias.
Responder Con Cita
  #4  
Antiguo 16-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Como el programa no parece de facturación para el Corte Inglés, simplemente podrías en el OnNewRecord de la tabla peliculas hacer el post directamente.

De esta forma ya tienes el id de la pelicula, si el usuario cancela el registro, deberías eliminar ese registro, suponiendo que tienes borrado en cascada, no habría problemas.

Otra solución es mirar en una tabla de sistema (creo que era así) donde se puede comprobar el número el autoincremento. Lamento decir que no soy gurú de Firebird, lo único que he encontrado es como eliminar un generador

saludos
Responder Con Cita
  #5  
Antiguo 16-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
En cuanto a la pregunta de arrays, simplemente olvida esa "técnica", esta otra es más moderna y facil para el programador.
Código Delphi [-]

type Tactor = class(Tobject)
public
  Nombre:string;
  idActor:integer;
end;

var:
  Lista :TobjectList; // lista de objetos ... en este caso de actores
 
procedure CreaLista();
begin
  Lista := TobjectList.Create(true);
end;
procedure CreaActor();
var 
  a : Tactor;
begin
  a := Tactor.Create;
  a.nombre := 'pepe';
  a.idactor := 32;
  lista.add(a); 
end;

procedure LiberaLista;
begin
  freeandnil(Lista);//borramos la lista de memoria con todos los actores
// que tenga
end;

function ActorEstaEnLista(id:integer):boolean
var a:Tactor;
    i:integer;
begin
Result := false;
for i:=0 to lista.count-1 do
  if Tactor(lista.items[i]).idactor = id then
  begin
    Result := true;
    break;
  end;
end;

Espero que no tenga muchos fallos

Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:38:23.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi