Autor Zpráva
lukee
Profil *
Zdravim vsechny, v nasi firme jede IS na bazi WWW (VbScript + MSSQL 2005), v jedne funkci tohoto IS mam nekolik poli s ukladacim tlacitkem. Uzivatele do nej vkladaji data a nasledne se to uklada do databaze. Problem ale je, ze kdyz si tu tabulku do ktere se vse uklada zobrazim, vidim nekdy, ze zaznamy (se stejnym casem na sekundu presne) tam jsou nekdy dvakrat, nekdy trikrat i vickrat. Bohuzel nemuzu zablokovat duplicitni zaznamy, jelikoz uzivatel muze vlozit stejna data napr. 2x denne, ale vysvetlil by mi nekdo, proc jsou vlozeny v tabulce uplne stejne zaznamy, se stejnym casem ulozeni , treba i 4x ? Taktez odpada moznost, ze by uzivatel napsal tyto zaznamy ihned po sobe, aby mely stejny cas - proste se to neda stihnout. Predem diky za pomoc.
roberta
Profil
lukee
buď je zle napísaný VBScript, alebo je zle napísané SQL... bez zdrojových kódov ťažko radiť...
Joker
Profil
lukee
Možností je víc... například že v danou chvíli má systém pomalou odezvu, uživatel si myslí, že se nic nestalo a klikne na odesílací tlačítko znova.
Anebo některý uživatel je z Windows navyklý dvojklikat na ikonky a odesílá formuláře dvojklikem na odesílací tlačítko.
Nebo za to může obnovení stránky.
Případně se za určitých podmínek formulář odešle několikrát
Může jít i o chybu v aplikaci, kdy za nějakých podmínek uloží data vícekrát

Bohuzel nemuzu zablokovat duplicitni zaznamy, jelikoz uzivatel muze vlozit stejna data napr. 2x denne
Ale pak ty záznamy přeci budou mít různý čas a tedy nebudou duplicitní.
Osobně bych "podezíral" záznamy od stejného uživatele se stejnými daty a v nějakém krátkém časovém rozmezí. Konkrétní interval už záleží na aplikaci, může to být klidně 5 sekund nebo 5 minut.
lukee
Profil *
OK omlouvam se, takze vbs ukladani do db:


Sub CmdSave_onclick
dim Def, radek, kontrolor
dim nick

nick = trim(txtTech.value)


radek = trim(txtOp.value)
kontrolor = trim(txtTech.value)

if trim(txtsn.value)="" and chk_noSN.checked=false then
msgbox "Please input SN. If this part has no SN, please check the red box above. / Prosim o vyplneni SN. Pokud tento dil nema SN, zaskrtnete zluty ctverecek umisteny nahore."
exit sub
end if

if trim(CMBFaultDesc.value)="" then
msgbox "Please input fault description."
exit sub
end if

if trim(CMBDesc.value) = "HDD" and trim(txtFacM.value) = "" then
msgbox "You have to fill Factory Model, because you choose HDD as part description! / Vyplnte prosim pole Factory Model, protoze jste zvolili jako popis HDD!"
exit sub
end if

if trim(CMBVendor.value) = "" then
msgbox "Please put into Vendor correct record, or input NA for unknown. / Vyplnte prosim pole Vendor!"
exit sub
end if

if trim(cmbLine.value) = "" then
msgbox "Please put into Line Rejected correct record, or input NA for unknown. / Vyplnte prosim pole Line Rejected"
exit sub
end if

if trim(cmbShift.value) = "" then
msgbox "Please put into Shift Rejected correct record, or input NA for unknown. / Vyplnte prosim pole Shift Rejected"
exit sub
end if

if trim(cmbArea.value) = "" then
msgbox "Please put into Area Rejected correct record, or input NA for unknown. / Vyplnte prosim pole Area Rejected."
exit sub
end if

if isnumeric(radek) = true then 'checking if operator inserted name, not personal number
msgbox "Please put your correct name, do not put your personal number! / Vlozte prosim do pole DMR Operator JMENO, nikoliv sve osoni cislo!"
exit sub
end if

if isnumeric(kontrolor) = true then ' checking if rework id has numeric or not
msgbox "Please put into Rework Tech ID only name of Reworker, not number! / Vloze prosim do pole Rework Tech ID pouze jmeno, nevkladejte cisla!"
exit sub
end if


