PDA

Ver la Versión Completa : Problema con bloqueos en SQL Server y BDE


risu
18-02-2005, 01:42:17
Tengo un problema muy importante con bloqueos en tablas, y es crucial que lo resuelva pq la aplicación ya está funcionando.



Es una aplicación sobre SQL SERVER 7, cliente-servidor con BDE para la conexión.

En la tabla de la BBDD hay unos 10000 registros importados directamente por el SQL Server desde ACCESS. Si intento modificar uno de estos registros, no hay problema y realiza la modificación.

El problema surge, con los nuevos registros insertados desde la aplicación de Builder, que ahora mismo serán unos 20. Los registros los inserta correctamente (uso para la inserción un Append y un Post directamente sobre la tabla), pero si intento editar uno de estos registros, me sale el famoso mensaje de BDE “Couldn’t perform the edit because another user changed the record” o algo así.



Para la modificación y moverme por los registros, uso el evento “On Data Change” del DataSource correspondiente a la tabla.



try{ if (((Field)!=NULL)&&((Field->FieldName)!="Clave_pr"))) //Si no hay cambio es navegación por los registros y no entra en la condición.

{

if(MessageDlg("Se ha modificado el campo: " + (Field->FieldName) + ". ¿Seguro que desea modificar el campo?",

mtCustom, mbOKCancel << mbOK, 0)!=mbOK)

{ Productor->cambio_Gprod=true; //Variable para diferenciar si es una nueva inserción o es una edición

sour_Productor->DataSet->UpdateRecord();

sour_Productor->DataSet->Post();

}



else {sour_Productor->DataSet->Cancel();

sour_Productor->DataSet->Open() ;}

}



}



catch(...){}

}



He estado mirando el servidor SQL Server, y cuando paro la aplicación, no quedan bloqueos. He reiniciado el servidor y tampoco. Pero si he visto que cuando inicio la aplicación genera una serie de bloqueos sobre la tabla, que no entiendo bien. Parece como si los nuevos registros que se insertan, lo hubieran hecho en modo “solo lectura”.



No se me ocurre que pueda ser. He visto algo de transacciones, pero no sabría como modificar mi código (que sería bastante) para ponerlo, y si funcionaría sin problemas. Alguna ayuda por favor???? Es muy urgente.



Gracias