Avatar billede lazeric Nybegynder
27. juli 2007 - 11:19 Der er 13 kommentarer og
1 løsning

Udskriv alt i tabel uden at vide hvad kolloner hedder?

Jeg vil gerne udskrive indholdet af en tabel i en MySQL db uanset hvilke kolloner den måtte indeholde... kan man gøre det?

Det er bare en "select * from tabel;", men hvordan får jeg en ASP side til at lave den uden at kende kollonerne jeg vil se?
Avatar billede fennec Nybegynder
27. juli 2007 - 11:37 #1
Jeg ser 2 muligheder:

1. Du kan kalde rækker med et index i stedet for et navn. Løb derfor rs(x) igennem til du får en fejl (ikke flere kolonner)

set rs = con.execute("select * from enTabel")
while not rs.eof
  f=0
  do while true
    on error resume next
    response.write rs(f)
    if err.code <> 0 then
      response.write "<br>"
      err.Clear
      exit do
    end if
    on error goto 0
  loop
wend

2: Load data i et array med getrows
set rs = con.execute("select * from enTabel")
if not rs.eof then
  tmpArr = rs.getRows
  for x=0 to ubound(tmpArr,2)
    for y=0 to ubound(tmpArr)
      response.write tmpArr(y,x)
    next
    response.write "<br>"
  next
end if

ps. Begge metoder er utestet så der er evt fejl, men du skulle gerne se princippet i koden :o)
Avatar billede stoffer Nybegynder
27. juli 2007 - 13:04 #2
Du laver et recordset således:


Set conn = Server.CreateObject("ADODB.connection")
Set rs = Server.CreateObject("ADODB.Recordset")

strDNS = "Din DNS"
strSQL = "SELECT * FROM TABEL"

conn.open
rs.open strSQL, conn

Nu har du så åbnet et ADODB recordset, hvilket giver dig mulighed for at køre kolonner igennem således:
  for each column in rs.fields
      response.write column.value & column.type '135 er fx. en dato sql type
      rs.movenext
  end if
Avatar billede stoffer Nybegynder
27. juli 2007 - 13:32 #3
Hov for-loopet er selvf. ikke helt korrekt. Her er logikken....

<table>
<%
firstRow = true
while (rs.EOF = false)
for each column in rs.fields
if (firstRow) then
response.write "<tr><td>" & column.name & "</td></tr>" 
else
response.write "<tr><td>" & column.value & "</td></tr>" 
end if
firstRow = false
next
rs.movnext
wend
%>
</table>
Avatar billede stoffer Nybegynder
27. juli 2007 - 13:37 #4
Du skal huske at have ODBC driveren til MySQL installeret:

http://www.thescripts.com/forum/thread433253.html
Avatar billede lazeric Nybegynder
27. juli 2007 - 14:06 #5
-> Fennec:
Metode nummer 2 virker. nr1 skriver bare 1 taller i det uendelige :-)
Læg et svar og få point.

-> Stoffer
Tak for indsatsen. Jeg går med Fennec's svar, men du skal nok få point for indsatsen. :-)
Avatar billede thesurfer Nybegynder
27. juli 2007 - 14:20 #6
Det er fordi metode 2 mangler "rs.movenext" :-)

2: Load data i et array med getrows
set rs = con.execute("select * from enTabel")
if not rs.eof then
  tmpArr = rs.getRows
  for x=0 to ubound(tmpArr,2)
    for y=0 to ubound(tmpArr)
      response.write tmpArr(y,x)
    next
    response.write "<br>"
  next
  rs.movenext
end if

Ellers bliver rs aldrig EOF, og vil derfor blive ved med at loope..
Avatar billede lazeric Nybegynder
27. juli 2007 - 14:26 #7
->Stoffer
Jeg har prøvet dit loop da jeg gerne vil have kollonne navn med, men den skriver kun navnet på den første kollonne og så fortsætter den med at skrive alt indhold?
Avatar billede lazeric Nybegynder
27. juli 2007 - 14:32 #8
->Thesurfer
Metode 2 virker fint. Den giver fejl i din udgave: "Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record"
Avatar billede thesurfer Nybegynder
27. juli 2007 - 14:41 #9
Hmm.. Nr 1 mangler også rs.movenext:

