hi all,
muss grade den code eines verunfallten kollegen analysieren und bugs entfernen..
da gibts eine merkwürdige sache :
obwohl eine SQL-UPdate an prepared-statement übergeben wird,
wird der fehler 2601 (MS-SQL-Server 2008) 'duplicate entry at insert..' geworfen !
hä ?
hab extra mit dem NetBeans-Debugger den inhalt des prepared-stmt. gecheckt,
es steht wirklich ein SQL-UPdate drin und kein SQL-INSERT, wie man je leicht vermuten könnte !
hier mal der code :
hier das, was im Prepared Statement steht (lt. NetBeans) :
UPDATE eingang_i SET bereich = ?,be_eg_match = ?,qamatch = ?,webauftrag = ?, dessin = ?,partie = ?,espezvhd = ?,luser = ?,aendstat = ? WHERE eingnr = ? AND mandant_id = ? AND jahrgang = ?
"UPDATE eingang_i SET bereich = @P0,be_eg_match = @P1,qamatch = @P2,webauftrag = @P3, dessin = @P4,partie = @P5,espezvhd = @P6,luser = @P7,aendstat = @P8 WHERE eingnr = @P9 AND mandant_id = @P10 AND jahrgang = @P11
@P0 nvarchar(4000),@P1 nvarchar(4000),@P2 int,@P3 int,@P4 int,@P5 int,@P6 int,@P7 nvarchar(4000),@P8 int,@P9 int,@P10 int,@P11 int
hier die Originalmeldung :
qpdh ** store_eingang ErrorNummer : 2601 Mesg.: Cannot insert duplicate key row in object 'dbo.eingang_i' with unique index 'I_UNI_MDTuJGGuEINGNRuBER'. The duplicate key value is (23, P, 12, 2012).
Umgebung : Win7Home,Netbeans 7.1.2,java sdk 1.6.026, MS-SQL-Server 2008 via VPN
schon komisch, gelle ?
muss grade den code eines verunfallten kollegen analysieren und bugs entfernen..
da gibts eine merkwürdige sache :
obwohl eine SQL-UPdate an prepared-statement übergeben wird,
wird der fehler 2601 (MS-SQL-Server 2008) 'duplicate entry at insert..' geworfen !
hä ?
hab extra mit dem NetBeans-Debugger den inhalt des prepared-stmt. gecheckt,
es steht wirklich ein SQL-UPdate drin und kein SQL-INSERT, wie man je leicht vermuten könnte !
hier mal der code :
Code:
sql_text = "UPDATE " +db_ref.tabnames[db_ref.TABN_EINGANG] + " SET bereich = ?,be_eg_match = ?,qamatch = ?,webauftrag = ?,"+ " dessin = ?,partie = ?,espezvhd = ?,luser = ?,aendstat = ? "+ " WHERE eingnr = ? AND mandant_id = ? AND jahrgang = ? "; if(test_flag) System.out.println("QPruef_Datahandler ** store_eingang Sichern Eingang-Nr. : "+p_eingnr); } System.out.println("qpdh ** store_eingang sql : "+sql_text); try { eg_con.setAutoCommit(true); ps = eg_con.prepareStatement(sql_text); idx++; ps.setString(idx, bereich_kurz); //- 2,1 Bereich idx++; ps.setString(idx, bereich_kurz); //- 3,2 BE_EG_MATCH ??? idx++; ps.setInt(idx,i_qamatch); //- 4,3 QAMATCH idx++; ps.setInt(idx,Integer.parseInt(wem.tfWebauftrag.getText() ) ); //- 5,4 idx++; ps.setInt(idx,Integer.parseInt(wem.tfDessin.getText() ) ); //- 6,5 idx++; ps.setInt(idx,Integer.parseInt(wem.tfPartieMaschine.getText() ) ); //- 7,6 idx++; int ea_vhd = 0; if(espez_angelegt || (! appd_flag)) ea_vhd = 1; //-ESpezvhd. ja ps.setInt(idx,ea_vhd); //- 8,7 /* --Aenderg. Fr.Kowal. 07.11.2012 : Datum soll das alte bleiben ! idx++; System.out.println("qpdh store_eingang Feld lupdate idx : "+idx); ps.setString(idx,mu2.get_date_String("")); //- 9,8 lupdate * * */ idx++; ps.setString(idx,mps.g_bearbeiter); //- 10,9 luser idx++; ps.setInt(idx,1); //- 11, 10 Aendstat. idx++; //- bei Anfuegen Eintrag der neuen EingangsNr., sonst Filter auf EingangNr int egnr = 0; if(appd_flag) { if(test_flag) System.out.println("QPruef_Datahandler ** Eingaenge anfuegen EingNr : "+max_eingg_id+" idx : "+idx); egnr = max_eingg_id; } else { egnr = p_eingnr; } ps.setInt(idx,egnr); //- 12,11 eingnr idx++; if(test_flag) System.out.println("QPruef_Datahandler ** Eingaenge anfuegen mdt-id idx : "+idx); ps.setInt(idx, mps.g_mandant); //- 13,- mandant_id idx++; ps.setInt(idx, mps.akt_jahrgang); //- 14, - jahrgang boolean result = ps.execute(); eg_con.close(); //System.out.println("QPruef_Datahandler ** Eingaenge anfuegen / sichern : OK ! idx : "+idx+" result : "+result); mps.show_msg_dialog(tla.get_lang_text("MSG_EG_MNG_TITLE"),tla.get_lang_text("MSG_EG_APPD_OK")); mu2.logging(mps.logpath,"QPruef_DataHandler ** Eingang "+p_eingnr+" hinzugefügt !", mps.LOG_CONT, mps.akt_time_stamp); } catch ( SQLException sqle ) { String meldg = sqle.getMessage(); int msg_num = sqle.getErrorCode(); System.err.println("qpdh ** store_eingang ErrorNummer : "+msg_num+" Mesg.: "+meldg); if(msg_num == 2601) mps.show_msg_dialog(tla.get_lang_text("MSG_EG_DUPLIK_TITLE"),tla.get_lang_text("MSG_EG_DUPLIK_TEXT")); else mps.show_msg_dialog("QPruef_DataHandler","**** Eingaenge IDX : "+idx+" SQL-Error : " +sqle.getMessage()); }
UPDATE eingang_i SET bereich = ?,be_eg_match = ?,qamatch = ?,webauftrag = ?, dessin = ?,partie = ?,espezvhd = ?,luser = ?,aendstat = ? WHERE eingnr = ? AND mandant_id = ? AND jahrgang = ?
"UPDATE eingang_i SET bereich = @P0,be_eg_match = @P1,qamatch = @P2,webauftrag = @P3, dessin = @P4,partie = @P5,espezvhd = @P6,luser = @P7,aendstat = @P8 WHERE eingnr = @P9 AND mandant_id = @P10 AND jahrgang = @P11
@P0 nvarchar(4000),@P1 nvarchar(4000),@P2 int,@P3 int,@P4 int,@P5 int,@P6 int,@P7 nvarchar(4000),@P8 int,@P9 int,@P10 int,@P11 int
hier die Originalmeldung :
qpdh ** store_eingang ErrorNummer : 2601 Mesg.: Cannot insert duplicate key row in object 'dbo.eingang_i' with unique index 'I_UNI_MDTuJGGuEINGNRuBER'. The duplicate key value is (23, P, 12, 2012).
Umgebung : Win7Home,Netbeans 7.1.2,java sdk 1.6.026, MS-SQL-Server 2008 via VPN
schon komisch, gelle ?
Comment