Der bliver investeret massivt i AI. Teknologien er mere tilgængelig end nogensinde, og ambitionerne er høje. Alligevel oplever mange virksomheder, at resultaterne udebliver.
Det er fordi du specifikt beder om rækken 'Brugere' fra recordset'et (Response.Write rs("Brugere") ), og det findes ikke.
Du beder SQL om at lave et recordset til dig som indeholder det højeste tal i 'Brugere' kolonnen (strSQL = "Select max(Brugere) from Lande"), men du glemmer at fortælle SQL hvad den skal kalde den række tallet står i.
Som et eksperiment kan du jo prøve at køre din SQL sætning i Access og se hvilket navn kolonnen får, den plejer at give den 'expr0001' eller noget i den stil.
Hvis du gerne vil have en bedre uddybning så sig lige til.
Løste mit forslag ikke dit problem? Det er ikke for pointenes skyld men jeg vil da gerne vide om jeg hjælper di rigtigt :-)
Men kan da lige prøve :-)
Du skal holde de forskellige ting adskildt.
Tabellen (databasen) er der hvor du har dataene liggende som du kender dem (i kolonner og rækker)
Recordset (rs) er den 'beholder' som ASP bruger til at gennemløbe en tabel, som enten er 'rå' eller manipuleret via SQL
SQL er et sprog som bl.a kan tage data fra en eksisterende tabel og præsentere dem på en anden måde.
SQL kan tage data fra en eksisterende tabel og manipulere dem så de ser helt anderledes ud, og derefter give dem videre til ASP som et recordset. Dette recordset indeholder data fra tabellen men de ligner ikke nødvendigvis den originale tabel, der kan være færre poster og andre kolonner.
Hvis vi tager din kode step for step hjælper det måske
Her opretter du forbindelsen til databasen. Dataene i dine tabeller er 'rå' her så hvis du vælger at se dem igennem vha. et recordset vil du se præsis hvad du ser når du er i access.
-strSQL = "Select max(Brugere) from Lande" -Set rs = Conn.Execute(strSQL)
Her sker der noget. Du har nu valgt at lave et recordset vha. SQL. SQL har absolut intet med asp at gøre, det er et uafhængigt sprog (som ASP kan starte op) til at manipulere databaser med, og det er nok det der er grunden til du ikke helt forstår det. Du sender en SQL sætning afsted til database driveren som fortæller at du fra Lande tabellen gerne vil have det største tal fra Brugere kolonnen. Resultatet er et recordset som du putter ind i rs variablen. Hvis du kigger på recordset'et så vil du se en række med en kolonne, kolonnens navn har SQL selv valgt fordi du ikke har bedt om et bestemt navn.
-Response.Write rs("Brugere")
Her vil du så gerne have at ASP skal skrive indholdet af kolonne Brugere i rs. Desværre findes kolonne Brugere ikke i rs. Den findes i din tabel, men du har ikke 'programmeret' SQL til at den også skal inkluderes i det recordset som den aflevere til ASP.
-Conn.Close -Set Conn = Nothing
Og til sidst lukker du forbindelsen til databasen.
Det bliver måske nemmere at forstå hvis du ser din rs variabel (som jo indeholder recordset'et) som en slags array. Du kan tilgå kolonnerne på 2 måder, enten ved at skrive hvad navnet er eller ved at fortælle kolonne nummeret. Har du et recordset med 3 kolonner ID - Land - Brugere, så kan du få indholdet fra brugere ved at skrive rs("brugere") eller ved at bede om kolonne 2 rs(2) (arrays starter jo altid ved 0). Er det ID det drejer sig om så er det enten rs("ID") el. rs(0).
I din SQL laver du kun en kolonne (select max(brugere)) og da du ikke ved hvad den kolonne hedder kan du læse indholdet vha. rs(0) Laver du en SQL til ovenstående tabel (ID - Land - Brugere) som kun henter kolonnerne ID og Brugere 'select id,brugere' kan du få indholdet fra brugere ved at skrive rs("brugere") el. rs(1). Er det ID det drejer sig om så er det enten rs("ID") el. rs(0). Skriver du 'select brugere,id' i din SQL er det lige omvendt, rs("ID") giver stadig ID kolonnen men rs(0) giver nu Brugere kolonnen mens rs(1) giver ID.
Håber det hjalp lidt ellers find en side om SQL og test lidt af deres ting i Access
firehat >> Har ikke gidet læse den lange forklaring, så her er en kort:
Når man laver en SELECT sætning, kan man vælge at returnere data direkte fra et felt (f.eks. "SELECT Brugere FROM Lande"). SQL er dog et smart sprog, som også kan lave beregninger for dig. Det er det, der sker når du laver Max(Brugere) - og det betyder så at det ikke længere er et felt i databasen, der returneres, men derimod et resultat af en beregning! Dette resultat kan ikke tilgås ved at forespørge på et kolonnenavn.
Det (nemmeste?) du kan gøre er at lave lidt om i din SQL sætning:
SELECT Max(Brugere) AS maxBrugere FROM Lande
- og derefter kan du forespørge på _variablen_ maxBrugere i stedet for.
Capisce?
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.