webForumDet fria alternativet

Skapar ibland 2 poster i DB

ASP

32 svar · 653 visningar · startad av Alamartimo

Medlem sedan okt. 2004129 inlägg
Frågan#1

Vet inte var jag ska börja men förklarar scriptet lite snabbt.
Vill inte posta koden här då den är på nästan 600 rader :r

I alla fall så fyller användaren i ett formulär med olika värden på sida1.

Sida2 använder informationen där jag kontrollerar den mot info i en tabell (RaceStats) . Här sker en del uträkningar och med den infon så körs en hel hög med If Elseif satsatser som kollar mot Summan som jag fick i uträkningen.
När summan överrenstämmer med uträkningen så skall 2 tal (som ligger i fält) slumpas fram från tabellen (RaceStats).

Alltihop postas sedan in i tabellen Practice med info om användaren och lite annat.

Använder sen Meta Refresh för att komma tillbaka till Sida1.

I alla fall koden ska skapa 1 slumpad tid men ibland skapar den 2 tider och de är helt olika.
Jag kör inga loopar i koden heller så jag är helt ställd här.
Använder en cache rensare också.

Har försökt att luska ut och har ändrat i koden många gånger för att få bukt på det här.

Några vanliga fel som Ni vet om som gör att en kod skapar dubbla poster??

Jag kan ju länka till filen (som textfil) om någon känner för att kolla på filen åt mig.

Medlem sedan juni 200032 967 inlägg
#2

Det är alltid en bra idé att visa kod, eller om det är mycket, länka till den.

Medlem sedan okt. 2004129 inlägg
#3

Här är länk till filen..

Gjorde om den som *.txt

Länk till filen

Hoppas den funkar att titta på :)

Medlem sedan juni 200032 967 inlägg
#4

Till att börja med:

Får man fråga varför du har en och samma funktion med i tvåtusen if-satser? Lägg funktionen på ett ställe, och kalla bara på funktionen från if-satserna.

Edit: i den koden är det jättemycket som är roligt att bråka om. Jag återkommer. :D

Medlem sedan juni 200032 967 inlägg
#5

Mer bråk:

  1. Se till att indentera din ASP-kod, så den blir lättare att följa.
  2. Istället för att använda 40 olika variabler att lagra tider i, använd en array med 40 platser. (Jag gillar inte heller att du har 40 fält för tider i din tabell, men det kan vi lämna så länge.)
  3. I slutet av koden, i dina sista hemska if-satser, använder du timevariabler du inte skapat (Time41-50). Dessutom med samma villkor i if-satserna, så du gör tio if-satser ogiltiga.
  4. Du skapar en del recordsetobjekt tidigt i koden, men stänger de inte förrän sist på sidan. Det är lika bra att du stänger objekten så fort du är färdig med dem.
  5. I din kod står "meta refresh här". Ha gärna med refresh-koden i kod du visar, så man får en helhet.
  6. Du har en del variabler som du prefixat med str. Det är bra att använda ungersk notation, men det är snudd på spöstraff att prefixa heltalsvariabler som om de vore strängar. int eller helt enkelt bara i hade varit bättre prefix på heltalsvariablerna strS, strH, strI och strW.

Om du förenklar koden med if-satserna enl. mitt förra inlägg, och bygger array istället för mängder av time-variabler kan du få ner kodmassan väsentligt.
Jag har klippt bort drygt 220 rader kod som är onödig....

Medlem sedan okt. 2004129 inlägg
#6

Det är just det här som sållar amatörerna från proffsen *harkel* :r ;)

Jag visste att det fanns en hel del att "Bråka" :e om i min kod.
Har inte själv varit nöjd med den men tja den har funkat, nästan.

1. fixar till det.

2. Vad jag är ute efter är att slumpa tider mellan 2 fält med hjälp av if-satserna. Det ska igentligen vara 80fält den ska kunna slumpa från. Tja jag har försökt med Arrayer men är ingen vidare på att få till det så jag löste det med if-satserna.

3. Det är 30 poster i tabellen RaceStats med 80tid fält (datatyp text) och en del annan info.

4. fixar till det :)

5. Hade med dem men den körde koden även i *.txt
Det är en refresh på 0s till sidan practice.asp.

6. *hum* hänger inte riktigt med där. Jag har kört ut värdena som str för att kunna använda de i flera uträkningar.

Men jag knåpar lite själv nu så jag lär mig av det.
Så återkommer jag när jag har något nytt att visa
:)

Medlem sedan juni 200032 967 inlägg
#7

3. Det är 30 poster i tabellen RaceStats med 80tid fält (datatyp text) och en del annan info.

Urk! :)
Du borde ha en tabell för tiderna, med en tid per post. Om man måste förändra en tabelldefinition för att kunna lagra ett till värde, då är man ute på tunt vatten.

6. *hum* hänger inte riktigt med där. Jag har kört ut värdena som str för att kunna använda de i flera uträkningar.

Det är inget fel på användandet, bara namngivningen. Dina variabler innehåller heltal, då tycker jag att det är jättefel att påstå att de innehåller strängar genom att prefixa variabelnamnen med str. Sen förstår jag inte heller vad du menar med detta:

Jag har kört ut värdena som str för att kunna använda de i flera uträkningar

Det är ju just när man ska räkna med värden som det inte ska vara strängar?

