Jeg har brug for at connecte til en SQL-server på mit netværk, og dynamisk lave en HTML-side af resultatet af en query. Det er ikke noget der nødvendigvis skal lægges ud på en hjemmeside, men bare kunne vises i en browser på mit interne netværk.
Hmmm. Jeg har ikke arbejdet så meget med lige det, så muligvis tager jeg fejl. Men så vidt jeg ved, skal du enten bruge sprog som ASP/PHP/JSP/osv. for at hente fra en database og vise i HTML. Jeg ved ikke, om man på andre måder kan genererer HTML fra databasen uden brug af server-side-scripting.
OK, men lad mig vende spørgsmålet om: Det jeg har brug for er jo dybest set at lave et stykke HTML-kode der inkluderer en forespørgsel til en database - det burde vel principielt ikke være så kompliceret? Hvad med et ODBC-kald?
Server-side-scripting er også en mulighed - hvad mener du præcis?
Vil du have en HTML-side der altid viser udtrækket som det så ud på det tidspunkt filen blev genereret, så bruger du dit foretrukne programmeringssprog, og opbygger en HTML-tabel i en fil. Den nøjagtige implementation afhænger af hvad dit databaselibrary giver dig mulighed for, men for det meste har du mulighed for at få de enkelte felters navne, og så bruge dette som overskrifter, hvorefter du looper igennem resultatsættet og skriver HTML-tabelrækker.
Vil du have en side der altid viser udtrækket som det ser ud på det tidspunkt filen åbnes, så laver du et server-side script i ASP, PHP, eller hvad du nu har til rådighed, der opbygger en tabel og skriver ud til browseren.
Jeg mener bare, at der ikke er nogen HTML- eller JavaScript-kode til at snakke med en database, så derfor ville jeg mene, at du skal ud i noget ASP eller PHP, altså server-side, for at hente data ned. Om der skulle være andre muligheder, evt. implementeret i MS SQL, skal jeg ikke kunne side.
Du er nødt til at lave lidt server-side-script for at kunne vise resultatet. Eller måske kan man få SQL-serveren til at aflevere en XML-fil, som kan styles.
Men under alle omstændigheder er det nok smartest sikkerhedsmæssigt, at lade det gå igennem et script-sprog - frem for at have direkte query-adgang til SQL-serveren.
Her er et eksempel på et script, som kan gøre det. Der er nogle småting du skal være opmærksom på: - Du skal skrive filnavnet i action i linie 63. - Når det er lagt på nettet, så kan alle se i din database (hvis de kender url'en). Så der bør bygges et login-system omkring. - Der skal sættes en anden connection ind i starten (den her er til MySQL). Men ellers burde det være lige til at sætte ind.
Og her er så asp-koden: <% set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "driver={MySQL ODBC 3.51 Driver};option=4;server=127.0.0.1;user=[brugernavn];password=[kodeord];DATABASE=[database];"
fejl = ""
If Len(request("SQLstr")) = 0 Then SQLStr = "" Else SQLStr = request("SQLstr") End If
If Len(request("f_bredde")) = 0 Then f_bredde = 30 Else f_bredde = cInt(request("f_bredde")) End If
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <head> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTENT="Første beta: Pierre Husted - email pierre@pi-hus.dk"> <META NAME="Keywords" CONTENT="database, sql, online-access"> <META NAME="Description" CONTENT="Kig i databasen"> <title>Kik i basen</title> </head>
<body> <b>Kig i basen</b><br>
<% If len(request("sqlstr")) > 0 AND FEJL = "" Then
For SQLStr_array_i = 0 to uBound(SQLStr_array) This_SQLStr = trim(SQLStr_array(SQLStr_array_i)) If len(This_SQLStr) > 0 Then response.write("<br><b>QUERY(" & SQLStr_array_i + 1 & ") : " & This_SQLStr & "</b><br>") Vis_Query(This_SQLStr) End If Next Else response.write("<h4>QUERY : " & SQLStr & "</h4><br>") Vis_Query(SQLStr) End if
Else response.write("<br>Her kan du indtaste en SQL sætning.<br> Der vil så blive dannet en liste over de poster der opfylder sætningen.<br>") End If
If len(fejl) > 0 Then response.write("<br><br><h3>" & fejl & "</h3><br><br>") End If
%>
<form method="POST" action="filnavn.asp"> <textarea name=SQLstr rows=21 cols=120><%=SQLStr%></textarea><br> <small> Max feltbredde i tabel <INPUT TYPE="text" NAME="f_bredde" size=3 value='<%=f_bredde%>'> <SELECT NAME="linier_per_overskrift"> <% linier_per_overskrift = cStr("" & request("linier_per_overskrift")) if linier_per_overskrift = "" Then linier_per_overskrift = "20" for i = 5 to 100 step 5 response.write("<option value=""" & i & """") If linier_per_overskrift = cStr(i) Then response.write(" SELECTED ") response.write(">" & i & " linier før overskrift</option>") next %> </SELECT> <INPUT TYPE="checkbox" NAME="lines" VALUE="on" <%If request("lines") = "on" then response.write(" CHECKED ")%>> lines i tabel <INPUT TYPE="checkbox" NAME="spaces" VALUE="on" <%If request("spaces") = "on" then response.write(" CHECKED ")%>> spaces mellem celler <br> <INPUT TYPE="checkbox" NAME="multi_query" VALUE="on" <%If request("multi_query") = "on" or request("multi_query") = "" then response.write(" CHECKED ")%>> Udfør flere SQL-sætninger (adskilt af ;)
</small> <br><br>
<input type="submit" value="Kig i basen" name="B1">
</form>
</body> </html>
<%
FUNCTION KlipTekst(byval tekst) If len(tekst) > f_bredde Then KlipTekst = left(tekst, f_bredde - 3) & "..." Else KlipTekst = tekst End If END FUNCTION
SUB Vis_Query(byval SQLStr)
' On error goto 0 ' on error resume next Set Poster = Conn.Execute(SQLStr)
If InStr(lCase(SQLStr), "select") > 0 or InStr(lCase(SQLStr), "describe") > 0 or InStr(lCase(SQLStr), "show") > 0 Then ' ikke tillade alt If Not Poster.EOF Then
linier_per_overskrift = cInt("0" & request("linier_per_overskrift")) If linier_per_overskrift = 0 then linier_per_overskrift = 10
antal = 0 response.write("<table border=") If request("lines") = "on" then response.write("1") Else response.write("0") response.write(">" & vbcrlf)
overskrifter = "" For i = 0 To Poster.Fields.Count - 1 overskrifter = overskrifter & "<th bgcolor='silver'><font color=#ffff00>" & Poster.Fields(i).Name & "</font></th>" If request("spaces") = "on" then overskrifter = overskrifter & " <td> </td>" & vbcrlf End If Next
Do While NOT Poster.EOF If antal = 0 or (antal mod linier_per_overskrift = 0)then response.write(overskrifter) End If response.write(vbcrlf & " <tr>")
For i = 0 To Poster.Fields.Count - 1 Response.Write(" <td>") Response.Write(KlipTekst(Poster.Fields(i).value)) ' skriv selve felt/celle-indholdet Response.Write("</td>" & vbcrlf) If request("spaces") = "on" then response.write(" <td> </td>" & vbcrlf) End If Next response.write(" </tr>") antal = antal + 1
Poster.movenext Loop
response.write("</table>") response.write("<br>Der blev fundet " & antal & " poster.<br><br>") Else
response.write("<big>Ingen poster blev fundet.</big>") End If Else response.write(" - intet at vise.<br>") End If END SUB ' Vis_Query
Tak for de gode kommentarer - jeg tror dog stadig at løsningerne er for komplicerede? I virkeligheden vil jeg gerne bare have en HTML-side med et <SCRIPT> i midten hvor jeg laver en simpel query: f.eks. "SELECT kolonne1 FROM tabel1 WHERE kontonummer='12345678'" (Jeg skal nok selv sørge for at kontonummer-værdien kan vælges af brugeren). Evt. med brug af ODBC, men selvfølgelig helst en generel løsning der kan bruges af alle på netværket der i øvrigt har forbindelse til SQL-serveren.
Du kan desværre ikke udføre SQL-kald i et script-tag, desværre. Det _skal_ foregå server-side.
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.