Avatar billede frida Nybegynder
16. august 2001 - 17:48 Der er 14 kommentarer og
1 løsning

FEJLMELDING - HVORFOR

Kan nogen forklare mig, hvorfor jeg får denne esked? 

Microsoft OLE DB Provider for ODBC Drivers fejl \'80040e14\'

[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.



Min adgang til databasen er via html og asp. Den tabel der skal indsættes i er en relation ml. to andre tabeller og den indeholder kun to fremmednøgler.
Alt fungerer perfekt - jeg kan bare ikke indsætte
de samme oplysninger i den to gange. Jeg har prøvet at
fjerne indekset og jeg har prøvet med indeksering, hvor dubletter tillades  - men jeg får ovenstående svar i alle tilfælde.

Hvad er det nu for noget???

Avatar billede tmceu Praktikant
16. august 2001 - 17:58 #1
Fejlen ligger i Access tabellen, hvor du (eller en anden) har defineret et/flere felter som indekserede og med Nej i tillad dubletter
Avatar billede frida Nybegynder
16. august 2001 - 20:26 #2
- Jamen - jeg har jo netop ikke defineret felterne
som indekserede - og eller med Nej i tillad dubletter. Så ville jeg kunne forstå at den laver vrøvl. Jeg har - som skrevet - prøvet 1. at undlade indeksering og 2 indeksering og ja - tillad dubletter. Men så er det at denne famøse
fejlmelding kommer - og det forstår jeg ikke.
Avatar billede tmceu Praktikant
16. august 2001 - 20:46 #3
Undskyld, havde ikke læst dit spørgsmål godt nok. Så prøv at kontrollere den primære nøgle (markeret med en nøgle til venstre for feltnavnet). Hvis et felt er defineret som primær nøgle, må det ikke indeholde dubletter.
Avatar billede frida Nybegynder
17. august 2001 - 11:12 #4
Hej tmceu

Det du siger - betyder det følgende:

Når jeg har en relationstabel mellem tabel1 og tabel2, som indeholder disse to tabellers
primærnøgler som fremmednøgler - og jeg så siger at disse to fremmednøgler skal være primærnøgler
i min relationstabel - Så skal jeg i relationstabellens fremmed/primærnøgler
afkrydse i nej til dubletter??.

frida

Avatar billede tmceu Praktikant
17. august 2001 - 18:22 #5
Nej ikke helt. Det jeg mente var, at en primær nøgle i sig selv betyder dubletter = nej i feltet/-erne som er primær nøgle. Jeg kan ikke lige helt gennemskue den med dine fremmednøgler, da jeg ikke kender tabellerne. Prøv at kigge om du har defineret en primær nøgle på den tabel du vil indsætte i. Har du det, ligger problemet sandsynligvis der. I modsat fald, prøv at vise dine relaterede tabeller (bare nøglerne).
Avatar billede frida Nybegynder
19. august 2001 - 13:39 #6
Jeg vil forsøge at forklare:
Jeg har ialt 3 tabeller.
De 2 er Tabel_Reservation(primærnøgle= resnr) Tabel_Bord(primænøgle= bordnr). Disse
er mange til mange forhold, hvorfor jeg har en 3. tabel som de relaterer til: Tabel_Bordplan. Den har jo så resnr og bordnr som fremmednøgler og da
hver tabel skal indeholde en primærnøgle er disse tabel_Bordplans primærnøgler.
(Jeg har selvfølgelig også alle de andre tabeller, som hører til et bordbestillingssystem)
Hvis jeg opretter en bordreservation fungerer alt perfekt. Jeg skriver mit navn,tlf, dato, tid og
antal personer jeg ønsker at bestille til, og hvis der er ledige borde lægges det fint i tabellerne.
Jeg kan foretage alle de reservationer hjertet begærer MEN jeg kan ikke foretage 2 ens reservationer.
Jeg forestiller mig at jeg har bestilt et bord til en given dato til 4 personer - og det er OK. Jeg får nu lyst til at oprette yderligere en reservation til samme dato og tidspkt og til 4 personer dvs. den bliver præcis som den første. Det kan jeg ikke - det er her den melder fejl om dubletter.
Da det jo er et unikt resnr fra Tabel_Reservation og ligeledes et unikt bordnr fra Tabel_Bord,
som skal lægges i relationstabellen Tabel_Bordplan - vil der jo ikke opstå dubletter. Men det påstår databasen altså?!.
Og det forstår jeg altså ikke en disse af........
Jeg ved godt at det måske ikke er så relevant at oprette 2 præcis ens reservationer - men det
er et spørgsmål for mig om at forstå, hvorfor det ikke kan lade sig gøre! Derfor vil jeg gerne
løse problemet.
Håber at jeg har forklaret mig tydeligt.....
Avatar billede tmceu Praktikant
19. august 2001 - 18:42 #7
Har du mulighed for at smide et link til databasen, eller evt. sende den vial mail til TMC@ofir.dk ? Jeg tror ikke jeg kan hjælpe dig videre, uden at se tabellerne. Alt det du gør lyder rigtigt nok, men der må være noget du har overset.

Hvis der er noget privat i databasen, kan du evt. tage en kopi af databasen og slette alt dette først.
Avatar billede frida Nybegynder
20. august 2001 - 22:12 #8
Jeg sender hermed glad og gerne min db til dig.
Avatar billede tmceu Praktikant
22. august 2001 - 19:32 #9
Du har i tabellen bordplan 2 felter; reservationsnr og bordnr, som begge er en del af den primære nøgle. Det betyder at du ikke må indsætte den samme kombination af reservationsnr og bordnr, da den primære nøgle skal være en unik kombination af de 2 felter. Dette er til gengæld også det eneste tilfælde hvor du bør kunne få denne fejl i din database.

Du må derfor godt ens reservationer, så længe du ikke laver ulovlige kombinationer af ovenstående.

Min konklusion er, at databasen er opbygget korrekt udfra min forståelse af hvad du ønsker at kunne. Problemet må derfor ligge i ASP koden, måske noget omkring reservationsnr. feltet, da dette er et autonummer felt. Kan du vise den ASP kode du bruger til at indsætte posterne med ?
Avatar billede frida Nybegynder
22. august 2001 - 23:32 #10
Min ASP kode ser sådan her ud:


function indsaetBordplan()

Command.CommandText=\"insert into Bordplan(reservationsnr,bordnr)
select  reservationsnr,bordnr  from Reservation r  where r.antalPersoner LIKE \'%\"&request(\"antal\")&\"%\' and r.dato LIKE \'%\"&request(\"dato\")&\"%\'  and  r.tid LIKE \'%\"&request(\"tid\")&\"%\'  and  r.Knavn LIKE \'%\"&request(\"navn\")&\"%\'and  r.Ktlf LIKE \'%\"&request(\"tlf\")&\"%\'\"

        Command.CommandType = adCmdText
        Command.Execute

end function

Oprindeligt hed koden blot: where r.Knavn LIKE \'%\"&request(\"navn\")&\"%\'and  r.Ktlf LIKE \'%\"&request(\"tlf\")&\"%\'\"
men så skulle navn og tlfnr jo ændres, da der ikke
må være dubletter. Derfor føjede jeg de øvrige til - og nu går det godt, hvis jeg ændrer fx. 1 min i tiden - eller en dag i datoen. MEN det er jo ikke meningen.
Avatar billede tmceu Praktikant
24. august 2001 - 02:46 #11
Jeg tror din fejl skyldes dine testdata og at du har kunden med. Jeg har lagt mærke til, at eks. dine 2 sidste reservationer ligger på kunden Bodil Nielsen. Hvis du prøver at oprette en identisk reservation (dato, tid, antal personer) med samme kunde, vil ovenstående SELECT give 2 rækker og dermed vil den forsøge at indsætte både den nye- og den tidligere reservation på samme kunde. Dermed vil du indsætte en ny post samt en der allerede eksisterer og dermed få 2 identiske poster = fejl.
Avatar billede frida Nybegynder
24. august 2001 - 19:45 #12
Jeg er ikke helt sikker på at jeg er med.......! Jeg har prøvet forskellige kombinationer bl.a, som du foreslår - at udelade kundes navn og/eller tlf. Det er helt lige meget, hvilke attributter jeg udelader eller medtager - jeg får samme fejlmelding. Og jeg kan jo heller ikke sammenligne med bordnr i tabel Bord - da disse
indeholder ens data - altså fx. er der 5 borde, hvor der er plads til 4 personer.
Det virker som sagt bedst, hvis jeg sammenligner med alle indtastningsfelter - så skal der bare lige ændres i een af dem, hvorimod at hvis jeg fx. ikke har kunden med i min \'where-sætning\', så SKAL jeg ændre kundenavnet - og så er jeg jo lige vidt.
Det er i og for sig også OK - HVIS BARE JEG FORSTOD DET!!! :-)
Som du kan se i min database, er det meningen at medarbejderen også skal kunne indtaste, når der kommer en reservation over telefonen. Hvis en
person bestiller til f.eks. 8 personer, og man er nødt til at sætte to 4-personers borde sammen, hvilket vil sige at man jo skal reservere 2 borde
på samme navn, tlf, dato, tid og antal. Det kan ikke lade sig gøre!!
Man vil være nødt til at bestille det ene til ex. kl 12.00 og det andet til 12:01 - og det virker jo lidt dumt.
Jeg kan ikke gennemskue, hvad det er jeg skal - og jeg forstår ikke helt, hvis
ikke det kan lade sig gøre - vi kan jo da komme på Månen!

