Avatar billede stinejh1980 Nybegynder
25. april 2006 - 16:18 Der er 15 kommentarer og
1 løsning

tillade dubletter

http://www.eksperten.dk/spm/705218

Er der nogen som kan hjælpe mig med dette spørgsmål??

Jeg kom til at oprette i den forkerte kategori.
Avatar billede stinejh1980 Nybegynder
25. april 2006 - 16:20 #1
jed koder i ASP:NET version 1.1.
Avatar billede arne_v Ekspert
25. april 2006 - 16:26 #2
Hvorfor ikke bare saette et unikt index paa og catche exception ?
Avatar billede stinejh1980 Nybegynder
26. april 2006 - 11:55 #3
?????
Så meget er jeg heller ikke idne i det.
Gider du at forklare
Avatar billede arne_v Ekspert
26. april 2006 - 13:15 #4
CREATE UNIQUE INDEX ordrenrindex ON ordretabel (ordrefelt)

så giver databasen en fejl hvis man forsøger at indsætte en duplikat
Avatar billede stinejh1980 Nybegynder
26. april 2006 - 16:20 #5
Nej det dur ikke for brugeres skal have mulighed for at erstatte linien hvis de vil.
Avatar billede arne_v Ekspert
27. april 2006 - 04:52 #6
Det kan de vel også hvis din app håndterer exception fornuftigt.

Og den situation skal du jo håndtere alligevel (ihvertfald hvis du skal kunne
klare mere end en samtidig bruger - fordi du kan riskere at 2 begge laver
SELECT inden de begge forsøger at lave INSERT
Avatar billede stinejh1980 Nybegynder
01. maj 2006 - 16:17 #7
Brugerne sidder med ordren foran sig på papir og taster den ind, så de vil aldrig rette i den samme ordre samtidig.

Det er bare for at fortælle brugerne at de har oprettet ordren i mit system engang så det ikke bliver dobbeltarbejde eller for at fortælle dem at de har trykket på knappen 2 gange.

Det ideelle ville være denne funktion på gem knappen:


Tjekker om alle felter er fyldt ud
hvis nej:
    LblFejlGem - du skal udfylde ...........
Hvis ja:
    Tjekker om ordre nummer eksisterer
    Hvis ja:
        LblFejlGem - Ordre er allerede gemt
    ellers
        Indsætter i Db
    end if
end if
Avatar billede stinejh1980 Nybegynder
03. maj 2006 - 13:12 #8
kan du evt give mig et eksempel på de funktioner du skriver ??
Avatar billede stinejh1980 Nybegynder
03. maj 2006 - 14:59 #9
Jeg har prøvet noget i stil med:

try
'insert statements
catch ex as exception
lblfejlgem.text= "Der er opstået en fejl: "+ ex.ToString()
finally
'if "der ikke er en exception" then
    objComm = New OLEDBcommand(strSQL, objConn)
    objComm.ExecuteNonQuery()
    objConn.Close()
'end if
end try

har du et andet forslag??
Avatar billede stinejh1980 Nybegynder
03. maj 2006 - 15:39 #10
Nu fik jeg det til at virke:
try
'insert statements
catch ex as exception
    objComm = New OLEDBcommand(strSQL, objConn)
    objComm.ExecuteNonQuery()
catch ex as exception
LblFejlGem.text = ex.ToString()
Finally
    objConn.Close()
end try

Men brugeren forstår nok ikke meget af:
System.Data.OleDb.OleDbException: De ønskede ændringer af tabellen blev ikke gennemført, fordi de ville give dublerede værdier i indekset, den primære nøgle eller relationen. Rediger dataene i det eller de felter, der indeholder dublerede data, fjern indekset, eller omdefiner indekset, så dublerede indtastninger tillades, og forsøg igen. at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteNonQuery() at ASP.tabel_aspx.BtnGem_Click(Object sender, EventArgs e) in U:\IT\Projekt program\Program\side.aspx:line 756
Avatar billede arne_v Ekspert
04. maj 2006 - 02:49 #11
nej

men du kan jo give ham en brugervenlig tekst "Record allerede i database" og så logge
den præcise fejl til evt. fejlsøgning
Avatar billede stinejh1980 Nybegynder
04. maj 2006 - 10:14 #12
Nej men det er jo det der er mit problem.

Jeg vil gerne fange hvilken type exception det er - for hvis jeg bare skriver: "Ordren er allerede oprettet" så kommer den jo også frem selvom det ikke er det der er fejlen.

Hvordan laver jeg en fejl log
Avatar billede stinejh1980 Nybegynder
04. maj 2006 - 15:42 #13
Jeg løste den selv med:
try
//insert statements
    objComm = New OLEDBcommand(strSQL, objConn)
    objComm.ExecuteNonQuery()
catch exc as system.exception
If instr(1, exc.message, "duplicate data") then
            LblFejlGem.text="Du har allerede gemt denne ordre - Tryk rediger for at rette ordren"
        else   
            LblFejlGem.text= "Du har fået en fejl: <br /> <br />" + exc.ToString()
        end if
Finally
    objConn.Close()
end try
Avatar billede stinejh1980 Nybegynder
04. maj 2006 - 15:43 #14
Hvis du svarer på:

http://www.eksperten.dk/spm/705218

Så kan I dele points
Avatar billede arne_v Ekspert
04. maj 2006 - 16:37 #15
Det er nok den eneste maade at loese det paa.

Men vaer opmaerksom paa at fejl tekster ikke er saerligt stablie
over software versioner.

Du kan logge med forskellige logging framework (der er et i Enterprise Library,
der er log4net etc.).
Avatar billede stinejh1980 Nybegynder
29. juni 2006 - 13:36 #16
Har givet fennec point i det andet spørgsmål
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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