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: 23
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: 23
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
  #7  
Antiguo 19-03-2009
Avatar de Vlady
Vlady Vlady is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Poder: 19
Vlady Va por buen camino
Contraveneno gracias por tus aportes pero ahora como tengo una relacion maestro detalle solo tengo un provider, pero no se como hago para diferenciar cual tabla se inserto si en el maestro o en el detalle, he probado de varias formas pero no he podido dar con el chiste ya q cuando se hace una inserción en el maestro funciona bien pero cuando se hace una insercion en el detalle igual me calcula el mayor, debo diferenciar entre una insercion en el maestro y otra en el detalle, igual mi problema es solo la llave primaria de la tabla maestra q puede cambiar por otro usuario mientras q se esta creando el documento. si me pudieran ayudar se los agradeceria
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 08:03:46.


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