Avatar billede rune_daub Nybegynder
10. januar 2006 - 14:17 Der er 20 kommentarer og
1 løsning

Insert into uden error

Hej med jer

Jeg har lavet noget i stil med:
Private Sub SubSystemName_Change()
Dim strSQL As String
    strSQL = "INSERT INTO tblDate (ErrorNumb, Happening, MyDateTime) VALUES (" & Me.ErrorID & ", 1, #" & Date & "#)"
    Debug.Print strSQL
    CurrentDb.Execute strSQL
End Sub

Mit problem er at jeg ikke kan se at den opretter en ny post i tblDate som den skal. Faktisk så kommer den ikke engang med en fejlmelding. Hvilket vil sige at det virker som om den opretter en post ud i det blå.

Anyone?

Ud over de 3 kolonner (ErrorNumb, Happening, MyDateTime), har jeg en fjerde nøgle kolonne som hedder DatesID. Det er en autonummereringskolonne. Skulle den ikke udfylde sig selv automatisk? Det havde jeg fået af vide. Kan det være problemet?
Avatar billede terry Ekspert
10. januar 2006 - 14:47 #1
You do not need to include your autonumber fields. Normally you should use '" & Date & "')" with dates when inserting.

And if you always use current date for the value of MyDateTime, then you could just set the default value to Now() in table design.
Avatar billede rune_daub Nybegynder
10. januar 2006 - 15:01 #2
since date is not part of the string it should be incased in ## . Thats what I been told anyways.
And I cant use default value for Now(), since it would break up the rest of the functions I have running on this table.

