OVH Cloud OVH Cloud

Access ADP et trigger SQL Server

5 réponses
Avatar
VUILLERMET Jacques
Une application fonctionne avec un client Access (ADP) et une base SQL
Server.

Elle fonctionne bien, et possède un formulaire ayant comme source une table.

Mais quand je spécifie un trigger (INSERT, UPDATE) sur cette table (qui la
modifie, code après la signature) alors Access est perdu : message d'erreur
"Conflit d'écriture - Cet enregistrement a été modifié par un autre
utilisateur... [Sauvegarder enregistrement] [Copier dans le Presse-papiers]
[Annuler]".

Le trigger fonctionne bien avec un autre client que Access (l'Analyseur de
requêtes par exemple).

Est-il possible d'utiliser Access (ADP) avec une base possédant des triggers
?

Jacques.

***********************************************
CREATE TRIGGER trg_AvoidNullInNb ON [dbo].[MvtColis]
FOR INSERT, UPDATE
AS

UPDATE Mvtcolis
SET NbPal = 0
WHERE NbPal is null

UPDATE Mvtcolis
SET NbColis = 0
WHERE NbColis is null

UPDATE Mvtcolis
SET NbPlis = 0
WHERE NbPlis is null

UPDATE Mvtcolis
SET NbPiece = 0
WHERE NbPiece is null

/* Fin.*/

5 réponses

Avatar
VUILLERMET Jacques
Idem avec :

UPDATE Mvtcolis
SET NbPal = 0
WHERE NbPal is null AND id = (SELECT id FROM inserted)

ou bien :

UPDATE Mvtcolis
SET NbPal = 0
FROM MvtColis INNER JOIN inserted ON MvtColis.id = inserted.id
WHERE inserted.NbPal is null

Jacques.

"VUILLERMET Jacques" a écrit dans le message de
news:

Une application fonctionne avec un client Access (ADP) et une base SQL
Server.

Elle fonctionne bien, et possède un formulaire ayant comme source une
table.


Mais quand je spécifie un trigger (INSERT, UPDATE) sur cette table (qui la
modifie, code après la signature) alors Access est perdu : message
d'erreur

"Conflit d'écriture - Cet enregistrement a été modifié par un autre
utilisateur... [Sauvegarder enregistrement] [Copier dans le
Presse-papiers]

[Annuler]".

Le trigger fonctionne bien avec un autre client que Access (l'Analyseur de
requêtes par exemple).

Est-il possible d'utiliser Access (ADP) avec une base possédant des
triggers

?

Jacques.

***********************************************
CREATE TRIGGER trg_AvoidNullInNb ON [dbo].[MvtColis]
FOR INSERT, UPDATE
AS

UPDATE Mvtcolis
SET NbPal = 0
WHERE NbPal is null

UPDATE Mvtcolis
SET NbColis = 0
WHERE NbColis is null

UPDATE Mvtcolis
SET NbPlis = 0
WHERE NbPlis is null

UPDATE Mvtcolis
SET NbPiece = 0
WHERE NbPiece is null

/* Fin.*/




Avatar
J-Pierre
J'explique rapidos, je suis à la bourre, si ça ne suffit pas, tu le dis.

Tu crées une base access.MDB. avec des tables et des relations. Avec l'assistantAccess, tu la convertis à un projet ADP, avec une
nouvelle base SQL. L'assistant ne crée pas de relations dans SQL, mais crées des triggfers pour gérer tes relations.

J-Pierre
PS: J'utilise couramment des triggers avec ADP, je n'ai jamais eu de problèmes.

"VUILLERMET Jacques" a écrit dans le message de news:%
Idem avec :

UPDATE Mvtcolis
SET NbPal = 0
WHERE NbPal is null AND id = (SELECT id FROM inserted)

ou bien :

UPDATE Mvtcolis
SET NbPal = 0
FROM MvtColis INNER JOIN inserted ON MvtColis.id = inserted.id
WHERE inserted.NbPal is null

Jacques.

"VUILLERMET Jacques" a écrit dans le message de
news:

Une application fonctionne avec un client Access (ADP) et une base SQL
Server.

Elle fonctionne bien, et possède un formulaire ayant comme source une
table.


Mais quand je spécifie un trigger (INSERT, UPDATE) sur cette table (qui la
modifie, code après la signature) alors Access est perdu : message
d'erreur

"Conflit d'écriture - Cet enregistrement a été modifié par un autre
utilisateur... [Sauvegarder enregistrement] [Copier dans le
Presse-papiers]

[Annuler]".

Le trigger fonctionne bien avec un autre client que Access (l'Analyseur de
requêtes par exemple).

Est-il possible d'utiliser Access (ADP) avec une base possédant des
triggers

?

Jacques.

***********************************************
CREATE TRIGGER trg_AvoidNullInNb ON [dbo].[MvtColis]
FOR INSERT, UPDATE
AS

UPDATE Mvtcolis
SET NbPal = 0
WHERE NbPal is null

UPDATE Mvtcolis
SET NbColis = 0
WHERE NbColis is null

UPDATE Mvtcolis
SET NbPlis = 0
WHERE NbPlis is null

UPDATE Mvtcolis
SET NbPiece = 0
WHERE NbPiece is null

/* Fin.*/








Avatar
VUILLERMET Jacques
Je vais essayer.

"PS: J'utilise couramment des triggers avec ADP, je n'ai jamais eu de
problèmes."

Ce genre de phrase me fait peur : cela signifie que je suis tombé sur un cas
particulier !

Merci Jean-Pierre !

Jacques.

"J-Pierre" a écrit dans le message de
news:
J'explique rapidos, je suis à la bourre, si ça ne suffit pas, tu le dis.

Tu crées une base access.MDB. avec des tables et des relations. Avec
l'assistantAccess, tu la convertis à un projet ADP, avec une

nouvelle base SQL. L'assistant ne crée pas de relations dans SQL, mais
crées des triggfers pour gérer tes relations.


J-Pierre
PS: J'utilise couramment des triggers avec ADP, je n'ai jamais eu de
problèmes.


"VUILLERMET Jacques" a écrit dans le message de
news:%

Idem avec :

UPDATE Mvtcolis
SET NbPal = 0
WHERE NbPal is null AND id = (SELECT id FROM inserted)

ou bien :

UPDATE Mvtcolis
SET NbPal = 0
FROM MvtColis INNER JOIN inserted ON MvtColis.id = inserted.id
WHERE inserted.NbPal is null

Jacques.

"VUILLERMET Jacques" a écrit dans le message de
news:

Une application fonctionne avec un client Access (ADP) et une base SQL
Server.

Elle fonctionne bien, et possède un formulaire ayant comme source une
table.


Mais quand je spécifie un trigger (INSERT, UPDATE) sur cette table
(qui la



modifie, code après la signature) alors Access est perdu : message
d'erreur

"Conflit d'écriture - Cet enregistrement a été modifié par un autre
utilisateur... [Sauvegarder enregistrement] [Copier dans le
Presse-papiers]

[Annuler]".

Le trigger fonctionne bien avec un autre client que Access
(l'Analyseur de



requêtes par exemple).

Est-il possible d'utiliser Access (ADP) avec une base possédant des
triggers

?

Jacques.

***********************************************
CREATE TRIGGER trg_AvoidNullInNb ON [dbo].[MvtColis]
FOR INSERT, UPDATE
AS

UPDATE Mvtcolis
SET NbPal = 0
WHERE NbPal is null

UPDATE Mvtcolis
SET NbColis = 0
WHERE NbColis is null

UPDATE Mvtcolis
SET NbPlis = 0
WHERE NbPlis is null

UPDATE Mvtcolis
SET NbPiece = 0
WHERE NbPiece is null

/* Fin.*/












Avatar
VUILLERMET Jacques
It works with one UPDATE as you've shown !

THANKS A LOT !!!

Jacques. :-)))


"Uwe Ricken" a écrit dans le message de news:
#
Hi Jacques,

