[ASP] RecordSet verdelen over een tabel

Pagina: 1
Acties:

  • trekker22
  • Registratie: Maart 2003
  • Laatst online: 17-04 13:08
Hoi mensen,

ik werk veel met RecordSets die ik middels een

code:
1
2
3
do while not rs.eof
   <!-- hier mijn html code en database informatie -->
loop


probleem waar ik mee zit: ik wil de informatie in een tabel vorm laten zien. Elke cel van de tabel vormt dan de inhoud van 1 record.

bv een Recordset met de volgende rijen:
1
2
3
4
5
6

wil ik presenteren als:
123
456
789

of als:
14
25
36

ik heb al zitten bedenken dat ik van te voren wil aangeven in welke volgorde ik de informatie presenteren (van links naar rechts, of van boven naar beneden)
En ik wil kunnen aangeven na hoeveel records ik moet overspringen naar de volgende rij. (bv na 123, moet je op volgende rij verder gaan met 456)

dit is te gebruiken voor oa het presenteren van kleine advertenties e.d.
Normaal werk ik altijd met rijen, voor bijvoorbeeld zoekresultaten of een lijst van producten in een database.

Iemand wel eens iets dergelijks gemaakt?

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 00:27
Ff een snel voorbeeldje uit de losse pols ... :)


Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
private sub maakTabel(int aantalKolommen)
     dim intCurrentrij
     strSQL =  "SELECT * FROM Tabelnaam"
     set rsRecordset = dbConnectie.Execute(SQL)
     if (rsRecordset.EOF = FALSE) then
          intCurrentrij = 1
          Response.Write("<Table>")
          while not rsRecordset.EOF = true
               if intCurrentrij = 1 then
                    Response.Write("<tr>")
               end if
               Response.Write("<td>" & rsRecordset("waarde") & "</td>
               intCurrentrij = intCurrentrij + 1
               if (intCurrentrij > aantalKolommen) then
                    Response.Write("</tr>")
                    intCurrentrij = 1
               end if
               rsRecordset.MoveNext
          wend
          Response.Write("</table>")
     end if
     rsRecordset.Close
     set rsRecordset = nothing
end sub


Volgens mij is de routine duidelijk, maar toch ff commentaar. Je moet een teller bijhouden die bepaalt in welke kolom je bent, dit is de variabele intCurrentrij. De variabele aantalKolommen geeft aan uit hoeveel kolommen de tabel moet bestaan. Door beide waardes te vergelijken, weet je wanneer je een nieuwe rij aan de tabel moet toevoegen en wanneer een bepaalde rij moet worden afgesloten.

[ Voor 7% gewijzigd door TweakersOnly op 10-09-2003 20:14 ]


  • trekker22
  • Registratie: Maart 2003
  • Laatst online: 17-04 13:08
zo'n soort functie heb ik nu zelf ook al in elkaar gezet, waar ik het aantal kolommen en de richting kan aangeven.

Maar nu loop ik tegen een probleem aan wat ik al enigszins van te voren zag aan komen:

- de formatering van het record. Als ik een functie gebruik dan heb ik geen invloed meer op de formatering en kan ik alleen de waardes van de velden standaard afdrukken (de manier van formatering ligt dan vast in de functie).

- vaak moet deze formatering aangepast worden aan de wensen van de klant en dan valt er niet te werken met een dergelijke functie, en zal ik geen functie moeten gebruiken maar het voor ieder project, de code er per pagina apart inzetten... of heeft iemand hier ideeen over?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19:10

gorgi_19

Kruimeltjes zijn weer op :9

Dan gooi je de manier van formattering uit ASP en maak je gebruik van een externe stylesheet? :?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • trekker22
  • Registratie: Maart 2003
  • Laatst online: 17-04 13:08
kun je een voorbeeld geven wat je ongeveer bedoeld?

ik weet dus wel hoe ik ervoor moet zorgen dat ik de correcte cellen krijg voor mijn data, maar hoe zorg ik voor de formatering van al mijn data?

ik wil bv. zoiets voor elkaar krijgen, mijn cell dus:
code:
1
2
3
4
5
6
7
<td>
<!--  hier krijg ik een array aangereikt, waarvan de huidige rij in het array een record weerspiegelt -->
Naam: <%=myarray(i,0)%><br>
Plaatje: [img]"<%=myarray(i,1)%>"><br>
Beschrijving:[/img]<%=myarray(i,2)%></strong>
<!-- dit was de specifieke formatering per record -->
</td>


zoals je ziet is de formatering voor een bepaald record heel specifiek: soms is het plain text, dan wordt het gebruikt voor een plaatje, om de tekst moet een bepaalde style hebben.

omdat dit steeds zo verschillend is, heb ik het idee dat een functie schrijven niet veel nut heeft, en dat ik per project beter wat code kan copieeren van oude projecten.

Een functie die er voor zorgt voor wat hergebruik zou mooi zijn, maar ik weet niet hoe ik dit hier kan in passen.

maar elk idee is welkom!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19:10

gorgi_19

Kruimeltjes zijn weer op :9

Als je maakt:
ASP:
1
<td class="melp"><% recordset %></td>

Dan kan je deze in een externe stylesheet definieeren hoe de formatting moet gebeuren.

Cascading Stylesheet:
1
2
3
4
td.melp
{
    font-family: Arial;
}


Sterker, je kan zelfs:
Cascading Stylesheet:
1
2
3
4
td.melp img
{
    border-width: 2px;
}

gebruiken.
Nu weet ik dat bovenstaande stukjes css de bovenburen tot kleine beroertes kan brengen, maar het geef je in ieder geval een idee. :)

