Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 1.0/1.1
Chiave primaria dupilcata non ne esco
giovedì 17 marzo 2005 - 11.56
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
lobax
Profilo
| Junior Member
93
messaggi | Data Invio:
gio 17 mar 2005 - 11:56
salve,
ho un grosso problema con la fase di conferma di un ordine(nel mio caso conferma appuntamento) ho una transazione che va a buon fine solo a db vuoto, inseriche solo 1 record se tento sucessivamente mi restituisce:
report errore:(da pagina):
[OleDbException (0x80004005): L'apporto modifiche non è riuscito perché si è cercato di duplicare i valori nell'indice, nella chiave primaria o nella relazione. Modificare i dati nel campo o nei campi che contengono dati duplicati, rimuovere l'indice o ridefinire l'indice per consentire l'inserimento di voci duplicate, quindi ritentare l'operazione.]
System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr) +41
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +174
System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +92
System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +65
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) +112
System.Data.OleDb.OleDbCommand.ExecuteNonQuery() +66
BSite.BSite.ConfermaAppuntamento.AddConfAppuntamento(Int32 Uid, String Gaid) in C:\Inetpub\bSite\componenti\ConfDataLogic.vb:69
bSite.chekApp.Page_Load(Object sender, EventArgs e) in C:\Inetpub\bSite\Customers\ChekApp.aspx.vb:36
System.Web.UI.Control.OnLoad(EventArgs e) +67
System.Web.UI.Control.LoadRecursive() +35
System.Web.UI.Page.ProcessRequestMain() +750
qui riporto la query incriminata:(su access di prova stesso problema cmq da pagina sulla trans)
PARAMETERS GAID Text ( 255 );
INSERT INTO Appuntamenti_Dettaglio ( APID, Ids, datapp, ora )
SELECT Appuntamenti_Confermati.APID, Servizi.IDS, Appuntamento.Ora, Appuntamento.DataApp
FROM Appuntamenti_Confermati, Servizi INNER JOIN Appuntamento ON Servizi.IDS = Appuntamento.IDS
WHERE (((Appuntamento.Gaid)=[gaid]));
da pagina faccio una transazione:
1 inserisco da appuntamento a apuntamenti_confermati
2 copio da appuntamenti_confermati a appuntamenti_dettaglio
3 cancello il record dalla tab appuntamento.
chiavi:
Servizi.IDS(incremento)
Appuntamenti_Confermati.APID(incremento)
Appuntamenti_Dettaglio APID e IDS (numerici duplicati ammessi) relazione molti a molti
Scusate la lunghezza spero che riusciate a capire x un aiuto.
grazie ciao
lobax
Profilo
| Junior Member
93
messaggi | Data Invio:
ven 18 mar 2005 - 01:42
si lo so ma, il campo che fa capo alla tabella conferma(come fosse ordini) ha un id contatore quindi non è possibilile sia duplicato, la tabella di dettaglio dovrebbe accettare anche record duplicati(classico caso di più prodotti nello stesso ordine)
appunto per questo non capisco quale possa essere il dato duplicato:
Public Class ConfermaAppuntamento
Public Function AddConfAppuntamento(ByVal Uid As Integer, ByVal Gaid As String)
Dim BSconn As OleDbConnection ......[cut]
Dim TranString1 As String
Dim TranString2 As String
Dim TranString3 As String
TranString1 = "INSERT INTO Appuntamenti_Confermati (Uid, data_conf )VALUES (@uid, now()) "
Dim cmd1 As New OleDbCommand(TranString1, BSconn)
' e questa è ok
Dim parameterCustomerID As OleDbParameter = New OleDbParameter("@UID", OleDbType.Integer, 4)
parameterCustomerID.Value = CInt(Uid)
cmd1.Parameters.Add(parameterCustomerID)
TranString2 = " INSERT INTO Appuntamenti_Dettaglio ( APID, Ids, ora, datapp )" & _
" SELECT [Appuntamenti_Confermati].[Apid], [Servizi].[IDS], [Appuntamento].[ora], [Appuntamento].[DataApp]" & _
" FROM Appuntamenti_Confermati, Servizi INNER JOIN Appuntamento ON [Servizi].[IDS]=[Appuntamento].[IDS]" & _
" WHERE ((([Appuntamento].[Gaid])=[gaid])) "
Dim cmd2 As New OleDbCommand(TranString2, BSconn)
' come dicevi tu infatti questa canna
Dim parameterGuID As OleDbParameter = New OleDbParameter("@gaid", OleDbType.VarWChar, 100)
parameterGuID.Value = Gaid
cmd2.Parameters.Add(parameterGuID)
'c'e delete...ecc ...roba che non centra.
TranString3 = "DElETE FROM Appuntamento WHERE Gaid = @gaid"
'......poi commit ..
queste le relazioni tra record tabella e dettagilo_record tabella:
Relazioni:
Appuntamenti_ConfermatiAppuntamenti_Dettaglio
Appuntamenti_Confer
Appuntamenti_Dettag
APID 1 n APID
Attributes: Imposto
RelationshipType: Uno-a-molti
------------------------------------------------------------------------------
ServiziAppuntamenti_Dettaglio
Servizi
Appuntamenti_Dettag
IDS 1 n Ids
Attributes: Imposto
RelationshipType: Uno-a-molti
-------------------------------------------------------------------------------
ServiziAppuntamento
Servizi
Appuntamento
IDS 1 n IDS
Attributes: Imposto,
Aggiornamenti in cascata
RelationshipType: Uno-a-molti
--------------------------------------------------------------------------------
UsersAppuntamenti_Confermati
Users
Appuntamenti_Confer
Uid 1 n uid
Attributes: Imposto
RelationshipType: Uno-a-molti
insomma il classico ordini > dettaglio_ordini, ordine chiave contatore, e dettaglio_ordini doppia chiave quella del prodotto e quella dell'ordine, l'id provvisorio dell'appuntamento(carrello) è un guid di sistema che viene sostituito con l'id utente al login, sul tipo di ibuyspy .
bel casino da spiegare...centra qualche cosa che uso un guid?..non so che altre spiegazioni dare.
sono nella.........m
ciao grz
lobax
Profilo
| Junior Member
93
messaggi | Data Invio:
dom 20 mar 2005 - 20:50
Il problema sta in questa query:
(test da access)
PARAMETERS GAID Text ( 255 );
INSERT INTO Appuntamenti_Dettaglio ( APID, Ids, ora , DataApp)
SELECT Appuntamenti_Confermati.APID, Servizi.IDS, Appuntamento.Ora,
Appuntamento.DataApp
FROM Appuntamenti_Confermati, Servizi INNER JOIN Appuntamento ON
Servizi.IDS = Appuntamento.IDS
WHERE (((Appuntamento.Gaid)=[gaid]));
facendo delle prove e togliendo gli indici e chiavi mi accorgo dell'errore, la s.query di cui sopra mi
inserisce anche tutti i record presenti nella tabella
conferma che rispettano la condizione, quindi anche quelli già presenti moltiplicandoli esponenzialmente.
....daiiii...
ciao grz
lob
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !