PARADOX资料在ApplyUpdates时出错 |
尚未結案
|
fangwy
中階會員 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
|
leo2568
中階會員 發表:54 回覆:124 積分:70 註冊:2003-09-21 發送簡訊給我 |
引言: 小弟使用PARADOX,在保存数据时有时会出错,错误现象就是显示CPU Window的Disassembly pane.一旦出错DataBase Desktop也无法打开,即使已打开也变得无法响应。 经反复跟踪,发现是在执行ApplyUpdates或CommitUpdates时出错. 小弟面对Disassembly pane束手无策,请各个大大帮忙分析问题原因,或告诉我怎样查错. 使用TQuery作交易功能嗎? 屬性: AutoCalcFields = True CacheUpdate = True UpdateObject = UpdateSQL1發表人 - leo2568 於 2003/12/21 01:23:09 |
fangwy
中階會員 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
如leo2568兄所述设置:
AutoCalcFields = True
CacheUpdate = True
UpdateObject = UpdateSQL1
但是有一个表是用TTable,另一个表是用TQuery,但至于是哪一个的ApplyUpdates出错很难确定.我的程式是一只循环写数据的测试程式,有时只循环写几笔只出错,有时却循环大几十笔,所以较难跟踪,我是采取每执行一条语句将这条语句记录到.TXT文件,出错时看执行到哪一条.
程式代码如下:
procedure TInvPrintF.Ins_InvTa; //把发票数据插入数据数据表
var
i: integer;
dwTmp: dWord;
begin
taTwInv.First;
WriteLn(F , 'taTwInv.First');
for i := 1 to taTwInv.RecordCount do
begin
with taTaxBody do
begin
SetKey;
FieldByName('Inv_Date').Value := pdDate;
FieldByName('Inv_type').asstring := '0';
FieldByName('Inv_id').asstring := psInvNo; //Trim(meInv_No.text);
FieldByName('Inv_flag').asstring := SYS_INVTYPE; //发票状态
FieldByName('Inv_Seq').asInteger := taTwInv.FieldByName('Inv_Seq').asInteger;
if GotoKey then
begin
ShowMessage('inv_date=' FormatDateTime('yyyy/mm/dd', pdDate) Chr(13)
'inv_type=0' Chr(13) 'inv_id=' Trim(psInvNo) Chr(13) 'inv_flag=' SYS_INVTYPE
Chr(13) 'inv_seq=' IntToStr(taTwInv.FieldByName('Inv_Seq').asInteger));
end; Append;
FieldByName('Inv_Date').Value := pdDate;
FieldByName('Inv_type').asstring := '0';
FieldByName('Inv_id').asstring := psInvNo; //Trim(meInv_No.text);
FieldByName('Inv_flag').asstring := SYS_INVTYPE; //发票状态
FieldByName('Inv_Seq').asInteger := taTwInv.FieldByName('Inv_Seq').asInteger;
FieldByName('Item_nm').asstring := taTwInv.FieldByName('Item_nm').asstring;
FieldByName('Item_unt').asstring := taTwInv.FieldByName('Item_unt').asstring;
FieldByName('Item_qty').asFloat := taTwInv.FieldByName('Item_qty').asFloat;
FieldByName('Item_prc').asFloat := taTwInv.FieldByName('Item_prc').asFloat;
FieldByName('Item_Amt').asFloat := taTwInv.FieldByName('Item_Amt').asFloat;
FieldByName('Item_dsc').asInteger := taTwInv.FieldByName('Item_dsc').asInteger;
FieldByName('Item_tip').asInteger := taTwInv.FieldByName('Item_tip').asInteger;
FieldByName('tax_id').asInteger := taTwInv.FieldByName('tax_id').asInteger;
Post;
end;
if taTwInv.eof = false then taTwInv.Next;
end;
WriteLn(F , 'if taTwInv.eof = false then taTwInv.Next;');
WriteLn(F , 'end;');
with quTaxHead do
begin
with TQuery.Create(nil) do
begin
try
DataBaseName := 'starinv';
SQL.Add(quTaxHead.SQL.Text);
SQL.Add(' where inv_date=:inv_date and inv_type=:inv_type and inv_id=:inv_id and inv_flag=:inv_flag');
ParamByName('Inv_Date').Value := pdDate;
ParamByName('Inv_type').asstring := '0';
ParamByName('Inv_id').asstring := psInvNo; //Trim(meInv_No.text);
ParamByName('Inv_flag').asstring := SYS_INVTYPE; //发票状态
Open;
if RecordCount <> 0 then
begin
ShowMessage('inv_date=' FormatDateTime('yyyy/mm/dd', pdDate) Chr(13)
'inv_type=0' Chr(13) 'inv_id=' Trim(psInvNo) Chr(13) 'inv_flag=' SYS_INVTYPE);
end;
finally
Free;
end;
end;
Append;
FieldByName('Inv_Date').Value := pdDate;
FieldByName('Inv_type').asstring := '0'; //发票类型
FieldByName('Inv_id').asstring := psInvNo; //trim(meInv_No.text);
FieldByName('Inv_time').Value := Time;
FieldByName('Mch_id').asstring := Trim(edDevice_No.text);
FieldByName('Inv_Price').Value := strtoFloat(Copy(edSum_Price.Text, 3, Length(edSum_Price.Text) - 2));
FieldByName('Oper_id').asstring := SYS_OPRCODE;
FieldByName('Oper_nm').asstring := SYS_OPRNAME;
FieldByName('Payer_id').Value := cboxPayer_Nm.ItemIndex;
FieldByName('Payer_Nm').asstring := cboxPayer_Nm.text;
if cboxOwner_id.Visible = false then
dwTmp := 0
else
dwTmp := strtoint(trim(cboxOwner_id.Text));
FieldByName('Owner_id').Value := dwTmp;
FieldByName('Owner_Nm').asstring := edOwner_Nm.text;
FieldByName('Pay_Mode').asstring := inttostr(cboxPay_Mode.ItemIndex);
FieldByName('Chq_No').asstring := edChq_No.text;
FieldByName('Inv_Code').asstring := edInv_code.text;
FieldByName('Inv_flag').asstring := SYS_INVTYPE; //发票状态
FieldByName('Inv_Note').asstring := '';
FieldByName('Prt_Num').value := 1;
Post;
end;
WriteLn(F , 'Post;');
WriteLn(F , 'end;');
quTaxHead.Database.TransIsolation := tiDirtyRead; //事务处理
WriteLn(F , 'quTaxHead.Database.TransIsolation := tiDirtyRead;');
WriteLn(F , '*************************************************');
quTaxHead.Database.StartTransaction;
WriteLn(F , 'quTaxHead.Database.StartTransaction;');
WriteLn(F , '*************************************************');
try
WriteLn(F , 'try');
WriteLn(F , '*************************************************');
quTaxHead.ApplyUpdates;
WriteLn(F , 'quTaxHead.ApplyUpdates;');
WriteLn(F , '*************************************************');
taTaxBody.ApplyUpdates;
WriteLn(F , 'taTaxBody.ApplyUpdates;');
WriteLn(F , '*************************************************');
quTaxHead.Database.Commit;
WriteLn(F , 'quTaxHead.Database.Commit;');
WriteLn(F , '*************************************************');
except
WriteLn(F , 'except');
WriteLn(F , '*************************************************');
quTaxHead.Database.Rollback;
WriteLn(F , 'quTaxHead.Database.Rollback;');
WriteLn(F , '*************************************************');
end;
WriteLn(F , 'end;');
WriteLn(F , '*************************************************');
quTaxHead.CommitUpdates;
WriteLn(F , 'quTaxHead.CommitUpdates;');
WriteLn(F , '*************************************************');
taTaxBody.CommitUpdates;
WriteLn(F , 'taTaxBody.CommitUpdates;');
WriteLn(F , '*************************************************');
end;
|
leo2568
中階會員 發表:54 回覆:124 積分:70 註冊:2003-09-21 發送簡訊給我 |
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |