Newsgroup: it.comp.www.asp
Titolo: query di inserimento

Problema:
Eseguo questa query di aggiornamento
  SQL = "INSERT INTO MAILING_LIST (" & tipo & ", INDIRIZZO_EMAIL, DATA) "
  SQL = SQL & "VALUES (True,'" & email & "',#" & now() & "#);"
  RsIM.Open SQL, Session("Conn")
poi vorrei sapere il valore del campo chiave primaria (contatore) che e'
stato dato a questo record, ma se interrogo il DB con una query di
selezione, non compare questo record appena inserito, invece se guardo il DB
con access il record e' stato inserito correttamente.
Mi piacerebbe sapere perche' accade questo e sopratutto come faccio a sapere
il valore della chiave di questo record.
grazie
giovanna

   SQL = SQL & "VALUES (True,'" & email & "',#" & now() & "#);"
<zot>
Prova cosě:
<%
SQL = "INSERT INTO MAILING_LIST (" & tipo & ", INDIRIZZO_EMAIL, DATA) "
SQL = SQL & "VALUES (True,'" & email & "',#" & now() & "#);"
'Prima crea la connessione
Dim Conn
set Conn=server.createobject("ADODB.Connection")
Conn.open Session("Conn")
'...poi lancia il comando. (perché creare un recordset?)
Conn.execute SQL
%>
A questo punto, il record č stato inserito.
Per sapere qual'č la chiave numerica del campo contatore, c'č da chiedersi:
perché utilizzare una chiave contatore? E' proprio necessaria? Non si puň
gestire meglio la tabella mantenendo come chiave unica il campo EMAIL? In
questo modo, otterresti l'indubbio vantaggio che nessun utente potrŕ
inserire due volte la stessa mail.
Comunque, puoi utilizzare un paio metodi se proprio ti serve quel campo
contatore.
1) Crei una stored procedure (se il database le supporta) che si occupa di
effettuare l'inserimento del record e ritornarti la chiave del record appena
inserito.
2) Aggiungi un furbissimo campo "Sessione" (trucco che uso quando mi mettono
fretta):
<%
SQL = "INSERT INTO MAILING_LIST (" & tipo & ", INDIRIZZO_EMAIL, DATA,
SESSIONE) "
SQL = SQL & "VALUES (True,'" & email & "',#" & now() & "#, '" &
Session.SessionID & "');"
Dim Conn
set Conn=server.createobject("ADODB.Connection")
Conn.open Session("Conn")
Conn.execute SQL
'Ora recuperiamo il record...
Dim Chiave
SQL = "SELECT * FROM MAILING_LIST WHERE SESSIONE = '" & Session.SessionID &
"'"
set rs=createobject("ADODB.Recordset")
Rs.Open SQL, Conn
Chiave = rs("ID")
Rs.Close
'... e magari cancelliamo l'ID di sessione!
SQL = "UPDATE MAILING_LIST SET SESSIONE = NULL WHERE SESSIONE = '" &
Session.SessionID & "'"
Conn.Execute SQL
%>
Romeo_


Subito dopo l'inserimento che, come ti ha consigliato Romeo è preferibile
fare con il "Connection":
Dim Conn
set Conn=server.createobject("ADODB.Connection")
Conn.open Session("Conn")
SQL = "INSERT INTO MAILING_LIST (" & tipo & ", INDIRIZZO_EMAIL, DATA) "
SQL = SQL & "VALUES (True,'" & email & "',#" & now() & "#);"
conn.execute(SQL)
Quindi, per prelevare l'ID (campo contatore) puoi fare:
SQL="Select top 1 ID from MAILING_LIST order by ID desc"
set rs=conn.execute(SQL)
id=rs(0)
oppure:
SQL="Select ID from MAILING_LIST where INDIRIZZO_EMAIL='"&email&"'"
set rs=conn.execute(SQL)
id=rs(0)
Ciao,
Zani A.

Grazie a tutti, ho risolto il mio problema usando
Dim Conn
set Conn=server.createobject("ADODB.Connection")
Conn.open Session("Conn")
SQL = "INSERT INTO MAILING_LIST (" & tipo & ", INDIRIZZO_EMAIL, DATA) "
SQL = SQL & "VALUES (True,'" & email & "',#" & now() & "#);"
conn.execute(SQL)
come mi avete suggerito
ciao
    giovanna