Avatar billede monic Nybegynder
29. marts 2001 - 19:15 Der er 9 kommentarer og
1 løsning

SQL

Desværre er der jo ingen kategorier for sql, så jeg forsøger mig her, da min side er lavet i jsp.

Jeg har denne side, hvor jeg skal finde oplysninger til et bestemt objekt fra min tabel:
<HTML>

<HEAD>
<TITLE>Bud</TITLE>

</HEAD>
<BODY>
<%
    String DSNname = \"projektdatabase\";
    String username = \"\";
    String password = \"\";
    Class.forName(\"sun.jdbc.odbc.JdbcOdbcDriver\");
        java.sql.Connection connection = java.sql.DriverManager.getConnection(\"jdbc:odbc:\" + DSNname,username,password);
        java.sql.Statement statement = connection.createStatement();
       
    String effektnummerValue = request.getParameter(\"effektnummer\");
   
    %>
    HER:<%=effektnummerValue%>
   
    <%
    // TEMP TEMP SKAL SLETTES!!!!
    //effektnummerValue = \"1\";
   
   
   
    String sql = \"SELECT TOP 1 b.bud,s.varebetegnelse, s.budinterval,s.varebeskrivelse,s.slut \";
    sql = sql + \"FROM Bud b, Salg s \";
    sql = sql + \"WHERE b.effektnummer = s.effektnummer \";
    sql = sql + \"AND b.effektnummer = \" + effektnummerValue;
    sql = sql + \" ORDER BY timestamp DESC\";
   
    //String sql = \"SELECT * FROM salg WHERE effektnummer = \" + effektnummerValue;
   
   

    java.sql.ResultSet columns = statement.executeQuery(sql);
   

    int bud = 0;
    String varebetegnelse = \"\";
    int budinterval =  0;
    String varebeskrivelse = \"\";
    String slut = \"\";
    while(columns.next()) {
        varebeskrivelse = columns.getString(\"varebeskrivelse\");
        bud = columns.getInt(\"bud\");
        budinterval = columns.getInt(\"budinterval\");
        slut = columns.getString(\"slut\");
        varebetegnelse = columns.getString(\"varebetegnelse\");   
    }   
   
%>

<HR>
<TABLE BORDER=1>
    <TR>
      <TD WIDTH=\"200\">Her skal der vises et billede, hvis det findes!!!</TD>
      <TD WIDTH=\"200\">Beskrivelse:<BR><%=varebeskrivelse%></TD>
    </TR>
</TABLE>
<BR><BR><BR><BR>
<FORM ACTION=\"bud.jsp\" METHOD=POST>
<TABLE BORDER=0>
    <TR>
      <TD valign=\"top\"><B>Varenavn:</B>:</TD>
      <TD valign=\"top\">
            <INPUT TYPE=\"text\" NAME=\"varenavn\" SIZE=15 MAXLENGTH=15 VALUE=<%=varebetegnelse%>>
        </TD>
    </TR>
   
    <TR>
      <TD valign=\"top\"><B>Mit bud:</B>:</TD>
      <TD valign=\"top\">
            <INPUT TYPE=\"text\" NAME=\"startpris\" SIZE=15 MAXLENGTH=15 VALUE=<%=budinterval + bud%>>
        </TD>
    </TR>
   
    <TR>
      <TD valign=\"top\"><B>Mindste interval:</B></TD>
      <TD valign=\"top\">
          <INPUT TYPE=\"text\" NAME=\"interval\" SIZE=5 MAXLENGTH=5 VALUE=<%=budinterval%>>
      </TD>
    </TR>
   
    <TR>
      <TD valign=\"top\"><B>Auktion slut:</B></TD>
      <TD valign=\"top\">
          <INPUT TYPE=\"text\" NAME=\"auktionslut\" SIZE=15 MAXLENGTH=15 VALUE=<%=slut%>>
      </TD>
    </TR>
   
    <TR>
      <TD valign=\"top\"> <B>Medlems-ID:</B> </TD>
      <TD valign=\"top\"><INPUT TYPE=\"text\" NAME=\"medlemsid\" MAXLENGTH=15><BR>
      </TD> 
    </TR>
   
   
      <TD valign=\"top\"> <B>Password:</B> </TD>
      <TD valign=\"top\"><INPUT TYPE=\"text\" NAME=\"password\" MAXLENGTH=15><BR>
      </TD> 
    </TR>
   
    <TR>
      <TD valign=\"top\"> <B>Mail ved overbud</B> </TD>
      <TD valign=\"top\"><INPUT TYPE=\"checkbox\" NAME=\"mail\" VALUE=\"Mail ved overbud\"><BR>
      </TD> 
    </TR>
</TD>
     
</TABLE>
<BR><BR>
<INPUT TYPE=\"submit\" VALUE=\"Byd\">

<%
    sql = \"SELECT b.timestamp,b.bud,k.kontaktperson, k.kontaktpersonefternavn, s.pris \"; 
    sql = sql + \"FROM Bud b, Salg s, Kunder k \";
    sql = sql + \"WHERE k.kunderID = b.kunderID \";
    sql = sql + \"AND b.effektnummer = s.effektnummer \";
    sql = sql + \"AND b.effektnummer = \" + effektnummerValue;
    sql = sql + \" ORDER BY timestamp DESC\";
  %>
   
   

<TABLE BORDER=0>
    <TR>
      <TD valign=\"top\"><B>Dato</B>:</TD>
      <TD valign=\"top\"><B>Bud</B>:</TD>
      <TD valign=\"top\"><B>Navn</B>:</TD>
    </TR>
   
<%   
    columns = statement.executeQuery(sql);
   
    String startpris = \"\";
    while(columns.next()) {
        startpris = columns.getString(\"pris\");
        %>
            <TR>
                <TD valign=\"top\"><%=columns.getString(\"timestamp\")%></TD>
                <TD valign=\"top\"><%=columns.getString(\"bud\")%></TD>
                <TD valign=\"top\"><%=columns.getString(\"kontaktperson\") + \" \" + columns.getString(\"kontaktpersonefternavn\")%></TD>
            </TR>
        <%
    }   
   
%>
   
</TABLE>
Startpris: <%=startpris%>


</BODY>
</HTML>


Mine tabeller ser ud som følger:

tabelnavn: Salg
Effektnummer (primærnøgle): autonummerering
Omraade: tekst
Varebetegnelse: tekst
Pris: tal
Budinterval: tal
Varebeskrivelse: notat
Slut: dato og klokkeslæt


tabelnavn: Bud
Budnummer (primærnøgle): autonummerering

Det drejer sig om en auktionsside, hvor jeg vil have oplysninger om min vare. SQL-sætningen virker kun, hvis der allerede er afgivet et bud på varen, men det kan jeg jo ikke forudsætte. Hvordan skal jeg skrive den, så den også tager højde for at der ikke er afgivet bud endnu???
Effektnummer: tal
Timestamp: dato og klokkeslæt
Bud: tekst
Avatar billede nute Nybegynder
29. marts 2001 - 19:42 #1
hvilken sql er det som ikke fungerer....?
Avatar billede monic Nybegynder
29. marts 2001 - 19:51 #2
Ups, det er den første, som jeg anvender:

String sql = \"SELECT TOP 1 b.bud,s.varebetegnelse, s.budinterval,s.varebeskrivelse,s.slut \";
    sql = sql + \"FROM Bud b, Salg s \";
    sql = sql + \"WHERE b.effektnummer = s.effektnummer \";
    sql = sql + \"AND b.effektnummer = \" + effektnummerValue;
    sql = sql + \" ORDER BY timestamp DESC\";
   
   
Avatar billede nute Nybegynder
29. marts 2001 - 19:53 #3
som jeg kan se så bør du da ikke ta med b.bud i din SQL...for den henter jo ut den siste entry i denne tabell...

du skal heller bruke en JOIN...

/nute
Avatar billede monic Nybegynder
29. marts 2001 - 19:57 #4
Kan du ikke skrive din kommentar lidt mere konkret?
Avatar billede nute Nybegynder
29. marts 2001 - 20:00 #5
SQL = \"SELECT TOP 1 FROM Salg INNER JOIN Bud ON b.effektnummer = s.effektnummer WHERE b.effektnummer = \" + effektnummerValue;

jeg mener denne skal holde....

/nute
Avatar billede monic Nybegynder
29. marts 2001 - 20:01 #6
Jeg afprøver den lige. Vil du være så venlig og svare mig, da jeg ellers ikke kan tildele point?
Avatar billede nute Nybegynder
29. marts 2001 - 20:14 #7
svarer...
Avatar billede monic Nybegynder
29. marts 2001 - 20:15 #8
Hmmm...jeg har lige afprøvet sætningen, men den skriver at der enten er en stavefejl, et reserveret ord eller argument, eller punktureringen er forkert.

Jeg prøvede at ændre sætningen til:
SQL = \"SELECT TOP 1 FROM Salg s INNER JOIN Bud b ON b.effektnummer = s.effektnummer WHERE b.effektnummer = \" + effektnummerValue;

Men det giver stadig samme resultat

Avatar billede nute Nybegynder
30. marts 2001 - 11:15 #9
hva er den spesifikke feilmeldingen ?
Avatar billede monic Nybegynder
30. marts 2001 - 11:20 #10
Jeg har selv løst problemet, for din sql-sætning gør præcis det samme som min - og det var jo ikke meningen. Den skulle jo også medtage de elementer, som der ikke var blevet budt på endnu.
Din løsning krævede også at der allerede var blevet budt.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester