Avatar billede nanna31 Praktikant
24. juli 2002 - 15:11 Der er 28 kommentarer

opdatering af database

Til opdatering bruger jeg recset.Update, men fejlmeddelelsen siger, at der er duplerende værdier, når jeg forsøger at update, men det er jo ikke en ny record, men bare opdatering af en eksisterende, hvor jeg skriver den samme primærnøgle ind, som posten allerede har.
Hvad gør jeg galt ??
Avatar billede cygnet Praktikant
24. juli 2002 - 15:12 #1
Svært at sige - hvorfor behøver du overhovedet at rode med din primærenøgle ?
Avatar billede eagleeye Praktikant
24. juli 2002 - 15:14 #2
Jeg vil gætte på du ligger nogle data ind i en kolonne, som også er lagt ind i en anden record. Og kolonnen er sat til Dupletter Ikke Tilladt.
Avatar billede nanna31 Praktikant
24. juli 2002 - 15:17 #3
Jamen jeg retter jo bare i en eksisterende record (uden dog at ændre noget), og tilføjer derfor intet nyt til databasen?
Avatar billede tmceu Praktikant
24. juli 2002 - 15:22 #4
Smid lige den præcise fejlmeddelelse...
Avatar billede nanna31 Praktikant
24. juli 2002 - 15:23 #5
Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E2F)
[Microsoft][ODBC Microsoft Access-driver] 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.
/SteenAsp/Developing_inputmodul_2/Redigering/writ_rec.asp, line 38
Avatar billede eagleeye Praktikant
24. juli 2002 - 15:26 #6
Du forsøger ikke at sætte nogle data ???
rs("id) = rs("id") ???
Avatar billede tmceu Praktikant
24. juli 2002 - 15:26 #7
Eller er kommet til at stoppen en.AddNew ind?
Avatar billede nanna31 Praktikant
24. juli 2002 - 15:28 #8
Jeg kan selvfølgelig godt oprette en anden primærnøgle, og så bare manuelt tjekke for dubletter den nuv. kolonne, men det er da lidt underligt at en update, som man ikke ændre noget i, gi'r denne fejlmeddelelse - det er som om den ikke fatter, at den skal erstatte den, der er magen til den i databasen og derfor ikke bliver en duplet.
Avatar billede nanna31 Praktikant
24. juli 2002 - 15:28 #9
nej AddNew jeg sat ' foran :)
Avatar billede nanna31 Praktikant
24. juli 2002 - 15:29 #10
Men det var et logisk bud :)
Avatar billede eagleeye Praktikant
24. juli 2002 - 15:31 #11
Må vi se et udsnit af koden som åbner recordset og til du laver update?
Avatar billede nanna31 Praktikant
24. juli 2002 - 15:33 #12
<body bgcolor="#BBBBBB" text="#000000" leftmargin=0 topmargin=0>
<%
Set Forbindelse = Server.CreateObject ("ADODB.Connection")
set rec = server.createobject("ADODB.recordset")
Forbindelse.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("db.mdb")
rec.Open ("quiz"), Forbindelse, 2, 3

' if request("quer") = "add" then rec.Addnew

rec("opdateret") = Now()

rec("aar_uge") = request("aar")&request("uge")

for i = 1 to 6

  select case i
        case 1: char = "a"
      case 2: char = "b"
      case 3: char = "c"
      case 4: char = "d"
      case 5: char = "e"
      case 6: char = "f"
  end select

  rec("oplaeg_"&char) = Request("oplaeg_"&char)
  rec("spm_"&char)    = Request("spm_"&char)
  rec("svar1_"&char)  = Request("svar1_"&char)
  rec("svar2_"&char)  = Request("svar2_"&char)
  rec("svar3_"&char)  = Request("svar3_"&char)
  rec("korrekt_"&char)= Request("spm"&i)
  rec("uddyb_"&char)  = Request("uddyb_"&char)

next

rec.Update
rec.Close
set rec=Nothing
Forbindelse.Close
set Forbindelse=Nothing%>

        <table border=0 cellspacing=1 cellpadding=0 width=100% height=100% align="center">
          <tr height = 20%>             
                <td align="center">
                <% if request("quer") = "add" then %>
                    <b>Runden er nu gemt!</b>                       
                <% elseif request("quer") = "edit" then %>
                    <b>Runden er nu opdateret!</b>
                <% end if %>
              </td>
            </tr>           
        </table>

