Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-02-2008
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 18
look Va camino a la fama
bloquear tabla

buenas compañeros del foro , tengo la la siguiete consulta :
utilizo delphi 7 y una base de datos sql server 2000 , lo que me gustaria saver es si hay alguna manera de bloquear una tabla mientras esta tabla esta en uso, demanera que espere aque si otro usuario trata de acceder a ella , esta transaccion espere a que la otra finalize para continuar con la otra ...
Responder Con Cita
  #2  
Antiguo 12-02-2008
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.085
Poder: 19
juanelo Va por buen camino
Que tal,
Lo que creo que debes de revisar es el ISOLATION_LEVEL con el que trabajas, por ejemplo si utilizas READ_COMMITED, entonces estas asegurando que los datos que leas de las base son lo últimos. En un entorno de base de datos como el del SQL Server,Oracle, FB, etc. no tiene mucho sentido el concepto de "bloquear", como se conocia en las bases de datos desktop.
Saludos
Responder Con Cita
  #3  
Antiguo 12-02-2008
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 18
look Va camino a la fama
estube viendo esto del los isolations level pere no se cual es el mas recomendable y si lo estoy utilizando bien:
Código Delphi [-]
Q_linfact.SQL.Text:='SET TRANSACTION ISOLATION LEVEL REPEATABLE READ  BEGIN TRANSACTION ;'+
' insert into FA0TY1 (num_reg,TIP_REG,TIP_DOC,CVE_DOC,CVE_ART,CANT,PXS,PREC,COST,IMPU1,IMPU2,DESC1,DESC2,DESC3,COMI,PAR_A  NT,PAR_SIG,PAR_ASIG,ACT_INV,NUM_ALM,TIP_CAM,REG_SERIE,REG_OBS,APAR,UNI_VENTA,TIPO_PROD,U4SEC,MONFLET  E,IMPU3,IMPU4'
+',IMP1APLA,IMP2APLA,IMP3APLA,IMP4APLA,TOTIMP1,TOTIMP2,TOTIMP3,TOTIMP4,TIPO_PRODT) '
+'values ('+inttostr(NREG+1)+','+inttostr(2)+','+QuotedStr('F')+','+QuotedStr(CVED)+','+QuotedStr(FORM2.Table  2.FieldBYNAME('CLAVE_ARTI').Text)
+','+inttostr(Table2.FieldBYNAME('CANT').Value)+','+inttostr(FORM2.Table2.FieldBYNAME('CANT').Value)  +','+floattostr((FORM2.Table2.FieldBYNAME('PRECIO').Value*form2.moneda.Fieldbyname('tcambio').Value)  )
+','+floattostr(costo)+','+inttostr(imp1)+',0,'+floattostr(table2.Fieldbyname('descr_desc').asfloat)  +',0,0,0,0,0,0,'+QuotedStr('A')+','+FORM2.shownalma.Text+','+floattostr(FORM2.moneda.FieldBYNAME('TC  AMBIO').Value)+',0,0,0'
+','+QuotedStr(tinve.FieldBYNAME('UNI_MED').Text)+','+QuotedStr('I')+','+QuotedStr(table2.FieldBYNAM  E('lote').asstring)+',0,0,'+floattostr(imp4)
+','+inttostr(imp1a)+',0,0,'+inttostr(imp4a)+','+floattostr(totimp1)+',0,0,'+floattostr(totimp4)+','  +QuotedStr('I')+' )'
+' COMMIT TRANSACTION';
Q_linfact.ExecSQL;
este es el codigo que utilizo para guardar en una tabla , lo unico que algunas veces parece que se pegara la transaccion y cuando otra maquina ejecuta la consulta se torna muy lento ... no se si la implementacion esta correcta , que me aconsejan...

Última edición por look fecha: 12-02-2008 a las 01:10:24.
Responder Con Cita
  #4  
Antiguo 12-02-2008
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 20
kuan-yiu Va camino a la fama
¿Y por qué no utilizas las transacciones?
Código Delphi [-]
  try
    database1.starttransaction;
    // Código con el Insert.
    database1.commit;
  except
    On E: Exception do
    begin
      ShowMessage('Error al insertar ' + chr(13) + E.Message);
      database1.rollback;
      exit;
    end;
  end;
Yo tengo muchos usuarios concurrentes haciendo procesos críticos (sacando números de factura) y jamás he tenido problemas con este método. Lo único es que intento que las transacciones sean lo más pequeñas que sea posible.
Responder Con Cita
  #5  
Antiguo 08-08-2008
jcuzziol jcuzziol is offline
Registrado
 
Registrado: feb 2008
Posts: 1
Poder: 0
jcuzziol Va por buen camino
Hola, Proba con esta clausula en el select de la tabla que quieres bloquear
with (HOLDLOCK,XLOCK)
.
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
Como bloquear un registro de una tabla que esta en la red? flystar MySQL 10 27-07-2008 18:48:12
Cómo bloquear una tabla ? santi33a MS SQL Server 1 12-04-2006 16:02:34
bloquear una tabla ercrizeporta Conexión con bases de datos 1 07-07-2005 15:40:12
Bloquear tabla MSSQL server y dbexpres OzzyzzO MS SQL Server 2 26-07-2004 01:20:15
Como bloquear la tabla, para escritura? judoboy Conexión con bases de datos 2 21-05-2003 11:02:48


La franja horaria es GMT +2. Ahora son las 20:03:26.


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