Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-11-2006
aladelta aladelta is offline
Miembro
 
Registrado: jul 2003
Posts: 70
Poder: 24
aladelta Va por buen camino
Buenos dias...

Asi lo hago, a traves de un triggers de la base de datos, entonces debo entender que el campo indice primario cuando lo tengo en un dbgrid o edito la tabla directamente, al insertar lo haga desde el mdodataset y cuando son master/Detail, en los detail lo haga desde un triggers para eviar el null contagioso??....
Responder Con Cita
  #2  
Antiguo 03-11-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
Cita:
Empezado por aladelta
Asi lo hago, a traves de un triggers de la base de datos, entonces debo entender que el campo indice primario cuando lo tengo en un dbgrid o edito la tabla directamente, al insertar lo haga desde el mdodataset
Los componentes TMDOQuery y TMDODataset tienen la propiedad GeneratorLink, con la que delegas a MDO la gestión de la asignación de una llave basada en un generador, con la ventaja que al hacerlo del lado de delphi, evitaras el efecto que tenías.

Cita:
Empezado por aladelta
y cuando son master/Detail, en los detail lo haga desde un triggers para eviar el null contagioso??....
Esto si no lo entendí... cuando son master detail, normalmente asigno su campo de relación con el maestro en el evento OnNewRecord, pero no se si es a lo que te referís.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 03-11-2006
aladelta aladelta is offline
Miembro
 
Registrado: jul 2003
Posts: 70
Poder: 24
aladelta Va por buen camino
Hola a todos...

No sabia lo de la propiedad generatorlink de los mdo, voy a investigar pues me parece buena idea la de generar desde delphi el campo indice en vez de la tabla....yo estaba maquinando algo parecido, pensando en un procedimiento de la bd que me genere el id y lo devuelva al delphi para añadir el registro, vamos algo parecido al gen_id pero en vez de hacerlo en la bd hacerlo en delphi, sin usar triggers para esos campos...

Y si que me refiero a los campos de relacion entre tablas cuando son master/Detail y en relacion a lo anterior aqui en vez de usar el onnewrecord que me parece muy bien, voy a intentar hacerlo en un trigger en la maestro para generar el registro en la detalle. a ver que tal...

Gracias por todo...
Responder Con Cita
  #4  
Antiguo 04-11-2006
aladelta aladelta is offline
Miembro
 
Registrado: jul 2003
Posts: 70
Poder: 24
aladelta Va por buen camino
Hola de nuevo...

jachguate, ya he progado el generatorlink y funciona todo muy bien, como estaba previsto, al insertar ya lo veo al instante en el grid, pero ¿como hacer si usas mas de un generador en la misma tabla cuando tienes varios campos clave?...aunque observo un detalle, y es que al crear un registro nuevo, y estando "order by campo" en la selectsql, lo inserta donde le parece, nunca en el orden establecido....¿que te parece?

Gracias
Responder Con Cita
  #5  
Antiguo 04-11-2006
aladelta aladelta is offline
Miembro
 
Registrado: jul 2003
Posts: 70
Poder: 24
aladelta Va por buen camino
Hola otra vez

al hacer en el evento afterpost del mdodataset un commitretainig y despues un last, funciona de muerte....ya que el registro que se esta insertando debe de estar al final de la lista ordenada...solo queda estudiar como hacer para que varios generadores se activen al crear un registro y todo desde delphi

Hasta luego...
Responder Con Cita
  #6  
Antiguo 04-11-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
Cita:
Empezado por aladelta
al hacer en el evento afterpost del mdodataset un commitretainig y despues un last, funciona de muerte....ya que el registro que se esta insertando debe de estar al final de la lista ordenada...
Por favor, no abuses del commitretaining, tiene implicaciones con el desempeño de la base de datos. Es mejor hacer un commit completo siempre que se pueda.

Cita:
Empezado por aladelta
solo queda estudiar como hacer para que varios generadores se activen al crear un registro y todo desde delphi
No hay forma que yo conozca de que MDO lo maneje automáticamente, sin embargo podes hacer lo vos fácilmente:

Código Delphi [-]
procedure TForm1.mdoquery1BeforePost(Sender: TDataSet);
begin
  if MDOQuery1.state = dsInsert then
    with TMDOQuery.Create(nil) do
      try
        Database := MDODatabase1;
        SQL.Text := 'select gen_id(generador, 1) from rdb$database';
        Open;
        MDOQuery1Campo2.AsInteger := Fields[0].AsInteger;
      finally
        free;
      end;
end;

La idea es esa...

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
alguien ha utilizado Firebird DDX provider? (conectarse con db en firebird!) JuanErasmo .NET 1 04-11-2006 16:17:12
como actualizar firebird 1.5 a firebird 2.0 cidarta Firebird e Interbase 3 26-04-2006 08:57:07
Firebird : Llamado para probadores de Firebird 2.0 JOSEPE Firebird e Interbase 0 12-03-2005 20:33:18
Problemas Firebird Super Server 1.5 con RFunc Firebird v 1.0 Prophoenix Firebird e Interbase 1 09-03-2004 11:40:48


La franja horaria es GMT +2. Ahora son las 12:22:59.


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