Newsgroup: it.comp.www.asp
Titolo: controllo insert

Ciao a tutti,
vorrei controllare se un record esiste gia' (o se esiste gia' la chiave)
prima di inserirlo nel DB. Come fare? Devo controllare in qulche modo
l'oggetto recordset (objRS)?
L'inserimento lo effettuo in questo modo:
'imposto i parametri e apro una connessione al DB
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "DRIVER={SQL
SERVER};DSN='';SERVER=JASPER;DATABASE=prova;"
objConn.Open
'inizializzo l'oggetto recordset
Dim objRS
Set objRS = Server.CreateObject("ADODB.Recordset")
'creo la query
strSQL = "INSERT INTO persone (nome, cognome, telefono) VALUES ('Gino',
'Pilotino', '3334445556')"
objRS.Open strSQL, objConn
saluti,
*M

Sql server: potrebbe funzionare un qualcosa del tipo
if not exists(select id from persone where nome=.....and cognome=....and
telefono=.....) insert into......
(mai provato exists con insert into ma dovrebbe funzionare, non so se perт и
la sintassi corretta; qualche dubbio sul not ma dovrebbe funzionare; nel
caso non funzionasse esiste anche l'else)
Se devi restituire l'id aggiungi l'else:  .....inserto into.....ELSE select
id from .....where nome=.... etc

>vorrei controllare se un record esiste gia' (o se esiste gia' la chiave)
Molto semplicemente, sul codice che hai scritto te:
'imposto i parametri e apro una connessione al DB
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "DRIVER={SQL
SERVER};DSN='';SERVER=JASPER;DATABASE=prova;"
objConn.Open
'inizializzo l'oggetto recordset
Dim objRS
Set objRS = Server.CreateObject("ADODB.Recordset")
'creo la query
objRS.Open "SELECT * FROM persone WHERE Nome = 'Gino' AND Cognome =
'Pilotino' AND Telefono='3334445556'", objConn
If rs.EOF Then
  objRS.AddNew
  objRS("Nome") = "Gino"
  objRS("Cognome") = "Pilotino"
  objRS("Telefono") = "3334445556"
  objRS.Update
End If
objRS.Close
Internet marketing?
MG Marketing Newsletter
http://www.mercatoglobale.com/web/newslett.asp

 id from .....where nome=.... etc
ho risolto cosi'... so che non e' il metodo migliore (performante,
elegante,...), ma si impara strada facendo. Se qualcuno avesse soluzioni
migliori, anche di poco, le posti. Grazie.
*M
<%
'imposto i parametri e apro una connessione al DB
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "DRIVER={SQL
SERVER};DSN='';SERVER=JASPER;DATABASE=prova;"
objConn.Open
'inizializzo l'oggetto recordset
Dim objRS
Set objRS = Server.CreateObject("ADODB.Recordset")
'controllo che non sia gia' presente
strSQL = "SELECT count(*) AS id FROM persone WHERE nome='" &
Request.QueryString("nome") & "' AND cognome='"
&Request.QueryString("cognome") &"'"
objRS.Open strSQL, objConn
if objRS("id") = 0 then
objRS.close
'creo la query
strSQL = "INSERT INTO persone (nome, cognome, telefono, descrizione) VALUES
('" & Request.QueryString("nome") & "', '" &Request.QueryString("cognome")
&"','" &Request.QueryString("tel")& "','" &Request.QueryString("desc") &"')"
objRS.Open strSQL, objConn
response.write ("errore=")
else
objRS.close
response.write ("errore=Il record è già presente nel DB")
end if
%>
P.S: i response fatti cosi' mi servono per interfacciarmi con flash 5.

La mia soluzione con una sola transazione non andava bene? Più performante
non mi viene proprio in mente (stored procedure?)

sarebbe andata benissimo, solo che lo statement condizionale dovevo averlo
in asp, non in T-SQL, perche' in caso record gia' esistente devo mandare un
messaggio di errore ad un flash movie, e da TSQL la vedo dura.
Grazie cmq,
*M