set rs = con.execute("select * from enTabel")
while not rs.eof
  f=0
  do while true
    on error resume next
    response.write rs(f)
    if err.code <> 0 then
      response.write "<br>"
      err.Clear
      exit do
    end if
    on error goto 0
    rs.movenext
  loop
wend
Avatar billede thesurfer Nybegynder
27. juli 2007 - 14:42 #10
Hmm.. Rettelse:

set rs = con.execute("select * from enTabel")
while not rs.eof
  f=0
  do while true
    on error resume next
    response.write rs(f)
    if err.code <> 0 then
      response.write "<br>"
      err.Clear
      exit do
    end if
    on error goto 0
  loop
rs.movenext
wend

Det er den yderste loop, der har med rs.eof at gøre..
Avatar billede stoffer Nybegynder
27. juli 2007 - 16:36 #11
Umiddelbart synes jeg det lyder som en rigtig dårlig idé at bruge error handling på den måde, det må gør det langsommere...

Jeg skrev den kun lige hurtigt, og har kigget på løkken igen. der var et par fejl:
<%
firstRow = true
while (rs.EOF = false)
    response.write "<tr>"
    for each column in rs.fields
        if (firstRow) then
            response.write "<td>" & column.name & "</td>" 
        else
            response.write "<td>" & column.value & "</td>" 
        end if
        firstRow = false
    next
    response.write "</tr>"
    rs.movenext
wend
%>
Avatar billede stoffer Nybegynder
27. juli 2007 - 16:37 #12
Lidt for hurtig igen. Nu er der ikke fejl...

<%
firstRow = true
while (rs.EOF = false)
    response.write "<tr>"
    for each column in rs.fields
        if (firstRow) then
            response.write "<td>" & column.name & "</td>" 
        else
            response.write "<td>" & column.value & "</td>" 
        end if
       
    next
    firstRow = false
    response.write "</tr>"
    rs.movenext
wend
%>
Avatar billede lazeric Nybegynder
30. juli 2007 - 10:12 #13
-> Stoffer
Det ser rigtigt godt ud, men der er en fejl. Den første linie bliver ikke vist da den istedet viser navnet på kollonen.

Jeg har lagt jeres koder sammen... det ser grimt ud men virker efter hensigten :-)

response.write "<table border='1'><tr>"

Set Rs = Conn.Execute("SELECT * FROM "& request.querystring("table") &" ORDER BY noegle ASC;")

firstRow = true
while (rs.EOF = false)
for each column in rs.fields
if (firstRow) then
response.write "<td>"& column.name &"</td>" 
end if
next
firstRow = false
rs.movenext
wend

response.write "</tr>"

Set Rs = Conn.Execute("SELECT * FROM "& request.querystring("table") &" ORDER BY noegle ASC;")
           
<% if not rs.eof then
    response.write "<tr>"
  tmpArr = rs.getRows
  for x=0 to ubound(tmpArr,2)
    for y=0 to ubound(tmpArr)
      response.write "<td>"& tmpArr(y,x)&"</td>"
    next
    response.write "</tr>"
  next
end if
response.write "</table>"

end if
%>
Avatar billede stoffer Nybegynder
16. november 2007 - 19:08 #14
Hejsa... ryddede lige op i mine mails og så denne her, som jeg ikke har fået svaret på
Du har ret mht. første række, tænkte jeg ikke lige over...

her er lidt mere overskuelig end din løsning, hvis du vil optimere lidt..

<%
if rs.EOF = false then
response.write "<tr>"
    for each column in rs.fields       
      response.write "<td><b>" & column.name & "</b></td>"               
    next
response.write "</tr>"
end if
while (rs.EOF = false)
    response.write "<tr>"
    for each column in rs.fields
   
            response.write "<td>" & column.value & "</td>" 

       
    next
   
    response.write "</tr>"
    rs.movenext
wend
%>
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