Sto lavorando alla creazione di un catalogo online per un sito.

Il sito sarà in due lingue (italiano ed inglese) e presenterà prodotti di tre nazioni, divisi in categorie:

Nazione: Italia
Categorie di prodotto: a, b, c, d

Nazione: Francia
Categorie di prodotto: e

Nazione: Germania
Categorie di prodotto: f

Ho strutturato così il database in Access:
1. Tabella "nazioni", contiene 3 campi: IDNazione, ItNazione, EnNazione (dove ItNazione ed EnNazione sono i nomi delle nazioni in italiano ed in inglese).
Questa prima tabella contiene 3 record (per esempio): Italia, Francia, Germania

2. Tabella "categorie", contiene 4 campi: IDCategoria, IDNazione, ItCategoria, ENCategoria (dove IDNazione è preso dalla tabella "nazioni" e ItCategoria ed EnCategoria sono i nomi delle categorie in italiano ed in inglese).
Questa tabella ha 6 record: 4 record della prima nazione), 1 record della seconda nazione, 1 record della terza nazione.

3. Tabella "prodotti", contiene 6 campi: IDProdotto, IDCategoria, ItNome, EnNome, ItDescrizione, EnDescrizione (dove IDCategoria è preso dalla tabella "categorie", ItNome ed EnNome sono i nomi dei prodotti nelle due lingue e ItDescrizione ed EnDescrizione sono le descrizioni dei prodotti nelle due lingue).

In Access ho creato una relazione one-to-many fra il campo IDNazione della tabella "nazione" ed il campo IDNazione della tabella "categorie". Ho creato poi un'altra relazione dello stesso tipo fra il campo IDCategoria della tabella "categorie" ed il campo IDCategoria della tabella "prodotti".


Sto creando delle pagine ASP che mi servono, innanzitutto per popolare il database.
Vorrei fare in modo che l'utente, in fase di popolamento, si trovi di fronte, innanzitutto alla scelta della nazione: tramite una pagina "scegli_nazione.asp", dovrà, da un elenco a discesa, scegliere a quale nazione apparterrà il prodotto che sta aggiungendo al database.

Ho scritto questa pagina (scegli_nazione.asp ):
codice:
<html>
<head>
<title>Aggiungi prodotti</title>
<script type="text/JavaScript">
<!--

function goPage (newURL) {
   	if (newURL != "") {
   	if (newURL == "-" ) {
			resetMenu();			
		} else {  	
   			document.location.href = newURL;
   		}
   	}
}
//-->
</script>
</head>

<body>

<form method="post" action="">
<table width="600" border="1" align="center">
	<tr>
		<td>Scegli la nazione:</td>
		<td>
		<select onChange="goPage(this.options[this.selectedIndex].value)" name="nazione" id="nazione">
		<option value="#" selected="selected">-------------------</option>
		<%
		
		sqlString = "SELECT * FROM nazioni"
		Set rs = Conn.Execute(sqlString)

		do while not rs.eof
		nazione=rs("itNazione")
		valore=rs("idNazione")
		response.write("<option value=scegli_categorie.asp?nazione=" & valore &">" & nazione &"</option>") 
		rs.movenext
		loop %>
		</select>
		</td>
	</tr>
</table>
<input name="AggiungiProdotto" value="1" type="hidden">
</form>
</body>
</html>
La combobox (come evidenziato in rosso), viene popolata dai record della tabella "nazione".

Una volta scelta la nazione, il javascript permette il passaggio alla pagina successiva, che chiede la scelta di una categoria (scegli_categoria.asp ):
codice:
<html>
<head>
<title>Aggiungi prodotti</title>
<script type="text/JavaScript">
<!--

function goPage (newURL) {
   	if (newURL != "") {
   	if (newURL == "-" ) {
			resetMenu();			
		} else {  	
   			document.location.href = newURL;
   		}
   	}
}
//-->
</script>
</head>

