13. marts 2002 - 00:39Der er
17 kommentarer og 1 løsning
True og False
Jeg har noget som jeg simpelt hen ikke kan forstå...
Følgende virker... og if betingelsen opfyldes hvis aktiv er false... Værdien er gemt som en boolean i Databasen(access, Xp, dk) Når jeg udskriver værdierne fra objRS("aktiv") så skrives de ud som True og False....
<%while(!objRS.EOF){ Response.Write(objRS("aktiv")); aktiv = objRS("aktiv"); if(aktiv == false).......%>
Hvorfor vil følgende så ikke virke, den udskriver bare løs....don't care about true og false bare hele moloviten.... <%while(!objRS.EOF){ Response.Write(objRS("aktiv")); aktiv = objRS("aktiv"); if(!aktiv).......%>
Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
Hvis det gøres sker følgende... Den udskriver alle records fra tabellen, både sande og falske... Så variablen "aktiv", er som sand uanset hvad objRS("aktiv") er...
Det er ikke fordi min kode ikke virker for det gør det, som det første eksempel, men jeg vil bare gerne have at der skal stå...(!aktiv) da det ser pænere ud... Problemet er jo, at man ikke definere datatyper med ASP, hvilket er irreterende ud over alle grænser... Eksempelvis er jeg ofte nødt til at sætte +"" efter en streng jeg henter fra databsen, for at kunne sammenligne den med en anden streng variabel, så derfor tænkte jeg om man ikke kunne gøre noget ligende med boolean værdier for at få programmet til at forstå det korrekt, som koden læses nu tror compileren jo at "aktiv" er en streng og ikke en boolean værdi... Nu, er jeg blevet så nysgerrig at jeg øger points til 100, til den der kan komme med en løsning...
Dit eksempel fejler ikke noget i ovenstående linie. Jeg mener: Syntaxen er god nok. Fejlen må ligge et andet sted. ?
Jeg har prøvet denne kode og den fungere korrekt.
<% @ Language=JScript%> <% aktiv = false; ' jeg har skiftet mellem true/false if(!aktiv) { Response.Write("false") } else { Response.Write("true") } %>
Kan du selv komme i tanke om andre steder der kan have indflydelse på linien: 1. objRS("aktiv") er empty eller andet. ? 2. Du har stirret dig blind på det eksempel du arbejder med. Prøv at lave et nyt.
I øvrigt vil jeg give dig ret i at ASP's struktur er "for nem." Det kan sommetider snyde når man er vandt til Delphi eksempelvis.
Din kode virker osse her coltau... 1.objRS("aktiv") er ikke tom, jeg udskriver den jo... 2.Ja, du har nok ret... men det jeg har lavet virker jo med første eksempel... 3.Godt der er flere der deler min holdning...
-- Hvis jeg prøver følgende <%while(!objRS.EOF){ Response.Write(objRS("aktiv"));
if(objRS("aktiv")){...%>
udskriver den både true og false værdierne...mærkligt ikke... Så objRS("aktiv") opfater kompileren som True, uanset værdien i databasen... ..hvis jeg skriver <%while(!objRS.EOF){ Response.Write(objRS("aktiv"));
if(!objRS("aktiv")){...%>
udskriver den intet... altså....værdien af objRS("aktiv") er True....
Det er noget underligt noget...kan fejlen ligge på webserveren's database driver...???
Her er den... Den virker fino og udskriver alle dem som er false i databasen... <% @Language = JavaScript %> <% Response.Buffer = true %> <% Response.Expires = -1; %>
<HTML> <HEAD> <TITLE>Registrering_adm</TITLE>
</HEAD>
<!-- midlertidig funktion til at skabe kontakt til tabellen i databasen --> <% function openDB(){ objConn = Server.CreateObject("ADODB.Connection"); str1 = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" str2 = Server.MapPath("cgi-bin/GRINDBRUGER.mdb"); str = str1 + str2; objConn.open(str); } %>
<BODY> <BR> <BR>
<!-- funtkionen der åbner databasen kaldes --> <%openDB(); %> <%objRS = Server.CreateObject("ADODB.Recordset");%> <% sql = sqlCall = "select * from Bruger";%> <% objRS.cursorType=0;%> <% objRS.open(sql,objConn);%>
<!-- Nedenstående udskriver dem som har søgt om medlemskab siden sidst --> <%while(!objRS.EOF){ //Response.Write(objRS("aktiv"));
Jeg har prøvet alt hvad jeg kan komme i tanke om for at konvertere varianten "aktiv" til en bolsk variabel - men den vil ikke. !#¤
1. I VBScript kan man anvende funktionen: CBool - men den melder ukendt objekt. aktiv = CBool(rs("online")); 2. Denne her virker heller ikke. aktiv = rs("online") == "Sand"; Hvis jeg udskrive et bolsk sandt udtryk med Response.Write får jeg jo: "Sand"
MEN - MEN ----------------------
Mens jeg skrev det her så prøvede jeg lige denne her:
aktiv = rs("online") == true;
Hvis du bruger den kan du anvende dit "smukke" kode bagefter uden problemer:
if (!aktiv) {
Men - det understreger jo blot at ASP er en sprog hvor variabler er sent bundet - meget sent.
----------------------------------
aktiv = rs("online"); if (!aktiv) { ' Tolkes af compileren som en string der ikke er tom. !
Det må jeg sige... Alletiders... jeg vil gøre brug af aktiv = objRS("aktiv") == true; Så kommer der styr på skønheden i det igen, :) Tak for din interesse...
-ASP finder først ud af datatypen i det sekund man eksempelvis bruger det i en sammenligning... i det aller første eksempel med (aktiv == false) Der virker det jo som en bolsk value..., ellers ville det kun være sandt hvis (aktiv == "false").... Så der skal en sammenligning til... på '==' maner... Så det med at forkorte det ned til (!aktiv)...
Ja - sjovt nok så ændre variablen type alt efter den sammenhæng den anvedes i. Den type holder den så indtil den anvendes i en anden sammenhæng.
Men det er jo også Bill der har lavet ASP.
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.