17 messaggi dal 27 giugno 2005
Buongiorno a tutti,
sto creando la prima applicazione asp ed essendo alle prime esperienze, ecco un problema che non riesco a risolvere:
in base al valore in campo ho necessità di creare ed aggiungere n righe in una tabella contenente 3 campi. A seguire inserisco n righe in database Access.
Questo lo eseguo con questo codice
<%
If gg > 0 then
For i = 1 to gg
GIORNATA = i & "a Giornata"

%>
<tr>
<td width="7%">&nbsp;</td>
<td width="16%" class="tabborinf"><span class="Stile0Plus">
<input name="GIORNATA" type="text" value="<%=GIORNATA%>" size="15">
</span></td>
<td width="27%" class="tabborinf"><span class="Stile">&nbsp;Data
<input name="DATA_GIORNATA" type="text" size="12">
</span></td>
<td width="16%" class="tabborinf">
</span><span class="Stile0Plus">N° Relatori</span><br> </td>
<td width="34%" class="tabborinf"><input name="N_RELATORE_GIORNATE" type="text" class="Stile" value="1" size="4">
<span class="Stile Stile4">&nbsp;&nbsp;per questa giornata </span></td>
</tr>
<%
strSQLGG = "INSERT INTO GIORNATE (ID_CORSO,N_GIORNATE,GIORNATA,DATA_GIORNATA )"
strSQLGG = strSQLGG&"VALUES('"&cod&"','"&N_GIORNATE&"','"&GIORNATA&"','"&DATA_GIORNATA&"')"
my_Conn.Execute (strSQLGG)
next
%>
<%
End if
%>
Nella pagina successiva visualizzo la tabella con n righe quante il valore in gg.
VAdo a compilare i dati nei due campi DATA_GIORNATA e N_RELATORI_GIORNATA.

A questo punto nasce il problema. Inserire i nuovi valori nel db.
Ho provato diversi metodi, tutto funziona se in gg è presente il valore 1, quindi se aggiorno solo una riga nel db. Se invece è presente un valore maggiore di 1 non esegue l'UPDATE in quanto il valore presente nel campo DATA_GIORNATA non è composto da un unico valore (es 28/10/2005), ma da tutti i valori presenti nel campo stesso creato nel ciclo FOR (es: 28/10/2005, 29/10/2005, 30/10/2005 se in gg è presente il valore 3)con conseguente errore nell'aggiornamento dei record.
Il codice di aggiornamento dei record ho usato ultimamente:
'Giornate
strSqlgg = "SELECT * FROM GIORNATE WHERE ID_CORSO =" & cod
set Rsgg = my_conn.Execute (strSqlgg)

For i = 1 to gg
if Rsgg("DATA_GIORNATA") = "" then
strSQLGG = "UPDATE GIORNATE SET DATA_GIORNATA='"&DATA_GIORNATA&"',N_RELATORE_GIORNATE="&N_RELATORE_GIORNATE&" WHERE ID_CORSO ="&cod
my_Conn.Execute (strSQLGG)
end if
next

Spero di essere stato chiaro nell'esposizione del mio problema.
E nel caso ci sia qualcuno che mi può aiutare, Grazie fin da ora.
Gianluca
281 messaggi dal 05 agosto 2004
Non ho capito bene, anche se sei stato molto dettagliato. Correggimi se sbaglio:
- l'utente ha una pagina con un campo in cui deve specificare un numero
- nella pagina successiva si presentano n righe, con tre campi ciascuno, a seconda di quanto specificato dall'utente nel punto precedente. Già in questo passaggio inserisci dei valori nel db (ma che valori? da dove li prendi?)
- nella stessa pagina, l'utente compila i campi mancanti ed esegue la form.

E' corretto?

Che lo sforzo sia con te!!!
17 messaggi dal 27 giugno 2005
theterz ha scritto:
Non ho capito bene, anche se sei stato molto dettagliato. Correggimi se sbaglio:
- l'utente ha una pagina con un campo in cui deve specificare un numero
- nella pagina successiva si presentano n righe, con tre campi ciascuno, a seconda di quanto specificato dall'utente nel punto precedente. Già in questo passaggio inserisci dei valori nel db (ma che valori? da dove li prendi?)
- nella stessa pagina, l'utente compila i campi mancanti ed esegue la form.

E' corretto?