Avatar billede tmceu Praktikant
27. august 2001 - 15:31 #13
Jeg mente ikke at du skulle udelade kundens navn/telefon fra din select, det var blot en forklaring på, hvorfor din insert går galt. I en simplificeret udgave af din database, forestil dig at du har flg. i tabellen reservation:

bordnr    knavn        ktelf    dato
4          Bodil Nielsen 44444444 2001-10-12
5          Bodil Nielsen 44444444 2001-10-12

Den nederste post er din nye reservation, den øverste en gammel/eksisterende reservation.

Når du så laver din select dit testmiljø, vil du få en fejl fordi din select vil vælge begge poster og forsøge at indsætte dem i bordplan. Den første post er den der giver problemet, da den allerede findes i tabellen.

Du kan prøve at lave samme reservation (antal, dato, tid m.v.) på 2 forskellige kunder, så vil det gå godt.

Og problemet med at reservere 2 borde til den samme kunde på samme tid, mener jeg du skal løse ved at lave dit select statement lidt om;

select  reservationsnr,bordnr  from Reservation r  where r.antalPersoner LIKE \'%\"&request(\"antal\")&\"%\' and r.dato LIKE \'%\"&request(\"dato\")&\"%\'  and  r.tid LIKE \'%\"&request(\"tid\")&\"%\'  and  r.Knavn LIKE \'%\"&request(\"navn\")&\"%\'and  r.Ktlf LIKE \'%\"&request(\"tlf\")&\"%\' AND r.reservationsnr NOT IN(SELECT DISTINCT reservationsnr FROM Bordplan)\"

Den sidste tilføjelse sikrer, at du ikke kommer til at udvælge et reservationsnr med din select, som allerede er i tabellen bordplan.

Håber dette hjælper på både problemet og forståelsen :-)
Avatar billede frida Nybegynder
28. august 2001 - 08:01 #14
Det hjalp i aller højeste grad! -  Og jeg har faktisk også forstået din forklaring, så alt er idel lykke :-)
Jeg siger mange tak for hjælpen.

frida 

     
Avatar billede tmceu Praktikant
28. august 2001 - 08:40 #15
Det var så lidt.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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