adotable.post 的问题

bfox 2003-12-12 09:48:28
我在用ADOTABLE 操作的过程中,用APPEND,正常,可是只要一POST,就报错,错误提示如下
project prj.exe raised exception class eoleexception with message' 多步操作产生错误。请检查每一步的状态值。'
那位高手能指点一下啊?
代码如下unit Unit_input;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, twEnter, Grids, DBGridEh, StdCtrls, DBCtrls, Mask,
DBCtrlsEh, Menus, DB, Buttons, ImgList;

type
TFrminput = class(TForm)
panelbotton: TPanel;
Paneltop: TPanel;
TWEnter1: TTWEnter;
DBGridEh1: TDBGridEh;
DBE_no: TDBEditEh;
DBE_yinfu: TDBEditEh;
DBE_shifu: TDBEditEh;
DBTweifu: TDBText;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
BtnOk: TButton;
Splitter1: TSplitter;
dsinput: TDataSource;
Button1: TButton;
btnnew: TButton;
Label5: TLabel;
DBNavigator1: TDBNavigator;
SpeedButton1: TSpeedButton;
DBE_weifu: TDBEditEh;
procedure DBE_shifuExit(Sender: TObject);
procedure BtnOkClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure btnnewClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
suser:string;
{ Public declarations }
end;

var
Frminput: TFrminput;

implementation

uses Unit_data, Unit_login;

{$R *.dfm}

procedure TFrminput.DBE_shifuExit(Sender: TObject);
begin
{if StrToCurr(dbe_yinfu.Text) - StrToCurr(DBEshifu.Text) > 0 then
begin
DBTweifu.font.Color:=clred;
DBTweifu.font.Size:=10;
DMmain.ADTinput.FieldByName('zhaohui').AsCurrency:=StrToCurr(dbe_yinfu.Text) - StrToCurr(DBEshifu.Text);
end
else
DMmain.ADTinput.FieldByName('zhaohui').AsCurrency:=0 ; }
end;

procedure TFrminput.BtnOkClick(Sender: TObject);
begin
DMmain.adtinput.Post;
end;

procedure TFrminput.Button1Click(Sender: TObject);
begin
label1.Caption:=suser;
end;

procedure TFrminput.btnnewClick(Sender: TObject);
begin
DMmain.adtinput.Edit;
DMmain.adtinput.Append;
DMmain.adtinput.FieldByName('caozuoyuan').AsString:=FrmLogin.suser;
end;

procedure TFrminput.FormCreate(Sender: TObject);
begin
frminput.WindowState:=wsmaximized;
if not DMmain.ADTinput.Active =True then
DMmain.ADTinput.Active:= true;

end;

end.
...全文
76 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigery 2003-12-18
  • 打赏
  • 举报
回复
up ,接点分
我以前碰到这样的事情,可能是数据库设置问题,比如主键问题,或者有相同记录问题(删除出错),也就是着几个方面的问题,检查一下,基本就ok了
bagayv 2003-12-18
  • 打赏
  • 举报
回复
来晚了!
呵呵。我以前也遇过。郁闷了好久哈。
以后切忌了。
bfox 2003-12-17
  • 打赏
  • 举报
回复
已经找到原因了,是因为数据库中有个默认值字段设的不对
enova 2003-12-12
  • 打赏
  • 举报
回复
post前判断一下吧:
if DMmain.adtinput.state in [dsInsert] then //好象是这样
DMmain.adtinput.Post;

我也不大清楚,随便说说,呵呵
大地精灵 2003-12-12
  • 打赏
  • 举报
回复
楼主,还有一个问题就是,我看了一下,你的PAS文件里有DBGRID,那就是你APPEND以后,你到DBGRID里换到一个老的行上了,那么相当于已经POST了,那你在执行POST的时候就肯定会报错的
angle097113 2003-12-12
  • 打赏
  • 举报
回复
DMmain.adtinput.FieldByName('caozuoyuan').AsString:=FrmLogin.suser;
改成DMmain.adtinput.FieldByName('caozuoyuan').value:=FrmLogin.suser;试试呢
或者是不是赋值的时候数据类型不匹配啊 还是存在不允许空的字段啊
angle097113 2003-12-12
  • 打赏
  • 举报
回复
很可能是没有主键造成的 或者你的主键里面有重复的数据造成的吧
xiaoqiang123 2003-12-12
  • 打赏
  • 举报
回复
如果提示错误但却提交成功的,就建主键或是索引试试
gsun 2003-12-12
  • 打赏
  • 举报
回复
将DMmain.adtinput.Edit;删去
append后在dbgrid中不要移动行,一移动,就会自动post,你再通过按钮来post时,表已经不处于编辑状态,所以报错,
将DMmain.adtinput.Post;放到btnnewclick后面

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