各位大佬:
小弟做一超市前台收银用触摸屏.思路是:前动态生成组件方式生成商品单以便选择,这作为前一个FORM,后一个FORM是打印并同时将临时库中的商品选购数据存入总库中(二个库结构完成相同),在第二个FORM时,第一个不关闭,程序用ODBC与SQL连接,前一个FORM运行正常,但在操作第二FORM时却发生了这样情况:
所有导入的数据都不能在总库中正确反应,或是变成0或是NULL,但我将后一个FORM单独运行时,导入的数据正确,这是为何,真不知所措了!
procedure TForm6.Button1Click(Sender: TObject);
var
f6_b1i1,f6_b1i2:integer;
 f6_ryname:string;
begin
self.xpdy ;//打印程序
 table1.Open;//总库
 table1.Last;
 table1.Edit;
// f6_b1i1:=table2.RecordCount ;
 table2.Open;//临时库
 table2.First ;
 if table1.RecordCount =0 then f6_b1i2:=1;
 if table1.RecordCount >0 then f6_b1i2:=table1.fieldbyname('id').AsInteger+1 ;
  for f6_b1i1:=0 to table2.RecordCount-1 do
 begin
 table1.Append;
 table1.Edit;
table1.fieldbyname('id').asinteger:=f6_b1i2;(这能正确导入)
table1.FieldByName('dj_no').asinteger:=strtoint(form3.edit14.text);(这能正确导入)
 table1.FieldByName('renyuanmc').AsString:=table2.fieldbyname('renyuanmc').AsString ;(以下不能正确导入)
table1.FieldByName('je').Asfloat:=table2.fieldbyname('je').Asfloat ;
table1.FieldByName('dj').Asfloat:=table2.fieldbyname('dj').Asfloat ;
table1.FieldByName('sl').Asfloat:=table2.fieldbyname('sl').Asfloat ;
table1.FieldByName('rq').AsDateTime:=table2.fieldbyname('rq').Asdatetime ;
table1.FieldByName('zzk').Asfloat:=table2.fieldbyname('zzk').Asfloat ;
table1.FieldByName('dlzk').Asfloat:=table2.fieldbyname('dlzk').Asfloat ;
table1.FieldByName('zzje').Asfloat:=table2.fieldbyname('zzje').Asfloat ;
f6_b1i2:=f6_b1i2+1;table1.Post;
table1.Edit;
table2.Next;
end;query1.Close;
query1.SQL.Clear;
query1.SQL.Add('delete from xiaoshou');
query1.ExecSQL ;
 form6.Close;
 form3.Label7.Caption:='0.00';
 form3.Edit7.Text:='0.00';
 form3.Edit11.Text:='0.00';
 form3.Edit13.Text:='';
 form3.Edit6.Text:='0.00';
 form3.edit8.Text:='0';
form3.edit9.Text:='0';
form3.edit3.text:='';
form3.edit4.Text :='';
form3.edit5.Text:='0';
form3.edit6.Text:='0';
form3.edit7.Text:='0.00';
form3.label7.caption:='0.00';
form3.edit8.Visible:=false;
//form3.edit9.Visible :=false;
//form3.edit11.Text:='0.00';
 end;

