notrica
Messages postés89Date d'inscriptionlundi 12 décembre 2005StatutMembreDernière intervention19 octobre 2013
-
21 août 2009 à 23:46
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
17 sept. 2009 à 20:37
Salut
J'utilise SQL Server 2005, un programme est exécuter par deux utilisateurs, lorsque le 1er utilisateur sauve un enregistrement dans la base des données, le 2ème ne saura plus poster l'enregistrement dans la base des données. Un message du genre "La ligne n'a pas pu être trouvée pour la mise à jour. Certaines valeurs ont peut être changé depuis leur dernière lecture". Que faire pour que les 2 utilisateurs travaillent sans se message d'erreur.
a+
Notrica
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 26 août 2009 à 19:15
le deuxième utilisateur ne saura plus, un message "La ligne n'a pas été trouvé pour la mise à jour. Certaines valeurs ont peut-être changées depuis leur première lecture" s'affiche.
notrica
Messages postés89Date d'inscriptionlundi 12 décembre 2005StatutMembreDernière intervention19 octobre 2013 27 août 2009 à 17:18
le message continue de s'afficher et que les données du deuxième utilisateur ne sont pas sauvegardées. c.a.d. l'accès pour la sauvegarde des données du deuxième utilisateur sur la base des données sur le serveur est quasi impossible. La lecture ne pose aucun problème.
j'ai en réseau un serveur win 2003 sur lequel est installé le SQL-Serveur
Que dois-je faire pour que tout le monde accède en écriture sur la base ?
a+
Notrica
notrica
Messages postés89Date d'inscriptionlundi 12 décembre 2005StatutMembreDernière intervention19 octobre 2013 7 sept. 2009 à 01:27
[list]
Salut Cantador
Voila, mon problème n'a pas été résolut. Voici le message qu'il m'affiche
'Aucune transaction n'est active'. Que faire?.
je m'explique encore, la base de données est verrouillée lorsque le 1er utilisateur sauve un enregistrement, le 2eme qui chercher a sauver son enregistrement n'y arrive plus. cela génère le message ci-dessus.
d'avance merci
a+
Notrica
/list
notrica
Messages postés89Date d'inscriptionlundi 12 décembre 2005StatutMembreDernière intervention19 octobre 2013 7 sept. 2009 à 23:24
tout a été fait comme vous l'avez demandé. veuillez trouver la partie de sauvergarde ci-dessous :
DMPlanet1.AdoIbPlanet.BeginTrans; // Début de la transaction
try
DMPlanet1.AdoIbPlanet.CommitTrans; // Début de la transaction
with DMPlanet1 do begin
QClients.active := False;
QClients.Sql.Clear;
QClients.Sql.Add('Select * from TFClients Order By ClientID');
QClients.active := True;
QClients.First;
notrica
Messages postés89Date d'inscriptionlundi 12 décembre 2005StatutMembreDernière intervention19 octobre 2013 9 sept. 2009 à 01:49
Salut Cantador,
voici le le code après avoir encapsulé les écritures:
try
DMPlanet1.AdoIbPlanet.BeginTrans; // Début de la transaction
with DMPlanet1 do begin
QClients.active := False;
QClients.Sql.Clear;
QClients.Sql.Add('Select * from TFClients Order By ClientID');
QClients.active := True;
QClients.First;
// if not Locate('CompteID',RzEdit1.Text,[loPartialKey]) then
if not QClients.Locate('ClientID',RzEdit37.Text,[]) then begin
QClients.Insert;
QClientsClientID.AsString :=RzEdit37.Text;
QClientsUserCrea.AsString := FrmMain.wwwNomUtil;
//** FieldByName('DateCrea').AsString := FormatDateTime('dd-mmm-yyyy',Date);
QClientsDateCrea.AsDateTime := Date;
QClientsHeureCrea.AsDateTime := Time;
end
else begin
QClients.Edit;
xmodif := 1;
// FieldByName('Nom_Modif').AsString :=RxLabel5.Caption ;
// FieldByName('Date_Modif').AsString := FormatDateTime('dd-mmm-yyyy',Date);
// FieldByName('Heure_Modif').AsString := FormatDateTime('hh:nn:ss',Time);
end;
QClientsNomClient.AsString :=RzEdit38.Text;
QClientsAdresse.AsString :=RzMemo2.Text;
QClientsAdressBus.AsString :=RzBitBtn3.Caption;
QClientsTelBus.AsString :=RxLabel71.Caption;
QClientsTelFax.AsString :=RxLabel60.Caption;
QClientsPhone.AsString :=RzEdit41.Text;
QClientsFax.AsString :=RzEdit42.Text;
QClientsEmail.AsString :=RzEdit39.Text;
QClientsPageWeb.AsString := RzEdit40.Text ;
QClientsStatus.AsBoolean :=RzCheckBox1.Checked;
QClientsDateOuv.AsString :=RzDateTimeEdit1.Text;
QClientsMntBal.AsInteger :=RzNumericEdit1.IntValue;
QClientsMntBalUS.Value := RzNumericEdit1.Value/FrmMain.wwTxChange;
QClientsDateBal.AsString :=RzDateTimeEdit2.Text;
QClientsMemo.AsString :=RzMemo1.Text;
QClientsAjouteLien.AsString :=RzEdit43.Text;
QClientsNomClient.AsString :=RzEdit38.Text;
QClientsLimiteCredit.AsString :=RzEdit1.Text;
QClientsPrix.AsString :=RzComboBox2.Text;
QClientsCredit.AsString :=RzCombobox3.Text;
QClientsMethExp.AsString :=RzCombobox4.Text;
QClientsMethPyt.AsString :=RzCombobox5.Text;
QClientsCondPyt.AsString :=RzCombobox6.Text;
QClientsClientGrp.AsString :=RzCombobox7.Text;
QClientsTaxGrp.AsString :=RzComboBox8.Text;
QClientsGLCompte.AsString :=CpteClient;
QClients.Post;
QClients.Refresh;
DMPlanet1.AdoIbPlanet.CommitTrans; // Début de la transaction
end;
except
if DMPlanet1.AdoIbPlanet.InTransaction then
DMPlanet1.AdoIbPlanet.RollbackTrans;
end;
Que faire pour que les enregistrement du 2ème utilisateur soit sauvegarder dans la base de données ?
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 9 sept. 2009 à 16:10
Evite le refresh entre le post et le commit mets le après.
cela ne vient pas du code car celui-ci est bien écrit.
Le premier utilisateur enregistre d'ailleurs bien les données mais le second déclenche vraisemblablement le rollback..
il faudrait savoir pourquoi ?
inhibe le rollback temporairement afin de déclencher un message d'erreur.
Mais je pense que cela vient de la propriété
IsolationLevel qui n'a pas été correctement fixée
notrica
Messages postés89Date d'inscriptionlundi 12 décembre 2005StatutMembreDernière intervention19 octobre 2013 10 sept. 2009 à 00:01
voici le message déclenché "La ligne n'a pas pu être trouvée pour la mise à jour. Certaines valeurs ont peut-être changé depuis leur dernière lecture."Ce message est affiché lors de la sauvegarde de l'enregistrement du 2ème urilisateur.
Merci d'avance.
a+
Notrica
notrica
Messages postés89Date d'inscriptionlundi 12 décembre 2005StatutMembreDernière intervention19 octobre 2013 10 sept. 2009 à 21:27
j'ai sélectionné l'option ilReadCommitted comme vous l'aviez recommandé. Le résultat reste le même càd le message continue à s'afficher. Je me connect à une base des données SQL-Serveur sous Serveur 2003.
Que faire ?
notrica
Messages postés89Date d'inscriptionlundi 12 décembre 2005StatutMembreDernière intervention19 octobre 2013 10 sept. 2009 à 22:06
je corrige ce que dit tout à l'heure. Lorsque deux utilisateurs travaillent sur un même dossier par ex. la mise à jour des clients, le 1er peur poster son enregistrement, mais le 2ème utilisateur n'y arrivera pas d'où le message dont ci-haut. Mais je constate que lorsque ils travaillent sur des dossiers différents par ex. client et l'autre sur fournisseurs, celà est devenu normal càd bon pas de message, Faut-t'il conclure que c'est impossible que 2 utilisateurs travaillent sur un même dossier ?.
Je suis ravi qu'une partie de solution soit trouvé.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 10 sept. 2009 à 22:19
bon ya du mieux..
mais si les clics arrivent en même temps sur le même dossier..
ce qui en pratique est extrêmement rare(probabilité très faible)
c'est normal..
mais en revanche si la première transaction se termine alors l'autre doit pouvoir fonctionner.
s'il y a collision alors tu peux gérer à l'aide de messages appropriés :
"une transaction est en cours veuillez renouveler votre action ultérieurement".
En revanche, il me semble qu'il y a une possiblité de prendre la main...
mais pas je ne l'ai pas encore utilisée (trop problèmatique...)
notrica
Messages postés89Date d'inscriptionlundi 12 décembre 2005StatutMembreDernière intervention19 octobre 2013 10 sept. 2009 à 22:58
je m'excuse, j'ai oublié d'inhiber le RollBacktrans du 2ème dossier. Sinon le message persiste. Même si le 2ème fait la mise à jour dans un autre dossier, ce message apparaît.Donc cet enregistrement ne pas pris en compte, il est perdu.
Que faire ?
a+
Notrica
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 11 sept. 2009 à 13:41
il faut vérifier si les utilisateurs ont tous accès au dossier de la base sur le serveur
essaie aussi un autre niveau d'isolation par précaution :
SQLSetIsolation
Read IsolationLevel after the transaction has been activated to determine the actual transaction isolation level used. It is possible that a server will force an isolation level other than that requested if the level requested is not supported.
Isolation TYPES
ilUnspecified Server is using a an isolation level other than what was requested and the specific isolation level cannot be determined.
ilChaos Changes from more highly isolated transactions cannot be overwritten by the current connection.
ilReadUncommitted Uncommitted changes in other transactions are visible.
ilBrowse Uncommitted changes in other transactions are visible.
ilCursorStability Changes from other transactions only visible after being committed.
ilReadCommitted Changes from other transactions only visible after being committed.
ilRepeatableRead Changes made in other transactions not visible, but requerying can retrieve new recordsets.
ilSerializable Transactions conducted in isolation from other transactions.
ilIsolated Transactions conducted in isolation from other transactions.