But what you are saying is that basicly my function does look correct?
Avatar billede terry Ekspert
10. januar 2006 - 15:03 #3
No, I'm saying use ' instead of #
Avatar billede sjap Praktikant
10. januar 2006 - 15:05 #4
Hvis det er et funktionskald, behøver du ikke "havelågerne" - (eller '  - jeg forstår i øvrigt ikke forskellen):

strSQL = "INSERT INTO tblDate (ErrorNumb, Happening, MyDateTime) VALUES (" & Me.ErrorID & ", 1, Date())"
Avatar billede sjap Praktikant
10. januar 2006 - 15:06 #5
Altså hvis DATE er et funktionskald.
Avatar billede rune_daub Nybegynder
10. januar 2006 - 15:28 #6
Okay... så jeg har fjernet havelågerne og det ser nu således ud.
Private Sub SubSystemName_Change()
Dim strSQL As String
    strSQL = "INSERT INTO tblDate (ErrorNumb, Happening, MyDateTime) VALUES (" & Me.ErrorID & ", 1, Date())"
    Debug.Print strSQL
    CurrentDb.Execute strSQL
End Sub

Men resultatet er det samme... At jeg hverken får en fejl, eller en oprettet post i tabellen. Det giver simpelthen ikke mening for mig. Burde funktionen ikke fejle, hvis den IKKE kunne lægge data i tabellen? For jeg kan jo se at der ikke ligger nogen nye data i tblDate. Mangler jeg en write/submit funktion?
Avatar billede terry Ekspert
10. januar 2006 - 15:38 #7
try
docmd.runsql strSQL
Avatar billede rune_daub Nybegynder
10. januar 2006 - 16:12 #8
docmd.runsql strSQL virkede meget bedre. Nu prøver den i det mindste at skrive til tblDate.

Nu får jeg bare følgende fejlmeddelelse:
Microsoft Access can't append all the records  in the append query.
Microsoft Access set 0 field(s) to Null due to type conversion failure, and it didnt set 1 record(s)  due to key violations, 0 record(s) due to lock violations, and 0 record(s)  due til validation rule valiations. Do you want to run the action query anyways? YES-NO-HELP....
Avatar billede sjap Praktikant
10. januar 2006 - 17:29 #9
Dú har angivet en nøgle på en eller flere af felterne i tabellen tblDate, og du forsøger at opdatere med et tal i nøglefeltet, som der allerede findes i tabellen. Derfor får du en fejl. Du bør derfor lige vurdere dine nøgler igen.
Avatar billede rune_daub Nybegynder
11. januar 2006 - 06:52 #10
Jeg har ingen konfliktende nøgler.
Følgende er kolonnerne i tblDate
DatesID - Unik tæller.
ErrorNumb - Er nøgle til min hoved tabel (tblRecords).
Happening - Er opslag til tblHappening
MyDateTime - dato felt.

Eftersom DatesID bare er en tæller... Intet andet, så ligger problemet ikke her.
ErrorNumb er en 1 til mange relation, hvor der kan være en post i tblRecords til mange poster i tblDate. Ergo kan jeg indsætte lige så mange ens tal i denne post, så længe der er en tilsvarende post i tblRecords.
Happening slår op i tblHappening og vælger en hændelse. Happening er et tal som relatere til et unikt tal i tblHappening. Det er en mange til en relation.
MyDateTime er ikke en nøgle.
Det underlige er jo at jeg ikke gør noget i scriptet, som jeg ikke kan gøre manuelt.. hvilket er den metode som jeg hele tiden har brugt.

Nå men... det kunne også bare være det er et tegn på at jeg skulle forsætter med den manuelle metode. Det var såmen også kun for at lette på den manuelle arbejdsgang en lille smule. Smid et svar herinde. Så deler jeg pointene mellem jer to.. (sjap og terry)
Avatar billede sjap Praktikant
11. januar 2006 - 09:17 #11
Men fejlmeddelelsen siger jo at der er en nøglekonflikt, så der må være en et eller andet sted.

Prøv at åbne tabellen i design-mode og tag felterne et af gangen (det er nok kun ErrorNumb eller Happening), og se om der nederst ud for "Indekseret" står f.eks. "Ja - Ingen dubletter".
Avatar billede rune_daub Nybegynder
11. januar 2006 - 12:31 #12
Det har jeg gjort.
Og jeg har allerede indtastet over 500 poster i tabellen, hvor der er masser af eksempler på at der er dubletter i begge kolonner.
Det er derfor det ikke giver mening.

Jeg har indsat scriptet på en main form, hvor jeg har en subform til tblDate. Det vil sige at tblDate er aktiveret når jeg forsøger at køre scriptet. Kan det havde noget med det at gøre? At tabellen simpelhen er låst? Fordi den er åben som en subform?
Avatar billede rune_daub Nybegynder
11. januar 2006 - 12:34 #13
Og jeg har lige dobbelt tjekket igen for nøglekonflikter. Det eneste jeg har der er "Ja - Ingen dubletter" er min unikke key som hedder DatesID og som bare er en standard stigende autonummerering.
Avatar billede rune_daub Nybegynder
11. januar 2006 - 12:44 #14
Jeg tror jeg har fået lokaliseret fejlen til Happening.
Problemet med Happening er at det er en Dropdown menu, hvor jeg har en række valgmuligheder i. De valgmuligheder hentes fra tblHappening som består af HappeningID og HappeningText.
Det er HappeningID som er en unik key, som er bindeledet mellem tblDate og tblHappening. Altså er tal. Men fordi Happening 1 som er lig med "recieved" og flere ordre i tblDate kan være recieved, så burde der også være mulighed for at sætte et 1 tal ind for at binde tblDate og tblHappening sammen. Det er der også ifølge mit database setup.

Men jeg forsøgte lige, for at se om jeg kunne ændre fejlbeskeden som jeg beskrev ovenfor, at ændre 1 tallet til en tekst. Og nu får jeg istedet en type conversion error og ingen key violations. Ergo må det være Happening der er problemet. Så forstår jeg bare ikke hvorfor jeg ikke kan få lov til at indsætte det 1 tal, når der er et hav af 1 taller i tblDate i forvejen.
Avatar billede sjap Praktikant
11. januar 2006 - 17:56 #15
Rune > Jeg ser gerne nærmere på problemet, hvis det altså er muligt for dig at sende den til mig. Evt. kan du jo nøjes med at sende den del af databasen, der skal til for at kunne se problemet.

sjap9000 snabela hotmail punktum com
Avatar billede rune_daub Nybegynder
12. januar 2006 - 08:24 #16
Tak sjap.. jeg sender den så hurtigt som muligt...
Avatar billede sjap Praktikant
12. januar 2006 - 18:13 #17
OK
Avatar billede rune_daub Nybegynder
13. januar 2006 - 09:58 #18
sjap. Den er sendt. og tak for hjælpen.
Avatar billede sjap Praktikant
14. januar 2006 - 23:04 #19
Jeg har fået fat i databasen (videresendte den til en adresse med mindre skrap kontrol).

Men jeg kan ikke lige se problemet. Når jeg vælger et punkt i combo-boksen "Choose System Name", så bliver jeg gjort opmærksom på at jeg er ved at tilføje 1 række, og at jeg ikke kan fortryde det - og det er vel lige det, du er ude efter. Det fungerer fint her.

tblDate ser lige nu sådan her ud.

DatesID    ErrorNumb    Happening    MyDateTime
170    92    Error Recieved    13-01-2006
171    92    Error sent to IT Helpdesk    13-01-2006
172    92    Error solved    13-01-2006
175    92    Error Recieved    14-01-2006
176    92    Error Recieved    14-01-2006
177    92    Error Recieved    14-01-2006
178    92    Error Recieved    14-01-2006
179    92    Error Recieved    14-01-2006
180    92    Error Recieved    14-01-2006
181    92    Error Recieved    14-01-2006
182    92    Error Recieved    14-01-2006
183    92    Error Recieved    14-01-2006
184    92    Error Recieved    14-01-2006
185    92    Error Recieved    14-01-2006
186    92    Error Recieved    14-01-2006
187    92    Error Recieved    14-01-2006
188    92    Error Recieved    14-01-2006
189    92    Error Recieved    14-01-2006
190    92    Error Recieved    14-01-2006
191    92    Error Recieved    14-01-2006
192    92    Error Recieved    14-01-2006
Avatar billede rune_daub Nybegynder
16. januar 2006 - 09:10 #20
Og du fik det svar uden at skulle rette i noget overhovedet?
Meget underligt. For jeg får rigtigt nok også boksen op om at jeg er ved at tilføje en post.. men umiddelbart derefter får jeg så også den fejlbesked der har været diskussionen her de sidste par kommentarer.
Kan der være forskel på om jeg bruger Access 2003 kontra den version du bruger?
Avatar billede sjap Praktikant
16. januar 2006 - 18:23 #21
Det ved jeg ikke - men jeg har brugt version 2000. Det er selvfølgelig lidt mystisk. Jeg ved ikke om programmet gør noget ved databasen (så det virker), men jeg kan da godt lige returnere den - så kan du se om det gør nogen forskel.
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