更新數據記錄時經常提示﹕Row cannot be located for updating,Some values may have benn changed since it was last read! SET TRANSACTION ISOLATION LEVEL SERIALIZABLE或SELECT FIELDLIST FROM TABLENAME(HOLDLOCK) WHERE CRITERIA 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我是用Table控件的locate去做判斷時出現這個錯誤的﹐怎么解決呢﹖ 這是源代碼﹗with SelectKq do begin first; repeat edit; fDate:=FieldByName('wkdate').AsDateTime; i:=strToint(formatDateTime('dd',fDate)); wkno := Fieldbyname('fwkno').asstring; yyyymm :=MaskEdit1.text; if i = 1 then //清除已有記錄 begin DelRecDaily.SQL.Text := 'delete from EntryDaily where code ='+wkno+' and yyyymm = '+yyyymm; DelRecDaily.Prepared; DelRecDaily.ExecSQL; end; {EntryTable.close; EntryTable.Parameters.ParamByName('yyyymm').value := trim(MaskEdit1.text); EntryTable.Prepared; EntryTable.open;} EntryTable.Refresh; if EntryTable.locate('code;yyyymm',VarArrayOf([wkno,yyyymm]),[loCaseInsensitive]) then begin EntryTable.edit; EntryTable.FieldByName('f'+inttostr(i)+'1').AsString:=FieldByName('book_on').AsString; EntryTable.FieldByName('f'+inttostr(i)+'2').AsString:=FieldByName('lunch_out').AsString; EntryTable.FieldByName('f'+inttostr(i)+'3').AsString:=FieldByName('lunch_in').AsString; EntryTable.FieldByName('f'+inttostr(i)+'4').AsString:=FieldByName('book_off').AsString; EntryTable.FieldByName('f'+inttostr(i)+'5').AsString:=FieldByName('atime11').AsString; EntryTable.FieldByName('f'+inttostr(i)+'6').AsString:=FieldByName('atime21').AsString; EntryTable.fieldByName('addtime').Asinteger:=EntryTable.fieldByName('addtime').Asinteger+fieldByName('addtime').Asinteger; EntryTable.fieldByName('worktime').AsFloat:=EntryTable.fieldByName('worktime').Asinteger+fieldByName('worktime').Asinteger; EntryTable.post; end else begin EntryTable.Insert; EntryTable.FieldByName('code').AsString:=FieldByName('fwkno').AsString; EntryTable.FieldByName('name').AsString:=FieldByName('fname').AsString; EntryTable.FieldByName('f'+inttostr(i)+'1').AsString:=FieldByName('book_on').AsString; EntryTable.FieldByName('f'+inttostr(i)+'2').AsString:=FieldByName('lunch_out').AsString; EntryTable.FieldByName('f'+inttostr(i)+'3').AsString:=FieldByName('lunch_in').AsString; EntryTable.FieldByName('f'+inttostr(i)+'4').AsString:=FieldByName('book_off').AsString; EntryTable.FieldByName('f'+inttostr(i)+'5').AsString:=FieldByName('atime11').AsString; EntryTable.FieldByName('f'+inttostr(i)+'6').AsString:=FieldByName('atime21').AsString; EntryTable.fieldByName('addtime').Asinteger:=EntryTable.fieldByName('addtime').Asinteger+fieldByName('addtime').AsInteger; EntryTable.fieldByName('worktime').Asinteger:=EntryTable.fieldByName('worktime').AsInteger+fieldByName('worktime').AsInteger; EntryTable.FieldByName('yyyymm').asstring := yyyymm; EntryTable.post; end; next; Gauge1.position :=Gauge1.position+1; until eof; SET TRANSACTION ISOLATION LEVEL READ COMMITED SET TRANSACTION ISOLATION LEVEL READ COMMITED真得不知道在哪里設﹖我用的是ADO?可以詳細一點嗎﹖ 急救 如何一次性插入多条记录(针对多个用户) 关于修改列的identity属性 数据量大可以拆表吗?怎么拆才合理? 讨论免费数据库的优劣. 如何 执行select来的 结果 求救! 远 程 联网,都需要哪些设置?注意哪些事情? 虚表问题 求一条SQL语句 请高手集合:为保护试用版软件出谋献策 这个该咋写?
with SelectKq do
begin
first;
repeat
edit;
fDate:=FieldByName('wkdate').AsDateTime;
i:=strToint(formatDateTime('dd',fDate));
wkno := Fieldbyname('fwkno').asstring;
yyyymm :=MaskEdit1.text;
if i = 1 then //清除已有記錄
begin
DelRecDaily.SQL.Text := 'delete from EntryDaily where code ='+wkno+' and yyyymm = '+yyyymm;
DelRecDaily.Prepared;
DelRecDaily.ExecSQL;
end;
{EntryTable.close;
EntryTable.Parameters.ParamByName('yyyymm').value := trim(MaskEdit1.text);
EntryTable.Prepared;
EntryTable.open;}
EntryTable.Refresh;
if EntryTable.locate('code;yyyymm',VarArrayOf([wkno,yyyymm]),[loCaseInsensitive]) then
begin
EntryTable.edit;
EntryTable.FieldByName('f'+inttostr(i)+'1').AsString:=FieldByName('book_on').AsString;
EntryTable.FieldByName('f'+inttostr(i)+'2').AsString:=FieldByName('lunch_out').AsString;
EntryTable.FieldByName('f'+inttostr(i)+'3').AsString:=FieldByName('lunch_in').AsString;
EntryTable.FieldByName('f'+inttostr(i)+'4').AsString:=FieldByName('book_off').AsString;
EntryTable.FieldByName('f'+inttostr(i)+'5').AsString:=FieldByName('atime11').AsString;
EntryTable.FieldByName('f'+inttostr(i)+'6').AsString:=FieldByName('atime21').AsString;
EntryTable.fieldByName('addtime').Asinteger:=EntryTable.fieldByName('addtime').Asinteger+fieldByName('addtime').Asinteger;
EntryTable.fieldByName('worktime').AsFloat:=EntryTable.fieldByName('worktime').Asinteger+fieldByName('worktime').Asinteger;
EntryTable.post;
end
else
begin
EntryTable.Insert;
EntryTable.FieldByName('code').AsString:=FieldByName('fwkno').AsString;
EntryTable.FieldByName('name').AsString:=FieldByName('fname').AsString;
EntryTable.FieldByName('f'+inttostr(i)+'1').AsString:=FieldByName('book_on').AsString;
EntryTable.FieldByName('f'+inttostr(i)+'2').AsString:=FieldByName('lunch_out').AsString;
EntryTable.FieldByName('f'+inttostr(i)+'3').AsString:=FieldByName('lunch_in').AsString;
EntryTable.FieldByName('f'+inttostr(i)+'4').AsString:=FieldByName('book_off').AsString;
EntryTable.FieldByName('f'+inttostr(i)+'5').AsString:=FieldByName('atime11').AsString;
EntryTable.FieldByName('f'+inttostr(i)+'6').AsString:=FieldByName('atime21').AsString;
EntryTable.fieldByName('addtime').Asinteger:=EntryTable.fieldByName('addtime').Asinteger+fieldByName('addtime').AsInteger;
EntryTable.fieldByName('worktime').Asinteger:=EntryTable.fieldByName('worktime').AsInteger+fieldByName('worktime').AsInteger;
EntryTable.FieldByName('yyyymm').asstring := yyyymm;
EntryTable.post;
end;
next;
Gauge1.position :=Gauge1.position+1;
until eof;
可以詳細一點嗎﹖