<body>
<table width="600" cellpadding="0" cellspacing="0" border="1" align="center">
	<tr>
		<td colspan="2">
<%
scelta = Request.QueryString("nazione") 
Set RS = Server.CreateObject("ADODB.Recordset")
RS.ActiveConnection = Conn
RS.Open "SELECT itnazione FROM nazioni WHERE idNazione="& scelta &""
Response.Write("")

Do WHILE NOT RS.EOF
	Response.Write("Nazione: ")
	Response.Write RS("itnazione")
	Response.Write("
</td></tr><tr><td>")
RS.MoveNext
LOOP

RS.Close
Set RS = Nothing

%>
</td>
</tr>

	<tr>
		<td>Scegli la categoria:</td>
		<td>
		<form method="post" action="">
		<select onChange="goPage(this.options[this.selectedIndex].value)" name="categoria" id="categoria">
		<option value="#" selected="selected">-------------------</option>
		<%
		
		sqlString = "SELECT * FROM categorie WHERE idNazione="& scelta &""
		Set rs = Conn.Execute(sqlString)

		do while not rs.eof
		categoria=rs("itCategoria")
		valore=rs("idCategoria")
		response.write("<option value=aggiungi_prodotti.asp?nazione=" & scelta &"&categoria=" & valore &">" & categoria &"</option>")
		rs.movenext
		loop 
		%>
		</select>
		<input name="AggiungiProdotto" value="1" type="hidden">
</form>
		</td>
	</tr>
</table>

</body>
</html>
In questa pagina, con Request.QueryString("nazione") ho recuperato la scelta che l'utente ha fatto nella pagina scegli_nazione.asp

DOMANDA: E' corretto fare così?

Vado avanti...

Una volta scelta la categoria, si passa alla pagina "aggiungi_prodotti.asp" dove, a fronte di una scelta di una nazione e di una categoria, io vorrei che venisse aggiunto un record alla tabella prodotti, dove nel campo IDCategoria ci fosse la scelta fatta dall'utente nella pagina "scegli_categoria.asp".

Metto il codice di "aggiungi_prodotto.asp "

codice:
<html>
<head>
<title>Aggiungi prodotti</title>
</head>

<body>
<%
scelta = Request.QueryString("nazione")
Set RS = Server.CreateObject("ADODB.Recordset")
RS.ActiveConnection = Conn
RS.Open "SELECT itnazione FROM nazioni WHERE idNazione="& scelta &""
Response.Write("")

Do WHILE NOT RS.EOF
	Response.Write("Nazione: ")
	Response.Write RS("itnazione")
	Response.Write("
</td></tr><tr><td>")
RS.MoveNext
LOOP

RS.Close
Set RS = Nothing


%>


<%
scelta1 = Request.QueryString("categoria")
	Set RS = Server.CreateObject("ADODB.Recordset")
	RS.ActiveConnection = Conn
	RS.Open "SELECT itcategoria FROM categorie WHERE idCategoria="& scelta1 &""
	Response.Write("")
	
	Do WHILE NOT RS.EOF
		Response.Write("Categoria: ")
		Response.Write RS("itcategoria")
		Response.Write("
</td></tr><tr><td>")
	RS.MoveNext
	LOOP
	
%>
<form method="post" action="gestione_prodotti.asp">
  <table width="100%" border="1" align="center">
    <tr>
      <td colspan="4"><h2>AGGIUNGI PRODOTTI</h2></td>
    </tr>
        <tr>
      <td colspan="2"><h3>Italiano</h3></td>
      <td colspan="2"><h3>Inglese</h3></td>
    </tr>
    <tr>
      <td width="25%">Nome prodotto:</td>
      <td width="25%"><input name="itnome" size="50" maxlength="50"></td>
      <td width="25%">Nome prodotto:</td>
      <td width="25%"><input name="ennome" size="50" maxlength="50"></td>
    </tr>
    <tr>
      <td width="25%">Descrizione:</td>
      <td width="25%"><textarea name="itdescrizione" rows="4" cols="44"></textarea></td>
      <td width="25%">Descrizione:</td>
      <td width="25%"><textarea name="endescrizione" rows="4" cols="44"></textarea></td>
    </tr>
    <tr>
      <td colspan="4" align="center"><input name="submit" type="submit" value="Aggiungi prodotto">
<input name="AggiungiProdotto" value="1" type="hidden"></td>
    </tr>
  </table>
</form>
<%

RS.Close
Set RS = Nothing
	
%>
</body>
</html>
Una volta compilato il form, si passa alla pagina "gestione_prodotti.asp ".
codice:
<%

function CorreggiVirgolette (stringa)
	CorreggiVirgolette = Replace (stringa, "'", "''")
End function

AggiungiProdotto = TRIM (Request("AggiungiProdotto"))

itnome = TRIM (Request("itnome"))
ennome = TRIM (Request("ennome"))
itdescrizione = TRIM (Request("itdescrizione"))
endescrizione = TRIM (Request("endescrizione"))

	

%>
<html>
<head>
<title>Gestione prodotti</title>
</head>

<body>
<%

sqlString = "UPDATE prodotti SET " &_
	"itnome=' " & CorreggiVirgolette(itnome) & "'," &_
	"ennome=' " & CorreggiVirgolette(ennome) & "'," &_
	"itdescrizione=' " & CorreggiVirgolette(itdescrizione) & "'," &_
	"endescrizione=' " & CorreggiVirgolette(endescrizione) & "',"

Conn.Execute sqlString	
	
%>
<table width="600" cellpadding="4" cellspacing="0" align="center">
	<tr>
		<td>
		<%=itnome%> è stato aggiunto nel database.
		</td>
	</tr>	
</table>

<%
%>

<table width="600" border="1" cellpadding="4" cellspacing="0" align="center">
	<tr>
		<td colspan="2">
		<h2>GESTIONE PRODOTTI</h2>
		</td>
	</tr>
	<tr>
		<td>
		<table border="1" width="400" cellpadding="3" cellspacing="0">
		<%
		sqlString = "SELECT idprodotto, itnome FROM prodotti " &_
		"ORDER BY itnome"
		SET RS = Conn.Execute(sqlString)
		WHILE NOT RS.EOF
		%>
			<tr>
				<td><%=RS("itnome")%></td>
			</tr>
		<%
		RS.MoveNext
		WEND
		%>
		</table>	
		</td>
	</tr>	
</table>
<%
Conn.Close
Response.buffer=True
%>
</body>
</html>
E a questo punto mi sono perso...
All'inizio, dopo l'invio del modulo della pagina "aggiungi_prodotto.asp", mi appariva la pagina "gestione_prodotti.asp" e apparentemente sembrava essere stato aggiunto il nuovo record, invece il database non conteneva i nuovi dati.
Una successiva modifica, mi aveva portato ad aggiornare il database... solo che i dati che inserivo nel form di "aggiungi_prodotto.asp", apparivano in tutti i record del database (non veniva solo aggiunto un record, ma tutti quelli già esistenti, venivano modificati con i nuovi dati).
L'ultima modifica (che è quella che ho riportato) mi dà questo errore: Syntax error in UPDATE statement e fa riferimento alla riga in rosso del file "gestione_prodotti.asp":
codice:
sqlString = "UPDATE prodotti SET " &_
	"itnome=' " & CorreggiVirgolette(itnome) & "'," &_
	"ennome=' " & CorreggiVirgolette(ennome) & "'," &_
	"itdescrizione=' " & CorreggiVirgolette(itdescrizione) & "'," &_
	"endescrizione=' " & CorreggiVirgolette(endescrizione) & "',"

Conn.Execute sqlString
Qualche suggerimento?

Grazie!