if trim(txtOp.value) = "" then
msgox "Please fill field DMR Operator! / Vyplnte prosim pole DMR Operator." 'dmr op field must be filled
exit sub
end if

if left(nick, 1) = "y" then
msgbox "Please input into Rework Tech ID. only name, not personal numbers! / Prosim vlozte do Rework Tech ID pouze jmeno, nevkladejte osobni cisla!"
exit sub
end if

if left(nick, 1) = "Y" then
msgbox "Please input into Rework Tech ID. only name, not personal numbers! / Prosim vlozte do Rework Tech ID pouze jmeno, nevkladejte osobni cisla!"
exit sub
end if

if left(nick, 1) = "t" then
msgbox "Please input into Rework Tech ID. only name, not personal numbers! / Prosim vlozte do Rework Tech ID pouze jmeno, nevkladejte osobni cisla!"
exit sub
end if

if left(nick, 1) = "T" then
msgbox "Please input into Rework Tech ID. only name, not personal numbers! / Prosim vlozte do Rework Tech ID pouze jmeno, nevkladejte osobni cisla!"
exit sub
end if

if trim(txtTech.value) = "" then
msgbox "Please put into Rework Tech. ID correct record, or input NA for unknown. / Vyplnte prosim pole Rework Tech ID."
exit sub
end if

if trim(txtRev.value) = "" then
msgbox "Please put into Part Rev. correct record, or input NA for unknown. / Vyplnte prosim pole Part Rev."
exit sub
end if

if len(trim(txtRev.value)) <> 3 then
msgbox "Revision must have 3 characters! / Pole Revize musi obsahovat 3 znaky!"
exit sub
end if

if trim(txtModel.value) = "" then
msgbox "Please put into Model correct record, or input NA for unknown. / Vyplnte prosim pole Model"
exit sub
end if

if trim(txtUnitSN.value) = "" then
msgbox "Please put into Unit SN correct record, or input NA for unknown. / Vyplnte prosim pole Unit SN."
exit sub
end if

if len(trim(txtUnitSN.value)) <> 10 then
msgbox "Please fill Unit SN correctly - only 10 characters is accepted! / Prosim vyplnte pole Unit SN, je akceptovano pouze 10 znaku!"
exit sub
end if


if trim(txtDebit.value) = "" then
msgbox "Please put into Debit Note Nr. correct record, or input NA for unknown. / Vyplnte prosim pole Debit Note Nr."
exit sub
end if

if len(trim(txtRev.value)) <> 3 then 'povoleno jen 3 znaky v poli Part Rev. / only 3 chars enabled to put
msgbox "Part Rev. must have only 3 characters! / Pole Part Rev. musi mit vyplneno max. a min. 3 znaky!"
exit sub
end if


if len(trim(txtIEC.value))<>12 or len(trim(txtHP.value))<>10 then
msgbox "Please input correct IECPN, HPPN. / Vlozte spravne cisla IECPN a HPPN"
exit sub
end if

if len(trim(txtSN.value))<>10 and len(trim(txtSN.value))<>14 and chk_noSN.checked=false then
msgbox "Please input correct SN. / Vlozte spravne cislo SN"
exit sub
end if

'if left(trim(txtSN.value),4) = " " and len(trim(txtCT.value))=0 then
' msgbox "Please input CT No."
' exit sub
'end if

