Avatar billede mortenf Nybegynder
21. december 2001 - 13:19 Der er 4 kommentarer og
1 løsning

Update Trigger 2

Jeg var lidt for hurtig med min egen besvarelse af:
http://www.eksperten.dk/spm/149275

Nogle gange virker det og andre gange får jeg følgende fejl:

\"Write Conflict
This record has been changed by another user since you started editing it. If you save, you will overwrite the changes the other user made.

Copying the changes to the clipboard will let you look at the values the other user entered, and then paste your changes back in if you decide to make changes.\"

Her kan man så vælge mellem knapperne:
Save Record, Copy to Clipboard eller Drop Changes.

Hvis man kopierer til clipboarded, så kan jeg se, at de ændringer, der refereres til i fejlmeddelelsen er præcis de ændringer som jeg selv har skrevet !!!!???

Hvem kan løse problemet?

Avatar billede bennytordrup Nybegynder
22. december 2001 - 00:26 #1
Jeg har prøvet med denne trigger:

CREATE TRIGGER Table1Update
ON Table1
after update
AS
If UPDATE([Name])
BEGIN
    declare @newname as nvarchar(20)
    declare @id as int

    select @id = [id] from inserted
    select @newname = [name] from inserted

    update table2
    set [Name]=@newname
    where table2.[id]=@id
END

ID er defineret som Int, Name som nvarchar(20)

Gennemfører jeg update sql statements mod table1.Name via Query Analyzer, bliver table2.Name opdateret som jeg vil have det.

Hvorfra opdaterer du Table1?
Avatar billede mortenf Nybegynder
03. januar 2002 - 10:24 #2
I din Update af table2 anvender du @id i din where-betingelse - jeg har ikke referencen fra table2 til table1 som id, men som Name (str_name).... men det burde vel ikke gøre den store forskel?

Min trigger i http://www.eksperten.dk/spm/149275 virker fint, når det samme navn eksisterer både i table1 og table2..... men ikke, når str_name ikke eksisterer i table2 - her får jeg den fejl, der er beskrevet ovenfor. Virker din trigger, hvis Name/id ikke eksisterer i table2?

Et ekstra spørgsmål: kender du en SQL Print kommando, så man kan skrive variable til skærmen, når en trigger eksekveres ved ændring i tabel i Access? ..... pt anvender jeg RAISERROR, men det er dælme ikke særligt godt :-)
Avatar billede bennytordrup Nybegynder
03. januar 2002 - 10:40 #3
Jeg kigger på det i aften...

Med det andet spørgsmål, så kender jeg ikke andet end Print, og den ryger jo ikke til skærmen.
Avatar billede bennytordrup Nybegynder
03. januar 2002 - 23:29 #4
Prøv denne trigger (eller lignende)

create TRIGGER Table1UpdateAndInsert
ON Table1
after update, insert
AS
If UPDATE([Name])
BEGIN
    declare @newname as nvarchar(20)
    declare @id as int

    select @id = [id] from inserted
    select @newname = [name] from inserted

    if exists ( select [id] from table2 where [id]=@id )
        update table2
        set [Name]=@newname
        where table2.[id]=@id
    else
        insert table2 ([id], [name])
        values (@id, @newname)
       
END


Den indsætter nye poster og ændrer på eksisterende.
Avatar billede mortenf Nybegynder
07. januar 2002 - 11:36 #5
Så virker det - tak!

I min oprindelige trigger anvendte jeg kombinationen:
SELECT..../If @@RowCount > 0,
hvilket jeg nu har erstattet med:
If Exists(SELECT.....)

Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester