Popolamento di una tabella html a 2 colonne da database

  • Creatore Discussione Creatore Discussione Nemesi
  • Data di inizio Data di inizio

Nemesi

Nuovo Utente
5 Apr 2005
2
0
0
premetto che sono agli inizi con asp e che uso Dreamweaver MX 2004.

Dunque, io vorrei popolare una tabella in questo modo:

|----------|-----------|
| record1 | record 2 |
|----------|-----------|

Per un totale di 8 record (quindi 4 righe della mia tabella).

Ho utilizzato il comportamento di area ripetuta di dreamweaver con la seguente modifica:

<table>
<%
While ((Repeat1__numRows <> 0) AND (NOT MioRS.EOF))
%>
<tr>
<%
If (NOT mioRS.EOF) Then
%>
<td>
<% If ((mioRS.Fields.Item("campo").Value) <> "") Then %>
<img src="<%=(mioRS.Fields.Item("campo").Value)%>">
</td>
<% End If %>
<%End If%>
<%
If (NOT mioRS.EOF) Then
Repeat1__index=Repeat1__index+1
Repeat1__numRows=Repeat1__numRows-1
mioRS.MoveNext()
%>
<td>
<% If ((mioRS.Fields.Item("campo").Value) <> "") Then %>
<img src="<%=(mioRS.Fields.Item("campo").Value)%>">
</td>
<% End If%>
</tr>
<%
Repeat1__index=Repeat1__index+1
Repeat1__numRows=Repeat1__numRows-1
mioRS.MoveNext()
Wend
%>
</table>

Ho poi usato i comportamenti di dreamwever per visualizzare solo gli 8 record e ho messo una barra di navigazione recordset.
Ho fatto una prova con 13 record.
Al primo giro è tutto ok poi, quando vado a visualizzare gli altri record con il link avanti ho il messaggio di errore:"Il record corrente corrisponde all'inizio o alla fine del file oppure è stato eliminato. Per eseguire l'operazione richiesta è necessario disporre di un record corrente"
Se i record sono pari ritorna tutto ok.
Per questo motivo ho inserito quello che credevo fosse un controllo arrivo alla fine del record (ma evidentemente così non è), nel qualcaso non mi inserisce la colonna TD.

Come devo correggere?

Grazie mille ! :)
 
Mi dò un'autorisposta

Nel qualcaso qualcuno avesse dovuto avere un problema simile posto la soluzione che ho trovato io:

- Innanzitutto non badare agli errori di codice dell'altro post :)

- Considerare che la soluzione da me trovata è quella di un novizio alle prime armi con ASP e che sicuramente ci sarà qualcosa di inutile, sbagliato e/o formalmente scorretto (però funziona).

- Consirerare che il codice che segue è una modifica a quello generato dai comportamenti server di Macromedia Dreamweaver MX e che quindi non funzionerà senza il codice autogenerato dal programma in testa alla pagina.

- La pagina utilizza codice VBScript.

Il problema consisteva nel popolare una tabella html, formata da due colonne, con i dati estratti da un recordset uno per ogni colonna secondo lo schema che segue:

td td
|------------------------|------------------------|
tr | Valore Campo1 Record1 | Valore Campo1 Record2 |
|------------------------|------------------------|

utilizzando e modificando il comportamento area ripetuta di DW.

Ho proceduto nella maniera che segue:

1) Ho creato la tabella (formata da una riga e due colonne)

2) Ho creato il RS

3) Ho inserito il campo interessato all'interno delle due celle della mia tabella

4) Ho applicato il comportamento di area ripetuta ( visualizzazione di 10 record alla volta) di DW alla riga della tabella

Ora dovrei trovarmi nella seguente situazione:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="Connections/mia_connessione.asp" -->
<%
Dim Mio_Recordset
Dim Mio_Recordset_numRows

Set Mio_Recordset = Server.CreateObject("ADODB.Recordset")
Mio_Recordset.ActiveConnection = MM_mia_connessione_STRING
Mio_Recordset.Source = "SELECT * FROM mia_tabella_db"
Mio_Recordset.CursorType = 0
Mio_Recordset.CursorLocation = 2
Mio_Recordset.LockType = 1
Mio_Recordset.Open()