'if chk_noSN.checked=false then DB.SQL= "DMR..DMR_Save 1, '" & TRIM(txtSN.value) & "', '" & TRIM(txtIEC.value) & "','" & TRIM(txtHP.value) & "','" & trim(txtCT.value) & "','" & trim(CMBDesc.value) & "', '" & TRIM(txtFacM.value) & "', '" & trim(txtVPM.value) & "', '" & trim(txtDatecode.value) & "', '" & trim(CMBFaultDesc.value) & "', '" & trim(txtCosmetic.value) & "', '" & trim(CMBVendor.value) & "', '" & trim(cmbLine.value) & "', '" & trim(cmbShift.value) & "', '" & trim(cmbArea.value) & "', '" & trim(txtOP.value) & "', '" & trim(txtTech.value) & "', '" & trim(txtRev.value) & "', '" & trim(CMBModel.value) & "', '" & trim(txtModel.value) & "', '" & trim(txtUnitSN.value) & "', '" & trim(txtDebit.value) & "','" & cmbRtn.value & "','" & cint(CNT_Scan)+1 & "', '" & PcName & "', '', '','" & txtQty.value & "'"
DB.SQL= "DMR..DMR_Save 1, '" & TRIM(txtSN.value) & "', '" & TRIM(txtIEC.value) & "','" & TRIM(txtHP.value) & "','" & trim(txtCT.value) & "','" & trim(CMBDesc.value) & "', '" & TRIM(txtFacM.value) & "', '" & trim(txtVPM.value) & "', '" & trim(txtDatecode.value) & "', '" & trim(CMBFaultDesc.value) & "', '" & trim(txtCosmetic.value) & "', '" & trim(CMBVendor.value) & "', '" & trim(cmbLine.value) & "', '" & trim(cmbShift.value) & "', '" & trim(cmbArea.value) & "', '" & trim(txtOP.value) & "', '" & trim(txtTech.value) & "', '" & trim(txtRev.value) & "', '" & trim(CMBModel.value) & "', '" & trim(txtModel.value) & "', '" & trim(txtUnitSN.value) & "', '" & trim(txtDebit.value) & "','" & cmbRtn.value & "','" & cint(CNT_Scan)+1 & "', '" & PcName & "', '', '','" & txtQty.value & "'"
'if chk_noSN.checked=true then DB.SQL= "DMR..DMR_Save 2, '" & TRIM(txtSN.value) & "', '" & TRIM(txtIEC.value) & "','" & TRIM(txtHP.value) & "','" & trim(txtCT.value) & "','" & trim(CMBDesc.value) & "', '" & TRIM(txtFacM.value) & "', '" & trim(txtVPM.value) & "', '" & trim(txtDatecode.value) & "', '" & trim(CMBFaultDesc.value) & "', '" & trim(txtCosmetic.value) & "', '" & trim(CMBVendor.value) & "', '" & trim(cmbLine.value) & "', '" & trim(cmbShift.value) & "', '" & trim(cmbArea.value) & "', '" & trim(txtOP.value) & "', '" & trim(txtTech.value) & "', '" & trim(txtRev.value) & "', '" & trim(CMBModel.value) & "', '" & trim(txtModel.value) & "', '" & trim(txtUnitSN.value) & "', '" & trim(txtDebit.value) & "','" & cmbRtn.value & "','" & cint(CNT_Scan)+1 & "', '" & PcName & "', '', '','" & txtQty.value & "'"

DB.Refresh

msgbox DB.Recordset.fields(0)

txtSN.value=""
txtCosmetic.value=""
txtct.value=""
txtDatecode.value=""
txtDebit.value=""
txtFacM.value=""
txtHP.value
lukee
Profil *
hmm tak vidím, že příspěvky mají omezenou kapacitu. Dvojkliku je zabráněno tím že kód uložení zároveň vynuluje textová pole.
lukee
Profil *
Procedura v db je nasledujici :



CREATE PROCEDURE DMR_Save @tp int, @sn char(14), @iecpn char(12), @hppn char(10), @ct char(14), @part_desc char(30), @fac_model char(12), @Vendor_part char(10), @datecode char(5), @fault char(30), @cos char(40), @vendor char(30), @line char(1), @shift char(4), @area char(10), @dmr char(7), @tech char(7),@rev char(7), @modtp char(10), @model char(12), @unitsn char(10), @debitno char(10), @type char(10), @status char(3), @op char(10), @dt1 char(10), @dt2 char(10), @id int AS
set nocount on

if @tp=1
begin
insert DMR..DMR_Details_SN select @sn, @iecpn , @hppn, @ct , @part_desc, @fac_model, @Vendor_part , @datecode, @fault, @cos, @vendor, @line, @shift, @area , @dmr, @tech,@rev, @modtp, @model , @unitsn, @debitno, @type, @status, '', @op, getdate(), getdate()
select 'Saved successfully.'

if @id<>1
insert DMR..SN_Qty select @sn, @id
end

lukee
Profil *
Jeste upresnim, ze na jinych provozech nasi firmy to nedela.
lukee
Profil *
Jeste upresnim, ze na jinych provozech nasi firmy to nedela.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0