Avatar billede hwks Nybegynder
19. november 2004 - 23:49 Der er 14 kommentarer og
1 løsning

Indtaste data i relaterede tabeller

Hej

Jeg har en Access-database med to tabeller. De to tabeller hedder tbl_lemma og tbl_equiv. De to tabeller har en en-til-mange relation via felterne id_lemma og fr_lemma. Feltet id_lemma er primærnøgle i tabellen tbl_lemma og feltet fr_lemma er fremmednøglen i tabellen tbl_equiv og er af datatypen tal.

Det hele virker fint, når jeg indtaster data direkte i databasen
via en formular med en underformular. Når jeg gør det, indsætter
databasen automatisk et tal i feltet fr_lemma.

Det virker dog ikke, når jeg forsøger at indtaste data via en HTML-formular og en tilhørede ASP-fil. Der bliver skrevet ned i alle ønskede felter, men det tal, der automatisk skal indsættes i feltet fr_lemma (og som skaber en-til-mange-relationen i databasen) bliver IKKE automatisk indsat, når jeg indtaster data via mine HTML/ASP-formularer. Jeg får ingen fejlmeddelelse.

Koden ser således ud:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../db/xxxxxxx.mdb")
Conn.Open DSN

sql="INSERT INTO tbl_lemma (lemma, dkclass, dkmorph, dksyn, dkdef, dkex, dkcol, dkref, author, validation)"
sql=sql & " VALUES "
sql=sql & "('" & Request.Form("lemma") & "',"
sql=sql & "'" & Request.Form("dkclass") & "',"
sql=sql & "'" & Request.Form("dkmorph") & "',"
sql=sql & "'" & Request.Form("dksyn") & "',"
sql=sql & "'" & Request.Form("dkdef") & "',"
sql=sql & "'" & Request.Form("dkex") & "',"
sql=sql & "'" & Request.Form("dkcol") & "',"
sql=sql & "'" & Request.Form("dkref") & "',"
sql=sql & "'" & Request.Form("author") & "',"
sql=sql & "'" & Request.Form("validation") & "')"

on error resume next
conn.Execute sql,recaffected

sql="INSERT INTO tbl_equiv (equiv, equivclass, equivmorph, equivsyn, equivdef, equivex, equivcol, equivref)"
sql=sql & " VALUES "
sql=sql & "('" & Request.Form("equiv") & "',"
sql=sql & "'" & Request.Form("equivclass") & "',"
sql=sql & "'" & Request.Form("equivmorph") & "',"
sql=sql & "'" & Request.Form("equivsyn") & "',"
sql=sql & "'" & Request.Form("equivdef") & "',"
sql=sql & "'" & Request.Form("equivex") & "',"
sql=sql & "'" & Request.Form("equivcol") & "',"
sql=sql & "'" & Request.Form("equivref") & "')"

on error resume next
conn.Execute sql,recaffected
if err<>0 then
  Response.Write("<h3>Desværre - det lykkedes ikke at indtaste en artikel!</h3>")
else
  Response.Write("<h3>Sådan - artikel indtastet!</h3><br><a href=http://www.xxxxx.dk/xxxxxxx.htm>Indtast ny artikel?</a><br>")
end if
conn.close
%>

Er der nogen, der har et forslag - jeg har bakset med det i ufattelig lang tid nu og som ASP-nybegynder er jeg på bar bund?

Henrik
Avatar billede tofte Juniormester
20. november 2004 - 08:56 #1
Du får ingen fejl, da du har skrevet on errer resume next, dette gør at den ikke viser, hvis der måtte være en fejl.

Fejlen er sikkert, at du glemmer at gemme indhold i det relaterede felt fr_lemma. Du er nødt til at få id-nummeret fra den første indsættelse, og gemme det i det relaterede felt. Ellers er de to poster jo ikke relaterede.

Du kan læse lidt om hvordan man gør på følgende side. http://activedeveloper.dk/artikler/default.asp?articleid=291
Avatar billede hwks Nybegynder
20. november 2004 - 14:08 #2
Hej tofte

Tak for dit svar.

Artiklen er lige i skabet - jeg kigger fluks på det og vender tilbage.