Mio_Recordset_numRows = 0
%>
<%
Dim Repeat1__numRows
Dim Repeat1__index

Repeat1__numRows = 10
Repeat1__index = 0
Mio_Recordset_numRows = Mio_Recordset_numRows + Repeat1__numRows
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento senza titolo</title>
</head>

<body>
<table>
<%
While ((Repeat1__numRows <> 0) AND (NOT Mio_Recordset.EOF))
%>
<tr>
<td><%=(Mio_Recordset.Fields.Item("mio_campo").Value)%></td>
<td><%=(Mio_Recordset.Fields.Item("mio_campo").Value)%></td>
</tr>
<%
Repeat1__index=Repeat1__index+1
Repeat1__numRows=Repeat1__numRows-1
Mio_Recordset.MoveNext()
Wend
%>

</table>
</body>
</html>
<%
Mio_Recordset.Close()
Set Mio_Recordset = Nothing
%>

A questo punto mi ritrovo con una tabella che mi genera 10 righe con due colonne all'interno delle quali lo stesso valore del campo.
Non è quello che voglio ottenere, io voglio che ad ogni colonna il valore del campo sia quello del record sucessivo.

Ho ragionato nel seguente modo: invece che incrementare il valore della riga, ovvero spostarmi al record sucessivo alla fine della TR della mia tabella dovrò farlo alla fine della creazione di ogni TD.
Cioè ogni volta che viene popolata una cella viene incrementato il valore della riga e si passa al record sucessivo, quindi popolo la seconda cella e così via.

A questo punto devo però effettuare un controllo che mi verifichi chenon sia giunto alla fine dei record, altrimenti cercherei di popolare una delle celle con i valori di un campo di un record inestitente e ciò mi creerebbe un'errore (ed è proprio questo che mi succedeva).

A questo punto la mia soluzione :

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="Connections/mia_connessione.asp" -->
<%
Dim Mio_Recordset
Dim Mio_Recordset_numRows

Set Mio_Recordset = Server.CreateObject("ADODB.Recordset")
Mio_Recordset.ActiveConnection = MM_mia_connessione_STRING
Mio_Recordset.Source = "SELECT * FROM mia_tabella_db"
Mio_Recordset.CursorType = 0
Mio_Recordset.CursorLocation = 2
Mio_Recordset.LockType = 1
Mio_Recordset.Open()

Mio_Recordset_numRows = 0
%>
<%
Dim Repeat1__numRows
Dim Repeat1__index

Repeat1__numRows = 10
Repeat1__index = 0
Mio_Recordset_numRows = Mio_Recordset_numRows + Repeat1__numRows
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento senza titolo</title>
</head>

<body>
<table>

<%
While ((Repeat1__numRows <> 0) AND (NOT Mio_Recordset.EOF)) ' Inizio ciclo di ripetizione generato da DW
%>
<tr>
<td>
<% If Not Mio_Recordset.EOF Then ' Controllo di non essere giunto alla fine dei record e non creo una cella inutile%>
<%=(Mio_Recordset.Fields.Item("mio_campo").Value)%>
<% 'Se non sono alla fine dei record passo al recor sucessivo
If Not Mio_Recordset.EOF Then
Repeat1__index=Repeat1__index+1
Repeat1__numRows=Repeat1__numRows-1
Mio_Recordset.MoveNext()
End If
%>
<% End If %>
</td>
<td>
<% If Not Mio_Recordset.EOF Then ' Controllo di non essere giunto alla fine dei record e non creo una cella inutile%>
<%=(Mio_Recordset.Fields.Item("mio_campo").Value)%>
<% 'Se non sono alla fine dei record passo al recor sucessivo
If Not Mio_Recordset.EOF Then
Repeat1__index=Repeat1__index+1
Repeat1__numRows=Repeat1__numRows-1
Mio_Recordset.MoveNext()
End If
%>
<% End If %>
</td>
</tr>
<% Wend ' Fine ciclo di ripetizione generato da DW%>
</table>
</body>
</html>
<%
Mio_Recordset.Close()
Set Mio_Recordset = Nothing
%>

Spero di essere stato utile a qualcun'altro.

Ciao !
 

Discussioni simili