Vadiim has told you the mistake you've made in your trigger.
On the other hand it is useful als Vadim has written, to
use DEFAULT-Values.

If you don't want to use DEFAULTS you do not have to use
multiple UPDATE-Statements within the trigger but you can
handle it within only one UPDATE-Statement

CREATE TRIGGER dbo.trg_AvoidNullInNb
ON dbo.MvtColis
FOR INSERT, UPDATE
AS
SET NOCOUNT ON

UPDATE m
SET m.nbPal = ISNULL(i..NbPal, 0),
m.nbColIs = ISNULL(i.nbColIs, 0),
m.nbPlis = ISNULL(i.nbPlis, 0),
m.NBPiece = ISNULL(i.NBPiece, 0)
FROM dbo.Mvtcolis m INNER JOIN inserted i
ON (m.<PKField> = i.<PKField>)

SET NOCOUNT OFF
GO

HTH ;-)

--
Gruß, Uwe Ricken
MCP for SQL Server 2000 Database Implementation

GNS GmbH, Frankfurt am Main
http://www.gns-online.de
http://www.memberadmin.de
http://www.conferenceadmin.de
____________________________________________________
APP: http://www.AccessProfiPool.de
dbdev: http://www.dbdev.org
FAQ: http://www.donkarl.com/AccessFAQ.htm





"VUILLERMET Jacques" a écrit dans le message de

news:

Une application fonctionne avec un client Access (ADP) et une base SQL
Server.

Elle fonctionne bien, et possède un formulaire ayant comme source une
table.


Mais quand je spécifie un trigger (INSERT, UPDATE) sur cette table (qui la
modifie, code après la signature) alors Access est perdu : message
d'erreur

"Conflit d'écriture - Cet enregistrement a été modifié par un autre
utilisateur... [Sauvegarder enregistrement] [Copier dans le
Presse-papiers]

[Annuler]".

Le trigger fonctionne bien avec un autre client que Access (l'Analyseur de
requêtes par exemple).

Est-il possible d'utiliser Access (ADP) avec une base possédant des
triggers

?

Jacques.

***********************************************
CREATE TRIGGER trg_AvoidNullInNb ON [dbo].[MvtColis]
FOR INSERT, UPDATE
AS

UPDATE Mvtcolis
SET NbPal = 0
WHERE NbPal is null

UPDATE Mvtcolis
SET NbColis = 0
WHERE NbColis is null

UPDATE Mvtcolis
SET NbPlis = 0
WHERE NbPlis is null

UPDATE Mvtcolis
SET NbPiece = 0
WHERE NbPiece is null

/* Fin.*/





Avatar
J-Pierre
Salut Jacques,

Voilà deux exemples de triggers, update et delete.

J-Pierre

"PS: J'utilise couramment des triggers avec ADP, je n'ai jamais eu de
problèmes."

Ce genre de phrase me fait peur : cela signifie que je suis tombé sur un cas
particulier !


Cela peut aussi signifier que tu as une erreur de programmation.

Si ça ne marche toujours pas, il faudra regarder du côté du RecordSet et des MAJ dans ton formulaire.

J-Pierre

-------------------------------------------------
CREATE TRIGGER X035_update_Trigger ON dbo.X035_collaborateurs FOR UPDATE AS
SET NOCOUNT ON

/* * MISES À JOUR EN CASCADE VERS 'T001_projets' */
IF UPDATE(X035_code_collaborateur)
BEGIN
UPDATE T001_projets
SET T001_projets.T001_code_collaborateur = inserted.X035_code_collaborateur
FROM T001_projets, deleted, inserted
WHERE deleted.X035_code_collaborateur = T001_projets.T001_code_collaborateur
END

