webForumDet fria alternativet

Läser av databasen fel

ASP

2 svar · 282 visningar · startad av Bjarne A

Medlem sedan feb. 2001151 inlägg
Frågan#1

Har en kalender där man kan boka dagar och en databas med kolumn för månaden (manad) och dagar (1,2,3,4..) jag vet att man inte borde döpa kolumner till siffror men, men,

När man skickar en bokning så vill jag öppna och kolla om den inte är bokad en gång till sedan vid OK skall bokningen ske. det går att boka problemfritt men när jag la till kollen så går det bara att boka ojämna dager !?! :o jämna dager retuneras felmedelandet och jag kollar med response.write och då är värdet "boka" fast det inte är det.

Kan det ha något ändå med att kolumner heter siffror, jag fattar ingenting :x

<%
'----------------------------------------kollar om någon datum kommer med i länken annars tar den dagens datum
If Request.QueryString("sida") <> "" Then
sidvarde = Request.QueryString("sida")
Else
sidvarde = Date
End If
%>

<% 
'-----------------------------------------------------------------kollar att inte datumet går utanför databasen
IF sidvarde < "2005-01-01" OR sidvarde > "2009-01-01" Then %>
bla bla

<%
ELSE
%>

<%
'--------------------------------------------------Skapar datumet för nästa och förra måndaden för länkens värde
nasta = DateAdd("M", 1, sidvarde)
forra = DateAdd("M", -1, sidvarde)
%>

<%
'------------------------------------------------------------------plocka ut måndaden och året ur aktuellt datum
datis = Month(sidvarde)
aris = Year(sidvarde)
%>

<%
'----------------------------------------nummer på veckodag och tar bort en extra då man i USA räknar från söndag
skip 	=  DatePart("w", datis & "/1-"&aris, vbMonday)-1 
%>

<%
'--------------------------------------------------------------Hämtar namnet på svenska till aktuellt månadsnummer 
Manad = Array("December","Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December","Januari")

'------------------------------------------------------------------------Förra och nästa månads nummer till namn
f = datis -1
n = datis +1
%>

<table width="350" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="90"><a href="1004.asp?sida=<%=forra%>"><%Response.Write Manad(f)%></a></td>
    <td>
      <div align="center"><b><font size="3"><%Response.Write Manad(datis)%>&nbsp; 
        <%= Year(sidvarde) %></font></b></div>
    </td>
    <td width="90"> 
      <div align="right"><a href="1004.asp?sida=<%=nasta%>"><%Response.Write Manad(n)%></a></div>
    </td>
  </tr>
</table>
<BR>
<!--#INCLUDE file="adovbs.inc"--> <% Set connect = Server.CreateObject("ADODB.connection")
connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=D:\home1\doggense\db\db2.mdb" 
%>
<%
artalet = "ar"& aris	
SQL = "SELECT * FROM  " & artalet & " WHERE manad = '" & datis & "'"

set Rs = connect.execute(SQL) 
%>
<form name="frm2" method="post" action="taimot4.asp">

<table border="0" cellspacing="1" cellpadding="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#FFFFFF" width="50" height="35"><div align="center">Måndag</div></td>
<td bgcolor="#FFFFFF" width="50" height="35"><div align="center">Tisdag</div></td>
<td bgcolor="#FFFFFF" width="50" height="35"><div align="center">Onsdag</div></td>
<td bgcolor="#FFFFFF" width="50" height="35"><div align="center">Torsdag</div></td>
<td bgcolor="#FFFFFF" width="50" height="35"><div align="center">Fredag</div></td>
<td bgcolor="#FFFFFF" width="50" height="35"><div align="center">Lördag</div></td>
<td bgcolor="#FFFFFF" width="50" height="35"><div align="center">Söndag</div></td>
</tr>
<tr>

<%
'------------------------------------------------------------------------Antal dagar i månaden för aktuell månad
Function GetDaysInMonth(datis, aris)
	Select Case datis
		Case 1, 3, 5, 7, 8, 10, 12
			GetDaysInMonth = 31
		Case 4, 6, 9, 11
			GetDaysInMonth = 30
		Case 2
			If IsDate("Februari 29, " & aris) Then
				GetDaysInMonth = 29
			Else
				GetDaysInMonth = 28
			End If
	End Select
End Function
%>

<% For c = 1 To 42 %>
<% rutvarde = c - skip  %>
<%
'------------------------------------------------------------Om det inte är rätt startveckodag visas en tom cell
IF rutvarde < 1 Or rutvarde > GetDaysInMonth(datis, aris) THEN
%>
<td bgcolor="#FFFFFF" width="50" height="35" height="25"><div align="center"> 
<%ELSE%> 
<%
'---------------------------------------------------------------------------hämta bokad eller tom från databasen
Dim hamta
hamta =Rs(cstr(rutvarde))
%> 
<% 
'-----------------------------------------------------------------------Om det står tom i databasen händer detta
IF hamta = "tom"  THEN
%> 
<td bgcolor="#9999FF" width="50" height="35" height="25"><div align="center">
<% = rutvarde%><BR>
<input type="checkbox" name="dag<%=rutvarde%>" value="boka">
<%
'------------------------------------------------------------- Om det står något annat blir cellen röd och bokad
ELSe
%>
<td bgcolor="#FF3333" width="50" height="35" height="25"><div align="center">
<% = rutvarde%><BR>
Bokad
<%END IF%><%END IF%></div>
</td>
<%
'----------------------------------------------------------------Bryta till ny rad i tabellen efter var 7de ruta
IF c mod 7 = 0 then response.write "</tr><tr>"
%>
<%Next%>

</tr>

</table>
<%
'-------------------------------------------------------------------------stänga Recordset och databaskopplingen
Rs.close
Set Rs = nothing
connect.close
Set connect = nothing
%> <%END IF%> 
<!-----------------------------------------------------------------skickar med aktuellt år och månad i formen-->
<input type="hidden" name="_manad" value="<%=datis%>">
<input type="hidden" name="_ar" value="<%=aris%>">

<input type="submit" name="Submit" value="Skicka">
</form>

Sidan som tar imot

<!--#INCLUDE file="adovbs.inc"--> <% Set connect = Server.CreateObject("ADODB.connection")
connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=D:\home1\doggense\db\db2.mdb" 
%>
<%
manadsnummer = Request.Form("_manad")
arnummer = "ar" & Request.Form("_ar")
%>

<% FOR i = 1 TO 31 %>
<%
dagen = "dag"& i
set_dagen = i
IF Request.Form(dagen) = "boka" THEN
	
SQL = "SELECT * FROM  " & arnummer & " WHERE manad = '" & manadsnummer & "'" 
set Rs = connect.execute(SQL) 
kollning = Rs(i)
IF kollning = "boka" THEN
response.write "nu blev det fel" & Rs(i)
ELSE
bokad = "boka" 
SQL = "UPDATE " & arnummer & " SET " & set_dagen & " = '" & bokad & "' WHERE manad = '" & manadsnummer & "'" 
connect.Execute(SQL)
END IF
END IF
%> 
<% NEXT %>
Medlem sedan dec. 19996 721 inlägg
#2

I all välmening...

Att utforma databasen på detta sätt är ett stort felsteg. Inte bara för att du har siffror som kolumnnamn, utan framför allt för att databasdesignen har blivit en del av själva informationen, med en tabell per år, en rad per månad och en kolumn per dag. Det blir oerhört oflexibelt, eftersom du måste skapa nya tabeller för varje år och dessutom blir det inte möjligt att lagra något mer om själva bokningarna, annat än att de är bokade eller ej. Ponera att du lagra vem som utfört bokningen samt när, på samma sätt. Då tillkommer 62 kolumner i ett nafs...

Det fel du ser beror på raden

kollning = Rs(i)

som plockar ut det i:nde elementet i recordsetet, vilket antagligen inte är samma sak som kolumnen som har värdet i som namn. Det borde fungera med

kollning = Rs(cstr(i))

En bra design skulle kunna bygga på att du har en bokningstabell med en rad per bokning och, i ditt fall, endast datumet som primärnyckel. Ingen rad=ingen bokning.

Medlem sedan feb. 2001151 inlägg
#3

Tack det funkade fint :bire , och angående databasuppbyggnaden har du oxå rätt
Tar tacksamt imot kreativ kritik :e

266 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)