解决方案 »

  1.   

    你的第一个form是怎么使用你的table2的?感觉是第一个form锁定了table2,第二个form移动table2指针的时候出问题。
      

  2.   

    table1.Append;  
    //table1.Edit; 去掉看看
    table1.fieldbyname('id').asinteger:=f6_b1i2;(这能正确导入) ....table1.Post; 
    //table1.Edit; 去掉看看
    table2.Next; 
      

  3.   

    pulerno3
    第二个用到table2(在第一个FORM中是TABLE3)连接在数据库中的表的程序如下:
    procedure TForm3.Button4Click(Sender: TObject);
    var
    f3_xiaoshoui1:integer;
     f3_xiaoshoui2,f3_xiaoshoui3,f3_xiaoshoui4,f3_xiaoshoui5,f3_xiaoshoui6,i7,i8,i9:currency;
    begin
     if (edit13.Text='') then exit;
    if ((edit3.text='') or (edit4.text='') or (edit5.text='')) then exit;
    if ((edit8.Visible = false) and (edit9.Visible = false)) then
    begin
    edit7.text:='0.00';
    edit6.Text:=floattostr(strtofloat(trim(edit4.text))*strtofloat(trim(edit5.text)));
    label7.Caption :=floattostr(strtofloat(trim(label7.Caption ))+ strtofloat(trim(edit6.text)));
     edit11.Text :=label7.Caption;
     end;
    if ((edit8.Visible = true) and (edit9.Visible = false)) then
    begin
    i7:=strtofloat(trim(edit4.text));
    i8:=strtofloat(trim(edit5.Text));
    i9:=i7*i8;
    edit6.Text:=floattostr(i9);
    label7.Caption :=floattostr(strtofloat(trim(label7.Caption ))+ strtofloat(trim(edit6.text)));
        f3_xiaoshoui4:=strtofloat(trim(edit8.text));
        f3_xiaoshoui5:=1-f3_xiaoshoui4;
        f3_xiaoshoui6:=strtofloat(trim(edit6.Text ));
        f3_xiaoshoui2:=(f3_xiaoshoui6)*(f3_xiaoshoui5);
        f3_xiaoshoui3:=strtofloat(trim(edit7.text));
      f3_xiaoshoui3:=f3_xiaoshoui3+f3_xiaoshoui2;
      edit7.Text:=floattostr(f3_xiaoshoui3);
      edit11.Text:=floattostr(strtofloat(trim(label7.caption))-f3_xiaoshoui3);
    end;
     if ((edit8.Visible = false) and (edit9.Visible =true)) then
    begin
    edit6.Text:=floattostr(strtofloat(trim(edit4.text))*strtofloat(trim(edit5.text)));
     label7.Caption :=floattostr(strtofloat(trim(label7.Caption ))+ strtofloat(trim(edit6.text))) ;
      edit7.Text:=edit9.Text;
      edit11.Text:=floattostr(strtofloat(trim(label7.caption))-strtofloat(trim(edit7.Text)));
      end;table3.Active:=true;
    if table3.RecordCount =0 then f3_xiaoshoui1:=0;
    table3.Open;
    table3.Last;
    f3_xiaoshoui1:=table3.fieldbyname('id').AsInteger;
    f3_xiaoshoui1:=f3_xiaoshoui1+1;
    table3.Append;table3.FieldByName('id').AsInteger :=f3_xiaoshoui1;
     //table3.fieldbyname('dj_no').asinteger:= f3_no;
    table3.FieldByName('spmc').AsString:=trim(edit3.text);
    table3.FieldByName('renyuanmc').AsString :=trim(edit1.text);
    table3.FieldByName('je').AsFloat  :=strtofloat(trim(edit6.text));
    table3.FieldByName('sl').Asfloat :=strtofloat(trim(edit5.text));
    table3.FieldByName('dj').AsFloat :=strtofloat(trim(edit4.text));
    if edit8.Visible=true and edit9.Visible =false then
    begin
    table3.FieldByName('zzje').AsFloat:=f3_xiaoshoui2;
    table3.FieldByName('zzk').asfloat:=0.00;
    table3.fieldbyname('dlzk').asfloat:=strtofloat(edit8.text);
    end;
     if edit8.Visible=false and edit9.Visible =true then
    begin
    table3.FieldByName('zzje').AsFloat:=f3_xiaoshoui2;
    table3.FieldByName('zzk').asfloat:=0.00;
    table3.FieldByName('dlzk').asfloat:=strtofloat(edit9.text);
    end;
     if edit8.Visible=false and edit9.Visible =false then
    begin
    table3.FieldByName('zzje').AsFloat:=f3_xiaoshoui2;
    table3.FieldByName('zzk').asfloat:=0.00;
    table3.FieldByName('dlzk').asfloat:=strtofloat(edit9.text);
    end;
    if edit8.Visible=false and edit9.Visible =false then
    begin
    table3.FieldByName('zzje').AsFloat:=f3_xiaoshoui2;
    table3.FieldByName('zzk').asfloat:=0.00;
    table3.FieldByName('dlzk').asfloat:=0.00;
    end;
    table3.FieldByName('rq').AsDateTime :=date();table3.post;
    table3.edit;
    edit3.Text:='';
    edit4.Text:='';
    edit5.Text:='1';
    end;
      

  4.   

    dinoalex:
    按您的方法仍是原样,还有什么好办法?