10 messaggi dal 17 dicembre 2021
Buongiorno, ho un problema apparentemente semplice:
Ho creato un db access che funziona perfettamente con una tabella che ha una relazione uno a molti con un'altra per far si che l'inserimento dei dati avvenga du entrambe le tabelle automaticamente.
Il problema sta nel fatto che la tabella secondaria è collegata con un campo numerico all'id della prima tabella. In access con la realizzazione delle maschere non c'è nessun problema. (la realizzazione delle due tabelle è necessaria come anche la relazione).
il problema mio sta nell'effettuare l'inserimento da una pagina web che ha due campi. il primo campo inserisce il dato nella prima tabella, il secondo campo nella seconda relazionata con la prima. Mentre l'inserimento del primo dato nella prima tabella avviene, nella seconda non avviene e mi da errore in quanto l'integrità mi impedisce di inserire il dato nella seconda (ma solo su asp in access funziona perfettamente.
ecco il codice di inserimento che preleva il primo dato dal form (è uguale al secondo in quanto all'interno della pagina di inserimento ci sono due form che si collegano a due file asp ognuno per l'inserimento singolo dei dati nelle due tabelle.:


' Connessione al DB
myDB = "database/archivio.mdb"
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(myDB)

' Lavoriamo sul Recordset
Dim rs
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "dati", conn, 3, 3<------------------------------------------ il problema è quì, grazie a questa maschera riesco ad inserire i dati nella prima tabella ma se copio il codice identico cambiando i parametri per aggiungere un rs nella seconda mi da errore proprio per la relazione.
rs.addnew
rs("evento") = strentrata
rs("dipendente") = strcodiceingresso
rs.update
%>
DOMANDA:
E' possibile in ASP creare un form per l'inserimento di dati in una tabella relazionata con un'altra senza avere il questo problema?
in pratica "E' possibile la realizzazione di un form in asp che inserisca i dati in una tabella secondaria relazionata con un campo ID / numerico alla prima?" (in pratica quello che avviene con access.)
414 messaggi dal 13 novembre 2009
Ciao
Se usi inserimento in sequenza hai la Pk padre da usare nella tabella figlio. Se poi metti tutto in transazione fai il committente e o inserisci tutto o nulla.
10 messaggi dal 17 dicembre 2021
quindi?
mi puoi aiutare con il codice?
QUESTO INSERISCI NELLA PRIMA TABELLA IL VALORE ENTRATA NEL CAMPO CODICEINGRESSO
' Connessione al DB
myDB = "database/archivio.mdb"
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(myDB)

' Lavoriamo sul Recordset
Dim rs
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "dati", conn, 3, 3
rs.addnew
rs("evento") = strentrata
rs("dipendente") = strcodiceingresso
rs.update

' Chiusura del database
rs.Close
set rs = Nothing
conn.Close
set conn = Nothing

QUESTO DOVREBBE INSERIRE IL SECONDO CAMPO DELLA STOTOMASCHERA
' Connessione al DB
myDB = "database/archivio.mdb"
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(myDB)

' Lavoriamo sul Recordset
Dim rs
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "dati", conn, 3, 3 -----------> qui cosa devo mettere per collegare le due tabelle?
rs.addnew
rs("evento") = struscita
rs("dipendente") = strcodiceiuscita
rs.update

' Chiusura del database
rs.Close
set rs = Nothing
conn.Close
set conn = Nothing
414 messaggi dal 13 novembre 2009
In pratica la transazione la apri sulla connessione
Qui un esempio
https://docs.microsoft.com/it-it/sql/ado/reference/ado-api/begintrans-committrans-and-rollbacktrans-methods-example-vb?view=sql-server-ver15
10 messaggi dal 17 dicembre 2021
ok ci sono riuscito ma adesso ho un secondo problema con la funzione datediff: tralasciando la porzione di codice html ecco quanto segue:
<%
Dim sc, cn, rs
sc = "driver={Microsoft Access Driver (*.mdb)};dbq="
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open sc & Server.MapPath("../database/dipendenti.mdb")
Set rs = Server.CreateObject("ADODB.Recordset")
%>
<%
rs.Open "SELECT * FROM (DIPENDENTI INNER JOIN INGRESSI ON DIPENDENTI.ID = INGRESSI.[CODICEDIPINGRESSO]) INNER JOIN USCITE ON INGRESSI.[IDINGRESSO] = USCITE.CODICEDIPUSCITA WHERE codicedipendente = "&request.form("codice")&" ", cn, 1
If rs.EOF Then
%>
<p style="color: red">NESSUNA INFORMAZIONE TROVATA</p>
<%
Else
While rs.EOF = False
%>
<tr>
<td align="left"><%=rs("codicedipendente")%></td>
<td align="center">&nbsp;</td>
<td align="left"><%=rs("nome")%></td>
<td align="center">&nbsp;</td>
<td align="left"><%=rs("cognome")%></td>
<td align="center">&nbsp;</td>
<td align="left"><%=rs("dataingresso")%></td>
<td align="center">&nbsp;</td>
<td align="left"> <%=rs("oraingresso")%></td>
<td align="center">&nbsp;</td>
<td align="left"><%=rs("datauscita")%></td>
<td align="center">&nbsp;</td>
<td align="left"><%=rs("orauscita")%></td>
<td>
<%
Dim strorauscita
strorauscita = "orauscita"

Dim stroraingresso
stroraingresso = "oraingresso"

Dim Differenza
Differenza = DateDiff("h", orauscita, oraingresso)


Response.write Differenza
%>
</td>

devo prelevare dalla tabella che mi si è presentata il recordset ora uscita e sottrarlo al recordset ora ingresso usando la funzione datediff. La funzione funziona ma mi restituisce 0 in quanto i valori non sono inseriti. Cosa inserisco nella parte del date diff per far prelevare i due recordset?
414 messaggi dal 13 novembre 2009
Direi che anche in ragione delle performance userei la datediff dentro la command sql aggiungendo alla select la colonna calcolata. Fallo fare a tsql il calcolo così nel while inserisci direttamente il valore
10 messaggi dal 17 dicembre 2021
già fatto e funziona perfettamente.
Flavio ho inserito un'altra domanda se perfavore mi puoi rispondere anche lì dato che sei così disponibile? grazie
414 messaggi dal 13 novembre 2009
Quale esattamente
Posta il link

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.