Avatar billede michael_f Nybegynder
10. juni 2004 - 10:33 Der er 13 kommentarer og
1 løsning

Oprettelse af trigger

Hej

Jeg har en tabel med biludlejninger med navn "udlejning" som bl.a. indeholder kolonnerne: "regnr","startdato" og "slutdato"

Jeg vil gerne sikre mig at den samme bil ikke kan udlejes samtidigt ved oprettelse af ny udlejning.

Er der nogle ideer til hvordan det gøres ved hjælp af en trigger eller evt. en anden løsning?
Avatar billede terry Ekspert
10. juni 2004 - 20:17 #1
I would use a stored procedure for doing this!

In the SP you obvioulsy need to check if any records exist for the "regnr" and where the dates overlaps any others.
Avatar billede terry Ekspert
10. juni 2004 - 20:17 #2
.
Avatar billede michael_f Nybegynder
11. juni 2004 - 08:12 #3
Hello Terry

Could you please show me in code how to do it?

When does this procedure check data?
Avatar billede janus_007 Nybegynder
11. juni 2004 - 22:23 #4
Hvad skal der ske når bilen er udlejet? - er det så startdato der ændres?
eller måske en boolean udlejet/ ikkeudlejet?  eller hur?
Avatar billede michael_f Nybegynder
11. juni 2004 - 22:32 #5
startdato ændres ja. jeg vil have det sådanne at den samme bil ikke kan udlejes i den samme periode. Altså: startdato<slutdato ved reg xxxxxx1 og startdato1<slutdato1 i reg xxxxxx1. Proceduren/triggeren skal altså køre et tjek ved indtastning af startdato og slutdato på det pågældende regnr og fortælle mig, om bilen er til rådighed inden for den angivne periode.
Avatar billede janus_007 Nybegynder
11. juni 2004 - 22:59 #6
create proc usp_getCarByRegnumber
@regnr as varchar(25),
@startdate as datetime,
@enddate as datetime
as
begin

if exists(select * from Cars where regnr = @regnr and enddate < @startdate)
begin
--insert into Cars(regnr, startdate, enddate) values(@regnr, @startdate, @enddate)
select @regnr as regnr, @startdate as startdate, @enddate as enddate
end
else
select -1 as regnr
end


Skrevet lige i hånden nu uden syntaxcheck! Anyway jeg går udfra at hvis enddatoen er mindre end den nye startdato så er bilen tilgængelig. Jeg har udkommenteret reservationen af bilen hvis den er ledig (den vidste jeg ikke lige om du skulle bruge til noget)

Hvis bilen er ledig får du de samme informationer tilbage som du indtastede og hvis ikke så giver den dig et -1 som regnr *G*
Avatar billede michael_f Nybegynder
11. juni 2004 - 23:15 #7
Hej

Jeg har indtastet formlen men jeg kan stadigvæk leje en bil 2 gange på samme tidspunkt. Der er ingen fejlmeddelelser under kørslen, og den er oprettet som stored procedure.Skal jeg aktivere den på min table lige som man gør med funktioner eller hvad skal der ril for den virker?
Avatar billede janus_007 Nybegynder
11. juni 2004 - 23:51 #8
Du kan evt. bruge den sp når du reservere en bil, der fjerner du blot du 2 -- foran insert!

Hvis du ikke vil reservere den i det øjeblik du spørger om den er ledig så ville jeg lige efter at den sp havde returneret det korrekte regnr igen lave en insert ala:

dvs. du starter med at spørge via den sp og hvis den giver et korrekt svar så
insert into Cars(regnr, startdate, enddate) values(@regnr, @startdate, @enddate)

Herefter er bilen udlejet :O)


Hvis det nu var helt rigtigt så burde der jo laves transactioner, men hvis det bare er et par biler om dagen så går det nok det hele.
Avatar billede michael_f Nybegynder
12. juni 2004 - 11:40 #9
Jeg er nybegynder på det her område. Har kun arbejdet med det i 4 uger.

Hvordan er syntaksen for automatisk kørsel at proceduren?

Har prøvet dette her:

    sp_procoption  'test'
    ,'startup'
    , 'true'


Her brokker den sig og siger at ændringer kun kan foretages i "master" databasen, og kun af dbo.
Avatar billede terry Ekspert
12. juni 2004 - 11:47 #10
EXEC sp_procoption ....
Avatar billede terry Ekspert
12. juni 2004 - 11:48 #11
Try looking in Books Online, there are loads of examples.
Avatar billede janus_007 Nybegynder
12. juni 2004 - 14:07 #12
Hey der er skam ikke noget her der skal køre af sig selv når serveren starter og det er det sp_procoption gør - lad være med det *S*

Hvad sprog sidder du og udvikler i ?
Avatar billede michael_f Nybegynder
13. juni 2004 - 11:11 #13
borland c++ builder
Avatar billede janus_007 Nybegynder
14. juni 2004 - 11:16 #14
Hej igen.

Jeg formoder du godt kan åbne en forbindelse og udføre sql's ?

Nu skal du bare kalde en stored procedure istedet, det gøres lidt anderledes, men er altså ikke så slemt som det lige ser ud til ved første øjekast.

Kan du få et svar tilbage på den sp jeg lavede getCarByRegnumber ?
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