mvh

Medlem sedan juni 200032 967 inlägg
#8

... och en sak till:

Finns det någon speciell anledning till att du använder meta refresh istället för response.redirect i ASP?

Medlem sedan okt. 2004129 inlägg
#9

:)

3. De 30 posterna i RaceStats kommer aldrig att ändras utan de är fasta. Jag ska bara hämta data från tabellen. Time1 - Time80 ska innehålla tider (vilket är tal 123456) med +333 skillnad och det varierar beroende på vilken av de 30 posterna det är.

6. tja jag tar ju + - * på värdena och jag hade problem att få till dem med rs("fält") + - * rs("fält") så då gjorde jag helt enkelt så som jag gjorde för att få det att fungera.

Ska jobba vidare här lite nu ;)

Finns det någon speciell anledning till att du använder meta refresh istället för response.redirect i ASP?

Nej det finns ingen anledning.. Efter att koden har körts vill jag bara tillbaks till sidan med formuläret.

Medlem sedan juni 200032 967 inlägg
#10

Jag förstår inte vad du pratar om ang. 6:an. Jag är endast kritisk till din namngivning av variablerna strS, strH, strI och strW. Eftersom det inte är strängar som lagras i variablerna, utan tal, känns det mycket mer logiskt att kalla variablerna för intS, intH, intI och intW för att markera att de innehåller heltal (integers).

Du har annars använt typkonverteringsfunktionerna alldeles riktigt för att du ska kunna räkna med fältvärdena, så jag antar att du helt enkelt inte förstår vad jag menar. :)

Nej det finns ingen anledning.. Efter att koden har körts vill jag bara tillbaks till sidan med formuläret.

Ok. Då rekommenderar jag att du gör en response.redirect istället.

Medlem sedan okt. 2004129 inlägg
#11

Sant jag förstod inte vad du menade med 6:an. Men nu gör jag det. :)

Har ändrat i det mesta nu men inte gjort om Ifsatserna till Array då jag inte förstår mig på hur jag ska lösa det än.

Tog bort alla GetRndNumber Funktionerna *harkel* :r och la in en enda funktion för det.. :e

Medlem sedan juni 200032 967 inlägg
#12

Det är inte if-satserna som skulle arrayifieras, utan alla dina 40 tid-variabler.

Exempel:

dim arrTime(40)
for i = 1 to 40
      arrTime(i) = Clng(rsCal("Time" & i))
next

Sedan byter du ut alla förekomster av variabelnamnen (Time1, Time2, Time3 etc) mot arrTime(1), arrTime(2), arrTime(3) osv.

mvh

Medlem sedan okt. 2004129 inlägg
#13

Det är inte if-satserna som skulle arrayifieras, utan alla dina 40 tid-variabler.

Ahhh nu fattar jag lite mer av det där. :)

Jag försöker mig på det och postar en ny fil om någon dag så får du titta på det om du har lust :)

Medlem sedan juni 200032 967 inlägg
#14

Absolut, lycka till =)

(Jag har facit på min hårddisk, bara så du vet ;) )

Mvh

Medlem sedan okt. 2004129 inlägg
#15

(Jag har facit på min hårddisk, bara så du vet )

:birp

Medlem sedan okt. 2004129 inlägg
#16

Så nu har jag gjort en hel del ändringar som du föreslog @nders och koden är betydligt mindre :) Härligt.
Och för första gången förstod jag mig på det här med Array och nyttan med det..

Och nu är det lättare att se vilka variabler som är text eller tal :r

Råkade skriva över den gamla filen jag gjorde..

Länk till filen

Medlem sedan juni 200032 967 inlägg
#17

Du har ett hundratal rader till att klippa bort om du känner dig sugen. :)

Medlem sedan okt. 2004129 inlägg
#18

Du har ett hundratal rader till att klippa bort om du känner dig sugen.

*hum* Ja jag ger mig på det igen. :)

Medlem sedan okt. 2004129 inlägg
#19

Näää det här går jag bet på. :e

Tror att det är de 40 If satserna och att man kan använda sig av just array för att få till det.

Har börjat med

dim arrTime(40)
dim arrManSum(40)
for i = 1 to 40
for j = 3750 to 0 step -50
    arrTime(i) = Clng(rsCal("Time" & i))
	arrManSum = (j)
If intManSum >= arrManSum Then
Tid = GetRndNr(arrtime

next
next
End If

Men jag vet inte hur jag ska göra med arrTime(1) osv..
Det ska ju vara mellan 2 arrTime som tiden ska slumpas fram.

Tid = GetRndNr(arrTime(1),arrTime(2))

Du kan väl säga om jag är rätt på det är helt ute och cyklar @nders :e

Medlem sedan juni 200032 967 inlägg
#20

Det är klart att du istället för alla ifsatser kan lägga det in i en loop, men jag är i min sjukdom lite osäker på om du är inne på helt rätt spår, men helt fel kan det ju i alla fall inte vara. :)

Det finns en mellanväg, lite enklare, som jag tänkte på i första hand. Alla dina if-satser går att förkorta till en rad per styck. Exempel:

If detena = detandra then
      gör något
end if

kan ersättas med:

If detena = detandra then gör något

If-satserna sätter du alltså för sig själva, och droppar alla elseif.

mvh

278 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
140 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
137 ms — ändringar (db)