Endnu en gang - tak for dit svar :))

Henrik
Avatar billede hwks Nybegynder
20. november 2004 - 17:21 #3
Hej igen tofte

Jeg kan stadig ikke få det til at virke. Har også læst alle de andre indlæg om @@IDENTITY. Jeg har forsøgt at lave en opbygning som i artiklen, men er som sagt nybegynder. Får følgende fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'.

/testADD.asp, line 35

Linie 35 ser således ud:

conn.execute SQL

Hele koden ser således ud:

<%
SQL = "SET NOCOUNT ON; " & _
"INSERT INTO tbl_lemma (lemma, dkclass, dkmorph, dksyn, dkdef, dkex, dkcol, dkref, author, validation) VALUES, " & lemma & "," & dkclass & "," & dkmorph & "," & dksyn & "," & dkdef & "," & dkex & "," & dkcol & "," & dkref & "," & author & "," & validation &"); " & _
"SELECT @@IDENTITY;" & _
"INSERT INTO tbl_equiv (fr_lemma, equiv, equivclass, equivmorph, equivsyn, equivdef, equivex, equivcol, equivref) " & _
"VALUES (@@IDENTITY," & equiv & "," & equivclass & "," & equivmorph & "," & equivsyn & "," & equivdef & "," & equivex & "," & equivcol & "," & equivref & ");"

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../db/corplex.mdb")
Conn.Open DSN
conn.execute SQL
conn.close
Set conn = nothing

Kan du se, hvad jeg gør galt?

hwks
Avatar billede hwks Nybegynder
20. november 2004 - 17:32 #4
Hej igen Tofte

Fejlmeddelelsen

Microsoft JET Database Engine (0x80040E14)
Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'.

betyder (sakset fra http://www.adopenstatic.com/faq/80040e14.asp#scenario2a ):

Mismatched CommandTypeEnum value
When opening a recordset you can pass an optional CommandTypeEnum value (eg adCmdText, adCmdTable or adCmdStoredProc) to ADO to help it identify the source of your data. If you choose to specify a database table as your data source, but pass the CommandTypeEnum value for adCmdText, then you will receive the following error message. Either change the CommandTypeEnum to adCmdTable or adCmdTableDirect -or- use an SQL query as the source of your recordset.

hwks
Avatar billede tofte Juniormester
21. november 2004 - 14:16 #5
hmmm, en anden løsning som jeg er sikke på virker
SQL = "INSERT into tbl_lemma........"
conn.execute SQL
SQL="SELECT @@IDENTITY as lid"
set MyLem = conn.execute SQL
lemmaid=MyLem("lid")
SQL = "INSERT INTO tbl_equiv... (lemmaid,etandet felt...) VALUES ("&lemmaid&",....)

Håber du kan se ideen, det er nogen gange nødvendigt at fyre dem af en ad gangen
Avatar billede hwks Nybegynder
21. november 2004 - 15:46 #6
Hej tofte

Tak for din hjælp - jeg er meget taknemmelig.

Jeg prøver den du lige har foreslået. Send et svar - så vil jeg meget gerne give dig point, selvom jeg ikke helt har fået det til at virke endnu.

hwks
Avatar billede tofte Juniormester
21. november 2004 - 15:55 #7
det kommer her. Skriv endelig hvis det ikke virker
Avatar billede hwks Nybegynder
22. november 2004 - 00:57 #8
nope....det funker ikke.....jeg fatter det ikke...
Avatar billede tofte Juniormester
22. november 2004 - 10:49 #9
hvis du skriver hvad der ikke virker og hvad dem siger fejlen er, kan jeg måske hjælpe :-)
Avatar billede hwks Nybegynder
22. november 2004 - 18:16 #10
hæ hæ - efter at have siddet med det i en fire-fem timer i går gik jeg vist kold sidst på aftenen..

Du har ret - jeg får følgende fejlmeddelelse, som øjensynligt indikerer, at der er et eller andet galt med SQL-sætningen:

Microsoft VBScript compilation error '800a0401'

Expected end of statement

/testADD1.asp, line 30

