16. august 2001 - 17:48Der 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.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
- 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.
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.
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??.
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).
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.....
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.
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 ?
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.
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.
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!
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:
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 :-)
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.