I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Det er forskelligt. Det kan f.eks. være på SQL sætninger som dette: <% SQL = "Select * From Faggrupper ORDER BY Faggruppe" Set rs = Conn.Execute(SQL)
SQL2 = "Select COUNT(ID) As Antal From Virksomheder WHERE Aktiv = True" Set rs2 = Conn.Execute(SQL2)
Randomize Tal = Int((rs2("Antal") * Rnd) + 1)
SQL3 = "Select ID, Kategori, Virksomhed, Email, Hjemmeside, Kortbeskrivelse From Virksomheder WHERE ID=" & Tal & "AND Aktiv = True" Set rs3 = Conn.Execute(SQL3) %>
Det virker ikke selvom jeg laver et tjek. Men det kunne jeg nu heller ikke forstå for jeg ved jo, at rs2 ikke er 0. Og så kunne det vel heller ikke passe at det virkede nogen gange??
magik >> En "SELECT COUNT...." vil altid returnere én post, med enten 0 eller det antal der blev fundet. Så derfor er checket for BOF/EOF ikke meget værd i denne sammenhæng :-)
Dine SQL statements indikerer for mig, at det er en Access database. Er dette korrekt ?
I så fald kan det skyldes at databasen periodisk er låst, et problem for databaser generelt, men Access i meget høj grad.
CursorType, CursorLocation og IsolationLevel er nogle af de parametre der kan være årsagen. Det kunne gavne at se lidt mere kode...
tmceu -> Ja det er ganske rigtigt en Access database. Resten du fortæller om forstår jeg ikke så meget af, så jeg poster lige hele min kode. Håber det er ok.
---------------- Default.asp ---------------------- <!--#include file="Database.asp" --> <% SQL = "Select * From Faggrupper ORDER BY Faggruppe" Set rs = Conn.Execute(SQL)
SQL2 = "Select COUNT(ID) As Antal From Virksomheder WHERE Aktiv = True" Set rs2 = Conn.Execute(SQL2)
If Not rs2.EOF Then
Randomize Tal = Int((rs2("Antal") * Rnd) + 1)
End If
SQL3 = "Select ID, Kategori, Virksomhed, Email, Hjemmeside, Kortbeskrivelse From Virksomheder WHERE ID=" & Tal & "AND Aktiv = True" Set rs3 = Conn.Execute(SQL3) %> <html> <head> <title>givenet.dk</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link rel="stylesheet" href="Style.css" type="text/css"> </head>
Jeg gætter nu på at der er omkring min random funktion det giver problemer. For hvis jeg indsættter On Error Resume Next i toppen af ASP dokumentet kommer der ingenting der hvor den skulle udskrive navnet på en random virksomhed.
Er der nogen der har en bedre ide til, hvordan jeg laver en random funktion end denne:
SQL2 = "Select COUNT(ID) As Antal From Virksomheder WHERE Aktiv = True" Set rs2 = Conn.Execute(SQL2)
Jeg har lavet nogle ret uvidenskabelige tests efter jeg stødte på dette problem. De bekræftede min teori om, at databasen er låst i op til 2 min. efter at man sidst har brugt den, på trods af at der ryddes pænt op i forbindelser. Samtidig viskede en anden mig i øret, at ændring af driveren jvf. nedenstående løste et lignende problem hos ham.
Har det ikke noget med min random funktion at gøre. Jeg plejer altid at bruge den type databaseforbindelse og har aldrig haft problemet før? Jeg forstår heller ikke hvorfor det kun forekommer nogen gange.
Det kan jeg ikke forstå hvorfor det skulle gør da siden overhovedet ikke benytter sig af cookies. Og selvom siden gjorde ville det jo ikke være særlig fedt, at mine brugere skal slette deres cookies for at kunne anvende min side. Men ok tak for forslaget og jeg vil da også teste om det på mystisk vis skulle have nogen indflydelse.
tmceu -> Hej. Jeg tror at jeg har fået svar på, hvorfor det hele kager. Jeg fik hjælp fra en på netcoders.dk
Hvis jeg tæller hvor mange poster der i tabelen med rs2("Antal") og derfra vælger et random tal. Hvis der nu f.eks. er 50 poster i tabellen og jeg får et random tal som f.eks. kunne være 34 er det jo ikke sikkert at der findes en post med ID = 34, da jeg jo nogle gange også sletter poster fra databasen.
Hvordan vil du mene jeg kan løse problemet? Skal jeg hente alle de gyldige ID'er ind i et array og så vælge random derefter eller hvad?
Du kan bruge AbsolutePosition på dit recordset. Hvis du eks. har et recordset rs, og din random returnerer 34, kan du flytte til post 34, ved at bruge rs.AbsolutePosition = 34
Jeg syntes egentlig jeg er i min ret til at sige, at det er dig der bør tage det roligt. Jeg accepterede dit forslag og takkede for det, men mente dog ikke at det ville have nogen effekt.
Jeg kan ikke se du har grund til at kalde mig en syg stodder på det grundlag! Men nå, hvorfor spilde kræfter på dig....
tmceu -> Tak for dine svar i dette indlæg. Jeg tror jeg har fundet en løsning ved at anvende movenext i stedet for. Men du skal da selvfølgelig have point for din løsning er jo mindst lige så optimal. Tak for det!
Ift. til databasen er der ikke nogen performanceforskel, da du i begge tilfælde vil hente hele recordsettet, under forudsætning af, at du anvender SELECT * FROM...
Der vil dog være en lille forskel i negativ retning med movenext, da jeg antager at du udfører den x gange, mens absoluteposition laver én flytning.
Du kunne dog lave en lille yderligere forbedring. Hvis din random returnerer 34 ud af et recordset på 50, kunne du lave en SELECT TOP 34 * FROM... og derefter lave en movelast. Dette vil spare dig for at hente de sidste poster med over. Men med de størrelser vi snakker om, er det minimalt hvad du sparer. Men det er dog et skridt i retning af at tænke "rigtigt" ift. performance :-)
Ja nu kommer jeg krybende igen. Det driller mig sgu' stadig lidt hvis jeg bruger movenext. Kan jeg ikke få dig til at vise mig et lille eksempel på hvordan jeg skal bruge absoluteposition. Jeg skal selvfølgelig nok afsætte flere point til dig, hvis du er interesseret.
Jeg fik hjælp på netcoders.dk og problemet blev løst ved at anvende følgende kode:
<% SQL2 = "Select COUNT(ID) As Antal From Virksomheder WHERE Aktiv = True" Set rs2 = Conn.Execute(SQL2) Randomize Tal = Int((rs2("Antal") * Rnd) ) rs2.Close
SQL3 = "Select ID, Kategori, Virksomhed, Email, Hjemmeside, Kortbeskrivelse From Virksomheder WHERE Aktiv = True ORDER BY ID" Set rs3 = Conn.Execute(SQL3)
for i=1 to Tal rs3.MoveNext next Response.Write rs3("Virksomhed") %>
Synes godt om
Ny brugerNybegynder
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.