sps84 (Normal User)
Expert
Messaggi: 202
Iscritto: 11/02/2009
|
Sto cercando di realizzare un piccolo catalogo, il problema è questo devo inserire un record se nuovo o aggiornarlo se vecchio in un db Access in giro ho trovato tanti suggerimenti tipo questo
http://blogs.msdn.com/miah/archive/2008/02/17/sql-if-exist ...
ma non capisco dove sbaglio
AccessCommand.CommandText = "IF (EXIST(SELECT * FROM DettOrdini WHERE IDArticolo = @Codice)) " & _
"UPDATE DettOrdini SET IDArticolo = @Codice, Quantità = @LblQuantità WHERE @Codice = IDArticolo" & _
"ELSE" & _
"INSERT INTO DettOrdini (IDArticolo, Quantità) VALUES(@Codice, @LblQuantità);"
|
|
BugliL (Member)
Pro
Messaggi: 135
Iscritto: 09/08/2009
|
Postato originariamente da sps84:
AccessCommand.CommandText = "IF (EXIST(SELECT * FROM DettOrdini WHERE IDArticolo = @Codice)) " & _
"UPDATE DettOrdini SET IDArticolo = @Codice, Quantità = @LblQuantità WHERE @Codice = IDArticolo" & _
"ELSE" & _
"INSERT INTO DettOrdini (IDArticolo, Quantità) VALUES(@Codice, @LblQuantità);" |
Secondo me sbagli a concatenare le stringhe...
Capita spesso anche a me di tralasciare gli spazi quando scrivo le query su più righe...
Per farti un esempio:
IDArticolo" & _ "ELSE" & _ "INSERT <- Qui manca lo spazio intorno ad ELSE
Dimmi se poi hai risolto |
|
sps84 (Normal User)
Expert
Messaggi: 202
Iscritto: 11/02/2009
|
scuami ma è sbagliato com'è scritto o per il fatto che va a capo di qua e di la... se è per l'ultima non ci stava quando l'ho postato..
|
|
BugliL (Member)
Pro
Messaggi: 135
Iscritto: 09/08/2009
|
Se il codice é che scritto come lo hai postato (visualizzazzione a parte) quando viene concatenata la stringa diventa:
Codice sorgente - presumibilmente C# / VB.NET |
"UPDATE DettOrdini SET IDArticolo = @Codice, Quantità = @LblQuantità WHERE @Codice = IDArticoloELSEINSERT INTO DettOrdini (IDArticolo, Quantità) VALUES(@Codice, @LblQuantità);"
|
Come vedi "IDArticoloELSEINSERT" non può essere interpretato perchè è una stringa sbagliata...
EDIT: Per il codice, quando vuoi indentarlo precedilo con dei puntini , lo visualizzi bene in quel modo...
Ultima modifica effettuata da BugliL il 30/08/2009 alle 18:35 |
|
sps84 (Normal User)
Expert
Messaggi: 202
Iscritto: 11/02/2009
|
Ultima modifica effettuata da sps84 il 31/08/2009 alle 19:30 |
|
sps84 (Normal User)
Expert
Messaggi: 202
Iscritto: 11/02/2009
|
non esiste un metodo diverso?
|
|
BugliL (Member)
Pro
Messaggi: 135
Iscritto: 09/08/2009
|
Postato originariamente da sps84:
non esiste un metodo diverso? |
Ovviamente sì
Codice sorgente - presumibilmente Delphi |
....Dim Rs as ADODB.Recordset ....Dim Rs2 as ADODB.Recordset ....Dim Conn as ADODB.Connection ....Conn.Open(strConn) ' <- La stringa per il DB di access la cerchi su google.... ....RS.Open("SELECT * FROM DettOrdini WHERE IDArticolo=" & Codice,Conn) ....If not RS.EOF then ........Q = "UPDATE DettOrdini SET IDArticolo = @Codice, Quantità = @LblQuantità WHERE IDArticolo = " & Codice ....else ........Q = "INSERT INTO DettOrdini (IDArticolo, Quantità) VALUES(" & Codice & ", " & LblQuantità & ")" ....end if ....Conn.Execute(Q) ....Rs.Close ....Conn.Close
|
Codice e LblQuantità sono 2 varibili che imposti Tu ovviamente...
Se non usi la libreria ADO cerca di scrivere il codice in modo da fare la stessa cosa...
In pratica... il codice cerca di aprire il record della tabella Ordini che hanno il codice uguale a CODICE
Se il record esiste viene selezionata la query di aggiornamento
Se il record non esiste viene selezionata la query di inserimento. |
|
sps84 (Normal User)
Expert
Messaggi: 202
Iscritto: 11/02/2009
|
adesso provo subito!
|
|
BugliL (Member)
Pro
Messaggi: 135
Iscritto: 09/08/2009
|
Postato originariamente da sps84:
adesso provo subito! |
Dimmi se poi è andata |
|