[ Voor 46% gewijzigd door gorgi_19 op 10-09-2003 23:20 . Reden: Gewijzigd, speciaal voor Rickets. :P ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • trekker22
  • Registratie: Maart 2003
  • Laatst online: 17-04 13:08
code:
1
<td class="melp"><% recordset %></td>


deze code kun je toch niet gebruiken? je kunt toch niet zo maar de recordset gebruiken? je moet indiviudele velden afdrukken/aanspreken of zie ik dit nu verkeerd?

nou ik denk dat hier geen functie voor te schrijven valt... je kunt gewoon de formatering niet kwijt in zo'n functie, ook niet met een stylesheet..

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19:10

gorgi_19

Kruimeltjes zijn weer op :9

trekker22 schreef op 11 september 2003 @ 21:06:
code:
1
<td class="melp"><% recordset %></td>


deze code kun je toch niet gebruiken? je kunt toch niet zo maar de recordset gebruiken? je moet indiviudele velden afdrukken/aanspreken of zie ik dit nu verkeerd?
Het gaat om het idee; hoezo de precieze statement gaat kan je zelf bedenken; het ging me meer om de stylesheet
nou ik denk dat hier geen functie voor te schrijven valt... je kunt gewoon de formatering niet kwijt in zo'n functie, ook niet met een stylesheet..
Want? Ik ben dan heel benieuwd naar een voorbeeld dat het niet kan.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • trekker22
  • Registratie: Maart 2003
  • Laatst online: 17-04 13:08
ik heb er geen functie voor geschreven maar ik heb dit mooie stukje code gebruikt dat voor mij de tabel maakt aan de van enkele gegevens:
- array dat mijn recordset presenteert
- aantal dat bepaalt wanneer er een nieuwe rij/kolom moet beginnen
- richting die aangeeft hoe uit te vullen, van links naar rechts of van boven naar onder.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<%
Set rs = ReturnRecords(db_connection,"qryTest", null)

if not rs.eof then
    my_array = rs.GetRows
end if
rs.close

dim cols,total,rows,rest,direction,k,u,current_row
cols = 4
total  = ubound(my_array,2)+1
rows = total \ cols
rest = total mod cols

direction = "down" 'choose "left" or "down"
%>

<%if direction = "left" then%>
    <table cellspacing="2" cellpadding="2" border="0">
    <%for k = 1 to rows%>
    <tr>
        <%for u = 1 to cols%>
            <td> <%'in deze TD moet de record inhoud%>
                <%current_row = (u-1)+(k-1)*cols%>
                <%=my_array(0,current_row)%>
            </td>
        <%next%>    
    </tr>
    <%next%>
    <%if rest > 0 then%>
    <tr>
        <%for u = 1 to rest%>
            <td><%'in deze TD moet de record inhoud%>
                <%current_row = (u-1)+(k-1)*cols%>
                <%=my_array(0,current_row)%>
            </td>
        <%next%>    
    </tr>
    <%end if%>
    </table>
<%end if%>

<%if direction = "down" then%>
    <table cellspacing="2" cellpadding="2" border="1">
    <tr valign="top">
    <%for k = 1 to rows%>
        <td>
            <table cellspacing="2" cellpadding="2" border="1">
            <%for u = 1 to cols%>
            <tr>
                <td><%'in deze TD moet de record inhoud%>    
                    <%current_row = (u-1)+(k-1)*cols%>
                    <%=my_array(0,current_row)%>
                </td>
            </tr>
            <%next%>
            </table>
        </td>
    <%next%>
    <%if rest > 0 then%>
        <td>
            <table cellspacing="2" cellpadding="2" border="1">
            <%for u = 1 to rest%>
            <tr>
                <td><%'in deze TD moet de record inhoud%>    
                    <%current_row = (u-1)+(k-1)*cols%>
                    <%=my_array(0,current_row)%>
                </td>
            </tr>
            <%next%>
            </table>
        </td>   
    <%end if%>
    </tr>
    </table>
<%end if%>


opzich werkt dit stukje code prima, en is ook redelijk snel te hergebruiken in andere projecten.

Maar volgens mij is het niet mogelijk hier een functie van te maken, en dan waarom niet?
code:
1
2
3
4
<td><%'in deze TD moet de record inhoud%>    
   <%current_row = (u-1)+(k-1)*cols%>
   <%=my_array(0,current_row)%>
</td>


dit bovenstaande is de plek waar ik informatie van het record wil gebruiken. Op dit moment druk ik alleen het eerste veld van het record af (om te testen heb ik een ik een recordset, waar per record alleen 1 veld is met een nummertje)

Maar indien ik veel meer en verschillende "soorten" velden heb, dan kan ik dit niet doorgeven aan de functie.
Hoe kan ik aan de functie doorgeven dat in veld 1 een tekst staat die VET moet worden afgedrukt, veld 2 is tekst die zonder formatering mag worden afgedrukt, veld 3 is de url naar een image en er zal een correcte IMG tag omheen moeten... etc.

Ik heb geen idee hoe je dit met een stylesheet zou kunnen doorgeven...

Nouja dit stukje code is goed te gebruiken als template voor als ik het snel nodig heb in een project.
Pagina: 1