Permalänk
Medlem

Om du byter ut RecordSet.Fields.item(radslut) = varde mot

Response.Write "Debug: " & radslut & " Värde: " & varde

och kollar så att outputten ser riktig ut då. Annars testa att öppna databasen i access och under Verktyg -> Databasverktyg köra komprimera och reparera databas.

Visa signatur
Permalänk
Medlem

Edit:
Kom på vad som gör att det blir fel, när jag har satt datum på två fält som är datum så skiter det sig, men när man kör dom som text så fungerar det fint.
När det är ett fält som är tomt och data typen är datum/tid så går det inge bra verkar det som.

Edit:
Helt otroligt att det ska vara en massa små skitfel som tar lång tid att felsöka i asp. Men helt underbart att det fungerar nu.
Tack så mycket för hjälpen nu ska du få vara i fred xtermin8 :).

Visa signatur

mAngAn_

Permalänk
Medlem

Ah ska du ha datum in i access måste du formatera det som datum innan du stoppar in det skulle jag tro. Det går säkert att i Access sätta "tillåt nollvärde" i det fält som innehåller datumet eller att formatera koden så att om det dyker upp ett datum som är tomt så skriver den 0000-00-00 eller liknande istället.

Tips: Börja med asp.net istället så ska man kunna debugga koden i visual stuido direkt

Påståeende: Tror inte en sekund på att jag får vara i fred iallafall du kommer säkert sabba något annat snart

Visa signatur
Permalänk
Medlem

Det är bara en tidsfråga innan din pm låda blir massbombad av mig :P. Kommer säkert fastna på någon urvalsfråga sen eller något liknande. Men nu ska jag rara ner och lägga undan så jag har en verision som fungerar

Tack för tipset i access, att man kunde komprimera databasen :), den jag hade låg på 8 mb nu ligger den på fina 400 kb.

Visa signatur

mAngAn_

Permalänk
Medlem

Ja du vet att databasen bara växer och växer även om du raderar alla poster så minskar inte det allokerade utrymmet för databasen tills du komprimerar den. Vet inte om det är genomförbart att starta en komprimering genom asp kör man visual basic går det, ska kolla lite på det det kanske kan vara intressant. Alternativet om man rensar databasen ofta är att ha en tom komprimerad version av databasen som man kan kopiera/skriva över med hjälp av FSO.

Edit: ADO verkar det inte gå med men både DAO och JRO verkar klara av det fast de komprimerar databasen till en ny version av denna så sen får man ändå använda FSO för att skriva över orginalet. Länk med kod och mer info http://www.motobit.com/tips/detpg_CompactMDB/

Edit: Den som slänger ur sig flest förkortningar i en mening vinner

Visa signatur
Permalänk
Medlem

Hehe så det är så det fungerar, jag satt och funderade på vad som bestämmde en databas storlek häromdagen, så nu vet jag det .)

Nu till nästa problem, allt fungerade utmärkt tills jag insåg att jag hämtade fel information från databasen :).

Så efter lite pill, där allting gick jättebra så gick jag på en nit igen :).
Jag får inte den här select satsen att fungera, det är här det skiter sig AND fltFordonsstus = 'Begagnad' . Finns det någon begränsning i asp om hur många AND man kan använda eller?, i access fungerar sql satsen som det ska.
fltFakturadat är datatypen text för det gick inte att ha datum där för datumet hade ett sådant konstigt format t.ex "2004-01-01-00.00.00".

SQL satsen efter access har kladdat om den

SELECT tblBil.fltRegnr, tblBil.fltVagnspec, tblBil.fltInternvagn, tblBil.fltFordonsstatus, tblBil.fltFakturadat
FROM tblBil
WHERE (((tblBil.fltInternvagn)=' ') AND ((tblBil.fltFordonsstatus)="Begagnad") AND ((tblBil.fltFakturadat)<='2004-10-22'))
ORDER BY tblBil.fltFakturadat;

ASP Kod

d = "SELECT fltRegnr, fltArsmodell, fltVagnspec, fltFarg, fltFakturadat, fltInbytessalj FROM tblBil WHERE tblBil.fltFakturadat BETWEEN '" & dat & "' AND '2001-01-01' AND fltInternvagn = ' ' AND fltFordonsstus = 'Begagnad' ORDER BY fltFakturadat ASC"

Efter lite testning verkar det inte gå att använda två st "AND", hur kan man komma runt det?

Visa signatur

mAngAn_

Permalänk
Medlem

Nä men när du kör BETWEEN sådär måste du nog använda paranteser kanske:

d = "SELECT fltRegnr, fltArsmodell, fltVagnspec, fltFarg, fltFakturadat, fltInbytessalj FROM tblBil WHERE (tblBil.fltFakturadat BETWEEN '" & dat & "' AND '2001-01-01') AND (fltInternvagn = ' ') AND (fltFordonsstus = 'Begagnad') ORDER BY fltFakturadat ASC"

OBS har inte testat den där koden.

Visa signatur
Permalänk
Medlem

Det fungerar inte att sätta ut paranteserna så där. Fick det att nästan fungera i alla fall med parantserna lite annorlunda. Fast då klagar den på.

Feltyp:
Microsoft JET Database Engine (0x80040E10)
Det har inte angetts något värde för en eller flera nödvändiga parametrar.
/skv/klar/begdagar.asp, line 29

Edit:

Nu fungerar det, jag kopierade in select delen i access och sen körde frågan, och efter det då kopierade jag sql koden från access och då fungerade det, helt otroligt.

d = "SELECT tblBil.fltRegnr, tblBil.fltArsmodell, tblBil.fltVagnspec, tblBil.fltFarg, tblBil.fltFakturadat, tblBil.fltInbytessalj FROM tblBil WHERE (((tblBil.fltFakturadat) Between '" & dat & "' And '2001-01-01') AND ((tblBil.fltInternvagn)=' ')) AND tblBil.fltFordonsstatus = 'Begagnad' ORDER BY tblBil.fltFakturadat"

Edit:
Hur gör jag om jag vill hämta alla poster där det står någonting i ett fält.

Så här ser koden ut nu, funderar på om man kan använda NotNull eller något liknande, eller om det finns något tecken för alla bokstäver i alfabetet så man kan köra LIKE '%konstigttecken'
d = "SELECT fltRegnr, fltArsmodell, fltVagnspec, fltFarg, fltInbytessalj, fltFakturadat, fltLagerplats, fltInternvagn FROM tblBil WHERE fltInternvagn LIKE '%' ORDER BY tblBil.fltLagerplats, tblBil.fltVagnspec ASC"

Visa signatur

mAngAn_

Permalänk
Medlem

<> null eller <> '' borde kunna fungera.

Visa signatur
Permalänk
Medlem

Det ville sig inte alls, fast jag kanske har fattat fel hur du menar. Men jag har i alla fall testat dom flesta kombinationerna i Like <> null.
Antingen så visas ingenting eller så får jag syntaxfel.

Saknar sql övningsuppgifterna vi fick i skolan, jag har för mig att det fanns en hel del nyttiga uppgifter där, med is not null osv.

Visa signatur

mAngAn_

Permalänk
Medlem

Nä sorry om jag var lite otydlig

...FROM tblBil WHERE fltInternvagn <> ''

eller

...FROM tblBil WHERE fltInternvagn <> Null

tror jag på. Fast det var ett tag sen jag körde mot en Access

Visa signatur
Permalänk
Medlem

Det ville sig inte det heller, nu tar jag lunch och ser om det kommer någonsnille blixt i huvudet efter man har fått lite frukost.

Edit:
Där kom snilleblixten, flummade runt i Running MS Access 2000 boken så hittade jag att man kunde köra "LIKE '[A-Ö]%' " så tar den alla saker som börjar på något i alfabetet från a till ö :).

Edit:
Nu är det trubbel igen, kom ju på att servern allt ska ligga på har ett engelskt os och då är datumet 2/02/2004. Hur gör jag för att definiera variabeln dat som är "dat = DateAdd("d", -120, date)" som ska vara i det här datumformatet 2004-02-02. Jag kan ju få till så att man skriver ut ett datum med year(now) - month(now) - day(now), men då ser datumet ut så här 2004-02-2.

Och sen hur man ska få in det i dateadd funktionen förstår jag inte.

LÖST

Edit:
Nytt problem hur gör man om man vill ta bort så att det bara står 2004-04-04 istället för 2004-04-04-00.00.00

Visa signatur

mAngAn_

Permalänk
Medlem
Permalänk
Medlem

Det fungerade med det här också.
<%@ LANGUAGE=VBSCRIPT LCID=1053 %>

Om jag bara vill visa 10 bokstäver/siffror när jag hämtar data från ett fält, ska man inte kunna skriva in det i <%=10, funktion%> eller något?

Visa signatur

mAngAn_

Permalänk
Medlem

Ja men LCID fixar svenskt format. Det jag postade var för att få bort 00.00.00

Visa signatur
Permalänk
Medlem

Datatypen i databasen är text på det jag vill få bort, men fungerar det ändå tro? För det gick inte att använda datum typ på det fältet.
Så här ser det ut i databasen.
2005-02-07-00.00.00

Visa signatur

mAngAn_

Permalänk
Medlem

Testa det ska inte vara några problem har för mig att den gör om till datum automatiskt. Annars får du använda left()

Visa signatur
Permalänk
Medlem

Hum när jag kör <%=FormatDateTime(fltFakturadat, 2)%> så ändrar den så att det ser rätt ut, synd att alla rader får det här datumet bara 1899-12-30.

Hur använder jag funktionen left här?

<%=RecSet("fltFakturadat")%>

provade <%= left(fltFakturadat,3) %> men det vart ju inte så lyckat.

Visa signatur

mAngAn_

Permalänk
Medlem

<%= left(RecSet("fltFakturadat"),3) %>

Visa signatur
Permalänk
Medlem

Tackar det där hade jag aldrig kommit på :), däremot så hade jag nog testat 20 varianter på den som inte hade fungerat :). Nu ska väl alla problem vara lösta så jag får gå vidare från det här :).

Edit:
Nytt roligt problem som borde vara rättså lättlöst.
Jag ska göra en söksida där man kan skriva in ett kundordernr och söka i databasen efter det värdet. Så här ser själva söksidan ut.

sok.asp
<html>
<form method="POST" action="sok2.asp">
Ditt Kundorder nr:<br>
<input type="text" size="30" name="kundordernr"><p>

<input type="submit" value="Sök">

</form>

</html>

Och så här ser andra delen i söksidan ut.

sok2.asp
<%
Dim Connect, Addera
Set Connect = CreateObject("ADODB.Connection")
connect.provider = "Microsoft.jet.oledb.4.0"
connect.Open "data source=" & server.mapPath("levinfo.mdb")
Set RecordSet = CreateObject("ADODB.Recordset")
Addera = "SELECT * FROM tblStatus WHERE fltKundordernr = #"& Request.form("kundordernr") & "#"
RecordSet.Open Addera, Connect, 3, 3
%>

<%= RecordSet("fltFordonsbsk")%>;
<%= RecordSet("fltCISOrderstat")%>;
<%= RecordSet("fltSistaandringsdat")%>;
<%= RecordSet("fltKundordernr")%>;
<%= RecordSet("fltLevdatumCISNuvarande")%>;
<%
RecordSet.Close
Connect.Close
%>

Och det här trevliga felmedelandet får jag, så som det verkar i felmedelandet läser ju scriptet in kundordernr rätt från sok.asp, men någonstans går det fel.

Feltyp:
Microsoft JET Database Engine (0x80040E07)
Syntaxfel i datum i frågeuttrycket 'fltKundordernr = #36565#'.
/levinfo/sok2.asp, line 8

Edit:
Nu fungerar det när jag ändrade kundnr fältet i databasen till text, och kör med ' fnuttar istället för #. Det är bara att inse databasen vill bara fungera åt mig när jag kör text när det ska vara tal som datatyp

Visa signatur

mAngAn_

Permalänk
Medlem

Ska du ha tal ska det vara

Addera = "SELECT * FROM tblStatus WHERE fltKundordernr ="& Request.form("kundordernr")

Alltså inga funttar eller #-tecken alls när det gäller tal

Visa signatur
Permalänk
Medlem

Aha, hade fått för mig att man använde # staket när det var tal om datum/tal och ' när det är text :).

Dock så vore det fint med lite hjälp om hur man formulerar en if sats om inte värdet man söker på finns i databasen så man får upp en sida där det står att kundordernr inte finns istället för att man får ett felmedelande.
Det måste man ju kunna lösa enkelt med en if-sats och false, eller något :).

Det vore ju perfekt om man kunde skicka vidare användaren till en annan sida om sökningen inte fick någon träff i databasen.

Visa signatur

mAngAn_

Permalänk
Medlem

Det kan du kolla lätt med

If RecordSet.EOF then Response.Write "Hittar inga poster" Else Response.Write "Hittade en eller flera poster" End if

Fast det vanligaste är att man loopar igenom alla poster och skriver ut allt man hittar.

If RecordSet.EOF <> True then Do Until RecordSet.EOF Response.Write RecordSet("fltFordonsbsk") '... De andra RecordSet() RecordSet.MoveNext Loop Else Response.Write "Hittade inga poster End If

Visa signatur
Permalänk
Medlem

Var ska man sätta in det i koden?
På det scriptet som jag kör nu hittar den bara en post, för det ska bara vara ett kundordernr, tror jag :p.

Edit:
Ah nu fick jag det att fungera.

Illa att man ska vara så trögtänkt ibland :).

Edit:
Nu har jag märkt att det är en bugg i indata scriptet.
Det missar att skriva ut första fältet på sista raden, "Regnr".
Oavsett om det är 250 rader eller 5 rader.
Och jag får då inte in i huvudet varför det blir så, tycker det borde bli fel tidigare och oftare om det är något konstigt med koden.

Här syns felet om du vill ha ett exempel :).
http://www.bilkompaniet.se/leveransinfo/sok3.asp

Indata.asp koden

<%@ Language="VBScript" %>
<%
dim filesys, readfile, content, arrInfo
set filesys = CreateObject("Scripting.FileSystemObject")
set readfile = filesys.OpenTextFile(Server.MapPath("lager.txt"), 1, false)
readfile.Skipline
content = readfile.ReadAll
readfile.close
'Ny rad för att fixa att det inte är ett ; på slutet av varje rad
content = replace(content, vbcrlf, ";")
arrInfo = split(content, ";")

dim addera, Connect, Recordset, radera
Set Connect = CreateObject("ADODB.Connection")
connect.provider = "Microsoft.jet.oledb.4.0"
connect.Open "data source=" & server.mapPath("bilar.mdb")
Set RecordSet = CreateObject("ADODB.Recordset")
Addera = "SELECT * FROM tblBil"

RecordSet.Open addera, Connect, 3, 3
Set radera = connect.Execute("DELETE * FROM tblBil;")
Recordset.AddNew
%>

<%
dim i, radslut, varde
radslut = 0
For i = 0 to uBound(arrInfo)
'Bort med dubbelfnutts och skriv inte ut de två sista posterna i skvfilen
varde = replace(arrInfo(i), """", "")

if radslut =< 30 then
'msgbox "uppdaterar: " & radslut & " " & varde
RecordSet.Fields.item(radslut) = varde
Else
'msgbox "uppdaterar INTE!: " & radslut & " " & varde
End if

'Kontrollera om det är dags att byta rad
if radslut = 31 then
'Det är det! Skriv ut en radbrytning och nollställ radslut.
radslut = 0
RecordSet.Update

'Lägg till nytt record om det finns mera värden i filen
if i <> uBound(arrInfo)-1 then
RecordSet.AddNew
End if
Else
'Om inte plussa på radslut variabeln
radslut = radslut +1
End if
Next
%>

<%
Recordset.Update
RecordSet.Close
Connect.Close
%>
Databasen rensad, ny data sparad.

Edit:
Om jag ändrar den här raden
if i <> uBound(arrInfo)-1 then
till
if i <> uBound(arrInfo)-2 then
Så får jag ju med alla värden fast ett tomt fält, den lösningen duger väl. Men det kanske finns någon bättre lösning.

Visa signatur

mAngAn_