@ndersMedlem sedan juni 200032 969 inlägg 1) Det är för att alla fältnamnen ska bli unika. Jag vet att alla fältnamn som slutar på samma ID hör ihop, och skall med i samma post i INSERT / UPDATE.
2) Eftersom du hade kallat dina checkboxar för leggatill så vet jag följande:
* Alla poster som skall läggas till i databasen har en sak gemensamt. Det finns ett fält som börjar med leggatill och slutar med ett numeriskt ID.
Jag har ju en loop som loopar igenom alla formulärfält som postats från formuläret.
Med if-satsen kontrollerar jag: "Om formulärfältet börjar på leggatill", då vet jag att det är en ny post som skall in i databasen"
3) Det jag gör är att jag skapar en variabel som innehåller den numeriska delen av formulärfältsnamnet. Det är bara för att jag skall veta vilket FluidID som skall in i databasen. Formulärfältets namn kan ju vara exempelvis leggatill23. Efter den replaceraden du undrar över har jag en variabel som heter FluidID och innehåller värdet 23. Jag hade lika gärna kunnat skriva FluidID = Request.Form(formObj) där om jag hade tänkt på det sättet. Det hade nog gjort det enklare att förstå. ;)
4) Det finns en konstant som heter adExecuteNoRecords som har värdet 128. Om man anger det värdet då man exekverar frågor som inte ska returnera någonting (INSERT/UPDATE/DELETE alltså), så kan man ange den konstanten för att tala om för databasmotorn att "här ska minsann inget recordset skapas, för jag tänker ändå inte använda något". Gör man inte på detta sätt så skapas faktiskt ett recordset när SQL-frågan exekveras, även om du inte tar emot något. Det är en ren prestandagrej alltså. Gör inget om man glömmer, men kommer man ihåg det kan det aldrig vara fel att ange.
(nu ska jag läsa ditt senaste inlägg).
Mvh
@ndersMedlem sedan juni 200032 969 inlägg Jag får tyvärr HTTP/1.1 New Application Failed när jag försöker komma åt din sida, så jag kan inte se hur det ser ut riktigt.
Det är framför allt knapp_i3.asp jag vill snegla på i min webbläsare, jag tycker att ASP-koden ser ut att kunna fungera.
Jag kikar in om ett tag.
@ndersMedlem sedan juni 200032 969 inlägg Nu har jag kommit in på sidan och också kommit på varför det inte fungerade. Följande:
If left(Request.Form(formObj),9) = "leggatill" Then
Byts till:
If left(formObj,9) = "leggatill" Then
Det var jag som klantade mig. Det var ju fältnamnet inte fältvärdet som skulle börja med leggatill.
Jag har gjort ovanstående ändring i din asp-fil. ;)
Dock har du nu fått ett annat problem;
Microsoft JET Database Engine error '80004005'
You cannot add or change a record because a related record is required in table 'tblPersonuppgifter'.
/vatskebalans/uppdatera2.asp, line 13
Vad har du satt upp för relationer?
@ndersMedlem sedan juni 200032 969 inlägg Då får du se till att du har med PatID i din INSERT, eftersom du har tvingande relationer.
Mvh
plelkesMedlem sedan mars 2002823 inlägg @nders, som vanligt stor tack för den genialiska lösning.
Nu fattar jag nästan allt :i ....
i strSQL
strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym) VALUES('" & now() & "','" & lngFluidID & "','" & Request.Form("volym" & lngFluidID) & "')"
förstår jag inte varför i fältet Volym skall skrivas in
& Request.Form("volym" & lngFluidID) &
Textfältet där jag anger volymen heter ju:
volym" & objRS("FluidID") &
@ndersMedlem sedan juni 200032 969 inlägg Hej!
Jo, när textfältet skapas, då skapas det mycket riktigt med volym" & objRS("FluidID") . Det innebär att formulärfältet då ser ut någonting sånt här i HTML-koden:
<input type="text" name="volym17">
När vi sedan ska hämta in värdena igen på sidan som ska prata med databasen, så vet jag ju egentligen bara två saker:
- Det finns ett fält vars namn börjar på leggatill, och ett motsvarande fält som börjar på volym.
- Dessa två fält motsvarar varandra, och slutar på samma siffra, dvs i detta exempel 17.
I koden på sidan som tar emot formulärfälten så har jag ju inte kvar något recordset för att ta reda på ID, utan ID står ju faktiskt sist i formulärfältsnamnen. lngFluidID är ju bara ett variabelnamn som innehåller vätskeid som har plockats ut, på samma sätt som objRS("FluidID") innehåller vätske-id när du loopar ut värdena från ditt recordset.
Jag vet inte om det blev något klarare, det är lite klurigt att förklara. Men då är det ju bara att fråga igen. ;)
Mvh
plelkesMedlem sedan mars 2002823 inlägg Nja, kan nog inte säga att jag har blivit klokare...
lngFluidID är ju bara ett variabelnamn som innehåller vätskeid som har plockats ut, på samma sätt som objRS("FluidID") innehåller vätske-id när du loopar ut värdena från ditt recordset
Så längt hänger jag med, men jag fattar inte varför ajg inte kan hellt enkelt använda mig av INPUT NAME för txt-fältet ???
@ndersMedlem sedan juni 200032 969 inlägg Du använder input name på text-fälten. Dock är det så, att alla textfälten måste ha unika namn för att du ska kunna veta vilken volym som hör till vilken vätska. Därför har jag lagt med vätske-idt som en del av namnet.
plelkesMedlem sedan mars 2002823 inlägg
Då får du se till att du har med PatID i din INSERT, eftersom du har tvingande relationer.
Jag har lagt till en formulär:
<form name="pnummer" method="post" action="">
Patientens personnummer: <input name="personnr" type="text">
</form>
Och på själva sidan som lägger till ser koden ut:
<%
Set vatskeb = Server.CreateObject( "Adodb.Connection" )
vatskeb.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\vatskebalans\db\vbalans.mdb")
vatskeb.ConnectionString = "Data Source='" & MdbFilePath & "'"
vatskeb.open
pnr= Request.Form("personnr")
For each formObj in Request.Form
If left(formObj,9) = "leggatill" Then
lngFluidID = Replace(Request.Form(formObj), "leggatill", "")
strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym, PatID) VALUES('" & now() & "','" & lngFluidID & "','" & Request.Form("volym" & lngFluidID) & "', '" & pnr & "')"
vatskeb.Execute strSQL, , 128
End if
Next
vatskeb.close
Set vatskeb = Nothing
Response.Redirect "lista_databas.asp"
%>
Får fel
Microsoft JET Database Engine error '80040e07'
Data type mismatch in criteria expression
@ndersMedlem sedan juni 200032 969 inlägg Vad är det för datatyp på fältet PatID? Tal? I så fall, ta bort apostroferna runt värdet i SQL-frågan:
strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym, PatID) VALUES('" & now() & "','" & lngFluidID & "','" & Request.Form("volym" & lngFluidID) & "', " & pnr & ")"
Mvh
plelkesMedlem sedan mars 2002823 inlägg stämmer med tal....
Men nu får jag
Microsoft JET Database Engine error '80040e14'
Syntax error in INSERT INTO statement.
/vatskebalans/add_databas.asp, line 15
på koden
<%@LANGUAGE="VBSCRIPT" "%>
<%
Set vatskeb = Server.CreateObject( "Adodb.Connection" )
vatskeb.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\vatskebalans\db\vbalans.mdb")
vatskeb.ConnectionString = "Data Source='" & MdbFilePath & "'"
vatskeb.open
pnr= Request.Form("personnr")
For each formObj in Request.Form
If left(formObj,9) = "leggatill" Then
lngFluidID = Replace(Request.Form(formObj), "leggatill", "")
strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym, PatID) VALUES('" & now() & "','" & lngFluidID & "','" & Request.Form("volym" & lngFluidID) & "', " & pnr & ")"
[B]vatskeb.Execute strSQL, , 128[/B]
End if
Next
vatskeb.close
Set vatskeb = Nothing
Response.Redirect "lista_databas.asp"
%>
Rad 15 är fet markerad
plelkesMedlem sedan mars 2002823 inlägg
Vad är det för datatyp på fältet PatID? Tal? I så fall, ta bort apostroferna runt värdet i SQL-frågan
Men lngFluidID är väl oxkså tal? Och då skall jag väl inte heller ha "enkelfjuttar" runt
& lngFluidID &
Eller??
@ndersMedlem sedan juni 200032 969 inlägg Det beror helt och hållet på vad det är för datatyp på fälten i tabellen.
Är fältet av typen tal skall du inte ha apostrofer runt värdet nej.
(Jag bara utgick ifrån att det var textfält, eftersom SQL-frågan såg ut så från början, och jag antog att den fungerade.)
mvh
EclipseMedlem sedan juli 20003 825 inlägg Tips från coachen 1:
Byt från:
strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym, PatID) VALUES('" & now() & "','" &...
Byt till:
strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym, PatID) VALUES(#" & now() & "#,'" &...
***
Glöm inte att byta datatyp i din databas!
***
Tips från coachen 2:
Byt från:
strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym, PatID) VALUES('" & now() & "','" &...
Byt till:
strSQL = "INSERT INTO tblVetskebalans(dteCreated, FluidID, Volym, PatID) VALUES(#" & now() & "#,'" &...
***
Glöm inte att byta datatyp i din databas!
It's easy when you know how! (Spocke)
plelkesMedlem sedan mars 2002823 inlägg kolla strSQL ....
.. vill jag som jag fick tips från forumet.
KOden
<%@LANGUAGE="VBSCRIPT" "%>
<%
Set vatskeb = Server.CreateObject( "Adodb.Connection" )
vatskeb.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\vatskebalans\db\vbalans.mdb")
vatskeb.ConnectionString = "Data Source='" & MdbFilePath & "'"
vatskeb.open
pnr= Request.Form("personnr")
For each formObj in Request.Form
If left(formObj,9) = "leggatill" Then
lngFluidID = Replace(Request.Form(formObj), "leggatill", "")
strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym, PatID) VALUES('" & now() & "','" & lngFluidID & "','" & Request.Form("volym" & lngFluidID) & "', " & pnr & ")"
vatskeb.Execute strSQL, , 128
Response.Write strSQL
Response.end
End if
Next
vatskeb.close
Set vatskeb = Nothing
Response.Redirect "lista_databas1.asp"
%>
borde väl när sidan körs, visa resultatet av strSQL???
Det gör det icke
plelkesMedlem sedan mars 2002823 inlägg eclipse
Glöm inte att byta datatyp i din databas!
vilket data typ skall jag använda då?
@ndersMedlem sedan juni 200032 969 inlägg Jo, men eftersom du har lagt utskriften efter det att du exekverar frågan kommer du få felmeddelandet, och sedan avbryts exekverandet.
Flytta alltså upp de två kodraderna till ovanför execute-raden.
Mvh
plelkesMedlem sedan mars 2002823 inlägg När jag nu kollar min strSQL
INSERT INTO tblVetskebalans(Dag, FluidID, Volym, PatID) VALUES('11/23/2003 7:52:13 AM',6,222, )
Ser jag att personnumret (PatID) överhuvudtaget inte kommer med...
Personnummret fylls i med följande kod
<form name="pnummer" method="post" action="">
Patientens personnummer:___<input name="personnr" type="text">
</form>
Och själva insertsidan:
<%
Set vatskeb = Server.CreateObject( "Adodb.Connection" )
vatskeb.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\vatskebalans\db\vbalans.mdb")
vatskeb.ConnectionString = "Data Source='" & MdbFilePath & "'"
vatskeb.open
pnr= Request.Form("personnr")
For each formObj in Request.Form
If left(formObj,9) = "leggatill" Then
lngFluidID = Replace(Request.Form(formObj), "leggatill", "")
strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym, PatID) VALUES('" & now() & "', "& lngFluidID & ", " & Request.Form("volym" & lngFluidID) & ", " & pnr & ")"
vatskeb.Execute strSQL, , 128
End if
Next
vatskeb.close
Set vatskeb = Nothing
Response.Redirect "lista_databas.asp"
%>
plelkesMedlem sedan mars 2002823 inlägg Förrestän har jag gjort en liten ändring så att jag får datumet i formen av: ÅÅÅÅ - MM - DD..
Har ännu inte lyckats helt:
Session.LCID = 1053
Set vatskeb = Server.CreateObject( "Adodb.Connection" )
vatskeb.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\vatskebalans\db\vbalans.mdb")
vatskeb.ConnectionString = "Data Source='" & MdbFilePath & "'"
vatskeb.open
pnr= Request.Form("personnr")
d = CDate(year(now()) - month(now()) - day(now()))
For each formObj in Request.Form
If left(formObj,9) = "leggatill" Then
lngFluidID = Replace(Request.Form(formObj), "leggatill", "")
strSQL = "INSERT INTO tblVetskebalans(Dag, FluidID, Volym, PatID) VALUES(" & d & "," & lngFluidID & "," & Request.Form("volym" & lngFluidID) & ", " & pnr & ")"
Response.Write strSQL
Response.end
vatskeb.Execute strSQL, , 128
End if
Next
vatskeb.close
Set vatskeb = Nothing
Min fråga är:
- om formatet i databasen är datum/tid - skall jag då använad mig av CDate() ?