Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-03-2009
Avatar de Vlady
Vlady Vlady is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 19
Vlady Va por buen camino
Concurrencia en ClientDataset

Hola amigos del club delphi tengo dos tablas conectadas maestro detalle en undos clientdataset el problema que tengo es q cuando dos usuarios estan trabajando en red yo tomo el id del documento mendiante una consulta sql preguntando el maximo numero a la base de datos el problema radica en q si otro usuario tambien esta creando otro ducumento el id del primero se pierde y el documento queda grabado en el insert del segundo es decir la llave primaria de uno de los documentos se pierde y todo queda en el ultimo documento que se grave, la llave primaria la consulta mediante la siguiente sentencia en el evento newrecord de la tabla maestro,

Código SQL [-]

 Buscar.Close;
    Buscar.SqL.Clear;
    Buscar.SqL.Add('SELECT MAX(ID) AS ID FROM DOCUMENTO);
    Buscar.Open;
    if Buscar['ID'] = NULL then
       CDSDocumento['IDDOC'] := 1
    ELSE
      CDSDocumento['IDDOC'] := Buscar['ID']  + 1;

En el evento BeforeApplyUpdates como puedo saber si una consulta es de insercion o de actualizacion para volver a realizar la consulta a la base de datos y saber cual es el id mayor.

trabajo con firebird 2.0 y delphi 7. Gracias;
Responder Con Cita
  #2  
Antiguo 17-03-2009
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 24
ContraVeneno Va por buen camino
No lo busques en el evento "BeforeApplyUpdates", búscalo en el evento "BeforeUpdateRecord"
__________________

Responder Con Cita
  #3  
Antiguo 18-03-2009
Avatar de Vlady
Vlady Vlady is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 19
Vlady Va por buen camino
Gracias contraveneno por tu respuesta pero ahora me surgen varios interrogante como puedo utilizar este evento ya que recibe varias variables y lo que yo necesito es si es un insert averiguar la llave primaria en la base de datos asignarla a la tabla maestra y luego recorrer la tabla detalle y asignarle la llave foranea, como puedo resolver este problema, con esta funcion?

Código Delphi [-]
procedure TDataMC.DSPDocumentoBeforeUpdateRecord(Sender: TObject;
  SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
  UpdateKind: TUpdateKind; var Applied: Boolean);
begin

end;
Responder Con Cita
  #4  
Antiguo 18-03-2009
Avatar de Vlady
Vlady Vlady is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 19
Vlady Va por buen camino
lguien que me pueda ayudar con el uso del evento BeforeApplyUpdates para actualizar las llaves primaria de una tabla maestro y las llaves foranes de una tabla detalle, se lo agradeceria
Responder Con Cita
  #5  
Antiguo 18-03-2009
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 24
ContraVeneno Va por buen camino
Si buscas en la ayuda de delphi sobre este evento, explica que con el parámetro "UpdateKind" puedes identificar si es un registro nuevo, una modificación o están borrando un registro:
Código Delphi [-]
  case UpdateKind of
    ukModify: begin
          //aquí modifican
     end;
    ukInsert: Begin
          ///aquí insertan y aquí deberías buscar el máximo
         DeltaDS.FieldByName('IDDoc').NewValue := IDDoc+1;
     End;
    ukDelete: Begin
       //aquí borran.
    End; //Delete
  end;
__________________

Responder Con Cita
  #6  
Antiguo 18-03-2009
Avatar de Vlady
Vlady Vlady is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 19
Vlady Va por buen camino
Gracias contraveneno
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Concurrencia supermilloriver Conexión con bases de datos 3 20-07-2006 00:10:46
Concurrencia leflaco PHP 6 06-05-2006 07:55:01
Clientdataset y concurrencia Johnny Q Conexión con bases de datos 6 25-10-2005 20:35:49
Concurrencia mary123 C++ Builder 1 31-03-2005 19:58:13
Alta concurrencia SCORDOBA Firebird e Interbase 3 11-05-2004 16:53:42


La franja horaria es GMT +2. Ahora son las 15:25:11.


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