/* * MISES À JOUR EN CASCADE VERS 'T025_infographie_temps_passes' */
IF UPDATE(X035_code_collaborateur)
BEGIN
UPDATE T025_infographie_temps_passes
SET T025_infographie_temps_passes.T025_collaborateur = inserted.X035_code_collaborateur
FROM T025_infographie_temps_passes, deleted, inserted
WHERE deleted.X035_code_collaborateur = T025_infographie_temps_passes.T025_collaborateur
END
-----------------------------------------------
CREATE TRIGGER X035_delete_Trigger ON dbo.X035_collaborateurs FOR DELETE AS
SET NOCOUNT ON

/* * PAS DE SUPPRESSIONS SI DES ENREGISTREMENTS LIES EXISTENT DANS 'T001_projets' */
IF (SELECT COUNT(*) FROM deleted, T001_projets WHERE (deleted.X035_code_collaborateur = T001_projets.T001_code_collaborateur)) > 0
BEGIN
RAISERROR 44445 'Ce collaborateur ne peut pas être supprimé. Des enregistrements liés existent dans la table
''T001_projets''.'
ROLLBACK TRANSACTION
END

/* * PAS DE SUPPRESSIONS SI DES ENREGISTREMENTS LIES EXISTENT DANS 'T025_infographie_temps_passes' */
IF (SELECT COUNT(*) FROM deleted, T025_infographie_temps_passes WHERE (deleted.X035_code_collaborateur T025_infographie_temps_passes.T025_collaborateur)) > 0
BEGIN
RAISERROR 44445 'Ce collaborateur ne peut pas être supprimé. Des enregistrements liés existent dans la table
''T025_infographie_temps_passes''.'
ROLLBACK TRANSACTION
END
---------------------------------------------------------


"VUILLERMET Jacques" a écrit dans le message de news:e$
Je vais essayer.

"PS: J'utilise couramment des triggers avec ADP, je n'ai jamais eu de
problèmes."

Ce genre de phrase me fait peur : cela signifie que je suis tombé sur un cas
particulier !

Merci Jean-Pierre !

Jacques.

"J-Pierre" a écrit dans le message de
news:
J'explique rapidos, je suis à la bourre, si ça ne suffit pas, tu le dis.

Tu crées une base access.MDB. avec des tables et des relations. Avec
l'assistantAccess, tu la convertis à un projet ADP, avec une

nouvelle base SQL. L'assistant ne crée pas de relations dans SQL, mais
crées des triggfers pour gérer tes relations.


J-Pierre
PS: J'utilise couramment des triggers avec ADP, je n'ai jamais eu de
problèmes.


"VUILLERMET Jacques" a écrit dans le message de
news:%

Idem avec :

UPDATE Mvtcolis
SET NbPal = 0
WHERE NbPal is null AND id = (SELECT id FROM inserted)

ou bien :

UPDATE Mvtcolis
SET NbPal = 0
FROM MvtColis INNER JOIN inserted ON MvtColis.id = inserted.id
WHERE inserted.NbPal is null

Jacques.

"VUILLERMET Jacques" a écrit dans le message de
news:

Une application fonctionne avec un client Access (ADP) et une base SQL
Server.

Elle fonctionne bien, et possède un formulaire ayant comme source une
table.


Mais quand je spécifie un trigger (INSERT, UPDATE) sur cette table
(qui la



modifie, code après la signature) alors Access est perdu : message
d'erreur

"Conflit d'écriture - Cet enregistrement a été modifié par un autre
utilisateur... [Sauvegarder enregistrement] [Copier dans le
Presse-papiers]

[Annuler]".

Le trigger fonctionne bien avec un autre client que Access
(l'Analyseur de



requêtes par exemple).

Est-il possible d'utiliser Access (ADP) avec une base possédant des
triggers

?

Jacques.

***********************************************
CREATE TRIGGER trg_AvoidNullInNb ON [dbo].[MvtColis]
FOR INSERT, UPDATE
AS

UPDATE Mvtcolis
SET NbPal = 0
WHERE NbPal is null

UPDATE Mvtcolis
SET NbColis = 0
WHERE NbColis is null

UPDATE Mvtcolis
SET NbPlis = 0
WHERE NbPlis is null

UPDATE Mvtcolis
SET NbPiece = 0
WHERE NbPiece is null

/* Fin.*/