Già in questo passaggio inserisci dei valori nel db (ma che valori?
> i valori che inserisco nel db sono valori creati a "run-time" per il primo campo dei tre presenti nelle rispettive righe, ossia il valore GIORNATA nel codice. L'altro valore è un codice che serve da join con altre tabelle.

Nello specifico sto creando un'applicazione per la gestione di corsi per un'azienda. Il valore univoco è il codice corso.

Ma il problema è che non riesco ad inserrie il ciclo delle righe nel DB.
Riporto un esempio ancor più reale:
L'utente inserisce il valore 4 nel campo N° Giornate
Nel passaggio alla pagina successiva inserisco questo dato ed il codice corso nella tabella GIORNATE. Nella visualizzazione della pagina si creano 4 righe che contengono tre campi ciascuno quali
GIORNATA con il valore 1a Giornata per la prima riga, 2a Giornata per la seconda riga e via discorrendo per le altre righe,
DATA_GIORNATA, campo vuoto che l'utente deve compilare come per il terzo campo N_RELATORE_GIORNATA.
Compilati i campi si dovrebbe passare alla visualizzazione della pagina successiva con l'inserimento dei campi compilati dall'utente presenti nelle righe create.
E' qui che mi nasce il problema dovuto penso al nome del campo che è uguale per tutte le righe, ma il valore è diverso. Infatti eseguendo un response.write sul campo DATA_GIORNATA, si visualizza un unico valore composto da 4 date (Es 27/10/2005, 28/10/2005,29/10/2005, 30/10/2005). Invece sono 4 campi in quattro righe diverse.
Se invece di inserire il valore 1 nel primo campo N° Giornate, tutto va a buon fine.
Quindi mi chiedevo come poter ricreare un ciclo per inserire i dati nel DB.

Ciao
Gianluca
Modificato da Gianluca Pierfrancesco il 28 giugno 2005 03.25 -
281 messaggi dal 05 agosto 2004
Ok, questa volta ho capito tutto (sai, ieri era lunedì e non mi ero ancora represo dal week-end  )
Tornando a noi: basta che chiami i campi nella form con "DATA_GIORNATA_i" e "N_RELATORE_GIORNATE_i".

Nella pagina in cui effettui l'inserimento dei campi nel db, crei un ciclo
For i = 1 to gg
strSQLGG = "UPDATE GIORNATE SET DATA_GIORNATA='" & DATA_GIORNATA_i &"', N_RELATORE_GIORNATE=" & N_RELATORE_GIORNATE_i & " WHERE ID_CORSO =" & cod
my_Conn.Execute (strSQLGG)
next

Che lo sforzo sia con te!!!
17 messaggi dal 27 giugno 2005
Concettualmente sembra tornare, ma in realtà continua ad esserci l'errore
Tipo di errore:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Driver ODBC Microsoft Access] Errore di sintassi nell'istruzione UPDATE.
/gestione corsi/multincontro.asp, line 237

tutto come prima!!

Ho provato anche ad inserire il request.form("NOMECAMPO_i") nel ciclo, ma non mi funziona.

Comunque ecco il codice
CREAZIONE RIGHE
<%
Do While not rsGG.eof
%>
<table width="523" border="0">
<tr>
<td width="100" class="Stile6"><input name="GIORNATA_i" type="text" class="Stile" value="<%=rsgg("GIORNATA")%>"></td>
<td width="54" valign="top" class="Stile0Plus">Data</td>
<td width="84" class="Stile6"><input name="DATA_GIORNATA_i" type="text" class="Stile" size="12"></td>
<td width="92" valign="top" class="Stile0Plus">N&deg; Relatori</td>
<td width="69" class="Stile6"><input name="N_RELATORE_GIORNATE_i" type="text" class="Stile0" size="4">
</td>
</tr>
</table>
<%
rsGG.movenext
loop

INSERIMENTO IN DB
'Estrazione record da GIORNATE
strSql = "SELECT * FROM GIORNATE WHERE ID_CORSO ="&cod
set rsGG = my_Conn.Execute (strSql)

cod_id = rsGG("ID_CORSO")

'Inserisce dati in Giornate
For i = 1 to gg
'idcod = rsGG("ID_GIORNATE")

GIORNATA_i=Request.Form("GIORNATA_i")
DATA_GIORNATA_i=Request.Form("DATA_GIORNATA_i")
N_RELATORE_GIORNATE_i=Request.Form("N_RELATORE_GIORNATE_i")
strSQLGG = "UPDATE GIORNATE SET DATA_GIORNATA='" & DATA_GIORNATA_i &"', N_RELATORE_GIORNATE=" & N_RELATORE_GIORNATE_i & " WHERE ID_CORSO =" & cod '& " AND ID_GIORNATE = " & idcod
my_Conn.Execute (strSQLGG)
next

281 messaggi dal 05 agosto 2004
Così il nome dei campi nella form rimangono sempre uguali.

Devi renderli dinamici:

CREAZIONE RIGHE
<td width="84" class="Stile6"><input name="DATA_GIORNATA_<%=i%>" type="text" class="Stile" size="12"></td>

INSERIMENTO NEL DB
DATA_GIORNATA=Request.Form("DATA_GIORNATA_" & i)


Fai questa modifica ovviamente per tutti i campi. Se guardi il codice HTML dal browser i campi della form dovranno chiamarsi "GIORNATA_1", "GIORNATA_2", ecc... idem per gli altri "DATA_GIORNATA_1", "DATA_GIORNATA_2", ecc...

Che lo sforzo sia con te!!!
17 messaggi dal 27 giugno 2005
Ok funziona, Grazie per il contributo

Gianluca

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.