不要用DBGRID显示TEXT字段内容,用DBMEMO

解决方案 »

  1.   

    代码为:
    procedure Tformvali.savedata(sender:tobject);
    var curda:string;
        CURDATASET:TDBDATASET;
    begin
      with datamod do  begin
        curda:=uppercase(trimright(tdbdataset(sender as tdbdataset).databasename));
        CURDATASET:=tdbdataset(sender as tdbdataset);
        CurDataset.DisableConstraints;
        //是否有未更新的数据在缓存中,检查当前数据集是否已经作了修改
        if (curdataset.UpdatesPending) OR (curdataset.UpdateSTATUS<>usUnmodified) THEN BEGIN
          IF CurDa='SYS' THEN //SYS
            if not dbase.intransaction then begin
               dbase.StartTransaction;
            end;
          IF CurDa='BOM' THEN //BOM
            if not dbasebom.InTransaction then begin
              dbasebom.StartTransaction;
            end;
          IF CurDa='COP' THEN //COP
            if not dbasecop.InTransaction then begin
              dbasecop.StartTransaction;
            end;
          IF CurDa='PUR' THEN //PUR
            if not dbasepur.InTransaction then begin
              dbasepur.StartTransaction;
            end;
          IF CurDa='MOC' THEN //MOC
            if not dbasemoc.InTransaction then begin
              dbasemoc.StartTransaction;
            end;
          IF CurDa='INV' THEN //INV
            if not dbaseinv.InTransaction then begin
              dbaseinv.StartTransaction;
            end;
          IF CurDa='SNWEB' THEN //SNWEB
            if not dbaseweb.InTransaction then begin
              dbaseweb.StartTransaction;
            end;
          try
            CurDataSet.UpdateCursorPos;
            CurDataSet.ApplyUpdates;
            IF CurDa='SYS' THEN //SYS
              dbase.Commit;
            IF CurDa='BOM' THEN //BOM
              dbasebom.Commit;
            IF CurDa='COP' THEN BEGIN //COP
              dbasecop.Commit;
            END;
            IF CurDa='PUR' THEN //PUR
              dbasepur.Commit;
            IF CurDa='MOC' THEN //MOC
              dbasemoc.Commit;
            IF CurDa='INV' THEN //INV
              dbaseinv.Commit;
            IF CurDa='SNWEB' THEN //SNWEB
              dbaseweb.Commit;
            //CurDataset.CommitUpdates;
          except
            IF CurDa='SYS' THEN //SYS
              dbase.Rollback;
            IF CurDa='BOM' THEN //BOM
              dbasebom.Rollback;
            IF CurDa='COP' THEN //COP
              dbasecop.Rollback;
            IF CurDa='PUR' THEN //PUR
              dbasepur.Rollback;
            IF CurDa='MOC' THEN //MOC
              dbasemoc.Rollback;
            IF CurDa='INV' THEN //INV
              dbaseinv.Rollback;
            IF CurDa='SNWEB' THEN //SNWEB
              dbaseweb.Rollback;
            APPLICATION.MessageBox('数据写入服务器失败,请修改数据','提示信息',0+16);
            raise;
          end;
          CurDataset.EnableConstraints;
        end;
      end;procedure Tformcorderedit.BtnsaveClick(Sender: TObject);
    var ypno:string;
    begin
      ypno:=datamod.tcordercno.AsString;
      with datamod.qmodcop,DataMod do
      begin
        close;
        sql.clear;
        sql.add(format('select sum(sums) as sums from  corderedit where pno='+'''%s''',[ypno]));
        open;
        tcorder.edit;
        tcordersums.AsFloat:=fieldbyname('sums').asfloat;
      end;
      inherited;
      tabc1.Enabled:=false;
    end;inherited内的代码:  if (saveedit.DataSource <>nil) and ( dbgrid1.DataSource <>nil) then
      begin
          formvali.savedata(tdbdataset(saveedit.datasource.dataset));
          formvali.savedata(tdbdataset(dbgrid1.datasource.dataset));
      end else
         if dbgrid1.DataSource <>nil then
           formvali.savedata(tdbdataset(dbgrid1.datasource.dataset))
         else if saveedit.DataSource <>nil then
            formvali.savedata(tdbdataset(saveedit.datasource.dataset));
      dbgrid1.options := dbgrid1.Options -[dgediting];
      tabc.Enabled := false;
      Datamod.Isedit := False;
      btnstate(Datamod.isedit);
      

  2.   

    原代码:
    procedure Tformvali.savedata(sender:tobject);
    var curda:string;
        CURDATASET:TDBDATASET;
    begin
      with datamod do  begin
        curda:=uppercase(trimright(tdbdataset(sender as tdbdataset).databasename));
        CURDATASET:=tdbdataset(sender as tdbdataset);
        CurDataset.DisableConstraints;
        //是否有未更新的数据在缓存中,检查当前数据集是否已经作了修改
        if (curdataset.UpdatesPending) OR (curdataset.UpdateSTATUS<>usUnmodified) THEN BEGIN
          IF CurDa='SYS' THEN //SYS
            if not dbase.intransaction then begin
               dbase.StartTransaction;
            end;
          IF CurDa='BOM' THEN //BOM
            if not dbasebom.InTransaction then begin
              dbasebom.StartTransaction;
            end;
          IF CurDa='COP' THEN //COP
            if not dbasecop.InTransaction then begin
              dbasecop.StartTransaction;
            end;
          IF CurDa='PUR' THEN //PUR
            if not dbasepur.InTransaction then begin
              dbasepur.StartTransaction;
            end;
          IF CurDa='MOC' THEN //MOC
            if not dbasemoc.InTransaction then begin
              dbasemoc.StartTransaction;
            end;
          IF CurDa='INV' THEN //INV
            if not dbaseinv.InTransaction then begin
              dbaseinv.StartTransaction;
            end;
          IF CurDa='SNWEB' THEN //SNWEB
            if not dbaseweb.InTransaction then begin
              dbaseweb.StartTransaction;
            end;
          try
            CurDataSet.UpdateCursorPos;
            CurDataSet.ApplyUpdates;
            IF CurDa='SYS' THEN //SYS
              dbase.Commit;
            IF CurDa='BOM' THEN //BOM
              dbasebom.Commit;
            IF CurDa='COP' THEN BEGIN //COP
              dbasecop.Commit;
            END;
            IF CurDa='PUR' THEN //PUR
              dbasepur.Commit;
            IF CurDa='MOC' THEN //MOC
              dbasemoc.Commit;
            IF CurDa='INV' THEN //INV
              dbaseinv.Commit;
            IF CurDa='SNWEB' THEN //SNWEB
              dbaseweb.Commit;
            //CurDataset.CommitUpdates;
          except
            IF CurDa='SYS' THEN //SYS
              dbase.Rollback;
            IF CurDa='BOM' THEN //BOM
              dbasebom.Rollback;
            IF CurDa='COP' THEN //COP
              dbasecop.Rollback;
            IF CurDa='PUR' THEN //PUR
              dbasepur.Rollback;
            IF CurDa='MOC' THEN //MOC
              dbasemoc.Rollback;
            IF CurDa='INV' THEN //INV
              dbaseinv.Rollback;
            IF CurDa='SNWEB' THEN //SNWEB
              dbaseweb.Rollback;
            APPLICATION.MessageBox('数据写入服务器失败,请修改数据','提示信息',0+16);
            raise;
          end;
          CurDataset.EnableConstraints;
        end;
      end;procedure Tformcorderedit.BtnsaveClick(Sender: TObject);
    var ypno:string;
    begin
      ypno:=datamod.tcordercno.AsString;
      with datamod.qmodcop,DataMod do
      begin
        close;
        sql.clear;
        sql.add(format('select sum(sums) as sums from  corderedit where pno='+'''%s''',[ypno]));
        open;
        tcorder.edit;
        tcordersums.AsFloat:=fieldbyname('sums').asfloat;
      end;
      inherited;
      tabc1.Enabled:=false;
    end;inherited内的代码:  if (saveedit.DataSource <>nil) and ( dbgrid1.DataSource <>nil) then
      begin
          formvali.savedata(tdbdataset(saveedit.datasource.dataset));
          formvali.savedata(tdbdataset(dbgrid1.datasource.dataset));
      end else
         if dbgrid1.DataSource <>nil then
           formvali.savedata(tdbdataset(dbgrid1.datasource.dataset))
         else if saveedit.DataSource <>nil then
            formvali.savedata(tdbdataset(saveedit.datasource.dataset));
      dbgrid1.options := dbgrid1.Options -[dgediting];
      tabc.Enabled := false;
      Datamod.Isedit := False;
      btnstate(Datamod.isedit);
      

  3.   

    以前我也碰过类似的,好像是bug吧, 你可尝试
    1.不用dbgrid显示text类型的字段.
    2.如果text类型的字段只是存放一定长度的字符串, 用长字符串类型代替.