</body>
Avatar billede eagleeye Praktikant
24. juli 2002 - 15:38 #13
Du har denne linie jeg ved ikke som det har noget at sige men det er den enste linie hvor du bruger i og ikke char:
rec("korrekt_"&char)= Request("spm"&i)
Avatar billede nanna31 Praktikant
24. juli 2002 - 15:40 #14
Sådan skal den være, det betyder ikke noget her
Avatar billede tmceu Praktikant
24. juli 2002 - 15:41 #15
Du laver da en opdatering af posten, faktisk hele 6 så vidt jeg lige kan se. Er du sikker på, at du efter dit 6. gennemløb af din For..Next ikke har en post der indeholder redundante værdier ?

Jeg kan ikke helt forstå hvad du vil med den For...Next. Det er jo kun værdierne efter sidste gennemløb der bliver opdateret.
Avatar billede nanna31 Praktikant
24. juli 2002 - 15:46 #16
Det kort af det lange drejer sig om, hvor vidt det er muligt at updatere en primærnøgle med .Update  uden at have ændret den.
Avatar billede tmceu Praktikant
24. juli 2002 - 15:52 #17
Den korte er: Ja, du kan godt opdatere en post uden at ændre i den. Og mht. primærnøgle, så skal der være en, for hvordan skal den ellers kunne identificere den post der skal opdateres :-)

Den lange: Det ser bare ikke ud til, at du ikke opdaterer. Din kode indikerer at du faktisk laver en opdatering af felterne i posten i din For...Next, inden du laver din .Update.
Avatar billede eagleeye Praktikant
24. juli 2002 - 15:53 #18
Ja det kan du godt så lænder der ikke er en anden record som har samme indhold hvis du har sat Indexseret til: Ja-Ingen dupletter


Eks.
ID navn (primær)
1  Eagleeye
2  nanna31

Hvis du vil rette record ID=2 og sætter navnet til Eagleeye får du den fejl du får, ændre du det til tmceu får du ingen fejl.
Avatar billede tmceu Praktikant
24. juli 2002 - 15:53 #19
Og hvis jeg lige skal svare på spørgsmålet som du reelt formulerede det:

Nej, du kan ikke opdatere værdien af primærnøglen, hvis dette vel at mærke er et autonummer felt.
Avatar billede tmceu Praktikant
24. juli 2002 - 15:54 #20
Ergo: navnet eagleeye er forbundet med fejl, hvorimod tmceu ikke er :-)
Avatar billede nanna31 Praktikant
24. juli 2002 - 15:56 #21
Ka' det være fordi, jeg ikke har selectet nogen record oppe i rec.open ???
Avatar billede eagleeye Praktikant
24. juli 2002 - 15:59 #22
Jeps det er derfor.. du mangler at gå ned til den record du vil rette. ;)
Avatar billede eagleeye Praktikant
24. juli 2002 - 16:01 #23
gemmer du ID på recorden i formen??  så kan du gøre det med SQL ved rs.open:


rec.Open "SELECT * FROM quiz WHERE ID="&request("id"), Forbindelse, 2, 3
Avatar billede nanna31 Praktikant
24. juli 2002 - 16:06 #24
Nemlig :)
Avatar billede tmceu Praktikant
24. juli 2002 - 16:09 #25
Det bør vel ikke være problemet eller ?

Når du angiver ("quiz") ved åbning af recordsettet, vil den hente tabellen quiz og stille sig ved første post. Derfor forstår jeg ikke hvis det skulle være fejlen i denne sammenhæng.
Avatar billede eagleeye Praktikant
24. juli 2002 - 16:22 #26
Hvis form'en hendter data fra record 7, når man så åber ned rec.Open så står den på en anden record... Hvis man ikke ændre data for primær nøglen så kommer fejlen, Da record 7 og record 1 nu har samme indhold..
Avatar billede tmceu Praktikant
24. juli 2002 - 16:23 #27
Enig, jeg skulle bare lige forstå hvad I mente :-)
Avatar billede nanna31 Praktikant
19. februar 2006 - 16:54 #28
Jeg savner et svar for at kunne lukke spørgsmålet :-)
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
Kurser inden for grundlæggende programmering

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