SQL="INSERT INTO tbl_lemma (lemma, dkclass, dkmorph, dksyn, dkdef, dkex, dkcol, dkref, author, validation)" VALUES (" & lemma & "," & dkclass & "," & dkmorph & "," & dksyn & "," & dkdef & "," & dkex & "," & dkcol & "," & dkref & "," & author & "," & validation &")
----------------------------------------------------------------------------

Koden ser således ud:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../db/xxxx.mdb")
Conn.Open DSN

SQL="INSERT INTO tbl_lemma (lemma, dkclass, dkmorph, dksyn, dkdef, dkex, dkcol, dkref, author, validation)" VALUES (" & lemma & "," & dkclass & "," & dkmorph & "," & dksyn & "," & dkdef & "," & dkex & "," & dkcol & "," & dkref & "," & author & "," & validation & ")
conn.execute SQL
SQL="SELECT @@IDENTITY as lid"
set MyLem = conn.execute SQL
id_lemma=MyLem("lid")
sql="INSERT INTO tbl_equiv (fr_lemma, equiv, equivclass, equivmorph, equivsyn, equivdef, equivex, equivcol, equivref)" VALUES (" & fr_lemma &"," & equiv & "," & equivclass & "," & equivmorph & "," & equivsyn & "," & equivdef & "," & equivex & "," & equivcol & "," & equivref & ")
conn.execute SQL

conn.close
Set conn = nothing
%>

Kan du se, hvad der går galt....?

hwks
Avatar billede tofte Juniormester
22. november 2004 - 20:01 #11
SQL="INSERT INTO tbl_lemma (lemma, dkclass, dkmorph, dksyn, dkdef, dkex, dkcol, dkref, author, validation)" VALUES (" & lemma & "," & dkclass & "," & dkmorph & "," & dksyn & "," & dkdef & "," & dkex & "," & dkcol & "," & dkref & "," & author & "," & validation & ")

Der mangler et " til sidst. Sådan som du har skrevet det, betyder det, at alle felterne i databasen er af typen tal. Skulle der være et felt som er at typen tekst, skal du istedet skrive ' omkring feltet. Altså
SQL="INSERT INTO tbl_lemma (lemma, dkclass, dkmorph, dksyn, dkdef, dkex, dkcol, dkref, author, validation)" VALUES ('" & lemma & "','" & dkclass & ".........
men hvis alle felterne er ta, så er det fint
Avatar billede hwks Nybegynder
22. november 2004 - 20:58 #12
OK - alle felter er af typen tekst/notat - undtagen talfeltet fr_lemma. Jeg har rettet det hele igennem - men nu kommer den med en syntaksfejl...... hmmmmm:

Microsoft VBScript compilation error '800a03ea'
Syntax error
/testADD1.asp, line 30

SQL="INSERT INTO tbl_lemma (lemma, dkclass, dkmorph, dksyn, dkdef, dkex, dkcol, dkref, author, validation) VALUES ('"&lemma&"','"&dkclass&"','"&dkmorph&"','"&dksyn&"','"&dkdef&"','"&dkex&"','"&dkcol&"','"&dkref&"','"&author&"','"&validation&'")"
-------------------------------------------------------------------------------------
any ideas?
Avatar billede tofte Juniormester
22. november 2004 - 21:10 #13
ja, det sidste ' er kommet på den gale side af "

Jeg kan ikke lige finde andre fejl
Avatar billede hwks Nybegynder
22. november 2004 - 21:36 #14
det var da ufatteligt....jeg må jo være stæreblind.... har rettet det - men nu kommer den med en:

HTTP 500 - Intern serverfejl
Internet Explorer

det går sgu ikke for godt.... prøver lige nogle flere kombinationer....
Avatar billede hwks Nybegynder
23. november 2004 - 11:08 #15
hej igen... har bakset med det - får nu denne:

Microsoft VBScript compilation error '800a0401'

Expected end of statement

/testADD1.asp, line 33

set MyLem = conn.execute SQL
-------------------------^

Linje 33 ser stadig ud som i indlæg af 22/11-2004 18:16:45.....

alle forslag/slag over næsen eller hån er velkomne :)))
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