一直用java做开发,公司刚接了个cs的 项目要用delphi ,临时报佛脚,也闻不出香臭,有 几个问题大家帮帮忙看看,
,我用的 adotable ,界面上有两个dbgrid ,关联两个表 一个 主表一个 从表
问题
(1)在主表的 dbgrid中删除一条记录,从表也有相应的记录,就会出现
ORA-02292 违反完整约束条件 ,我 要怎么截取这个错误 让他出现我自己 的
showmessage
(2)新增一条记录 在这个界面中我 用的是RzDBEdit1绑定表里的字段 但是当我 一点新增的时候 就 会出现 (无法插入空行,行必须至少有一个列值集) 出现这个后点确定 后可新增记录 数据库中也 相应增加 让我 很 郁闷 还有新增和修改后怎么让RzDBEdit里的内容为空 RzDBEdit.text;='' 不行
代码
begin
if zhcForm.modi then
begin
meditForm.Caption:='修改信息';
DM.mparAT.Edit;
end
else
begin
meditForm.Caption:='添加信息';
id:=trim(RzDBEdit1.Text);
if length(id)<0 then
begin
ShowMessage('必须填写编号!');
exit;
end;
Dm.mparAT.Insert;
DM.mparAT.Append;
Dm.mparAT.Post;
end;
end;
(3)当我删DBgrid的记录时 删除到 最后一条记录时 也会出现(无法插入空行,行必须至少有一个列值集)删除代码如下
begin
if MessageDlg('确认要删除吗',mtConfirmation,[mbYes,mbNo],0)=mrYes then
begin
dm.mparAT.Delete;
dm.mparAT.Edit;
dm.mparAT.Post;
dm.mparAT.Refresh;
end;
end;
,我用的 adotable ,界面上有两个dbgrid ,关联两个表 一个 主表一个 从表
问题
(1)在主表的 dbgrid中删除一条记录,从表也有相应的记录,就会出现
ORA-02292 违反完整约束条件 ,我 要怎么截取这个错误 让他出现我自己 的
showmessage
(2)新增一条记录 在这个界面中我 用的是RzDBEdit1绑定表里的字段 但是当我 一点新增的时候 就 会出现 (无法插入空行,行必须至少有一个列值集) 出现这个后点确定 后可新增记录 数据库中也 相应增加 让我 很 郁闷 还有新增和修改后怎么让RzDBEdit里的内容为空 RzDBEdit.text;='' 不行
代码
begin
if zhcForm.modi then
begin
meditForm.Caption:='修改信息';
DM.mparAT.Edit;
end
else
begin
meditForm.Caption:='添加信息';
id:=trim(RzDBEdit1.Text);
if length(id)<0 then
begin
ShowMessage('必须填写编号!');
exit;
end;
Dm.mparAT.Insert;
DM.mparAT.Append;
Dm.mparAT.Post;
end;
end;
(3)当我删DBgrid的记录时 删除到 最后一条记录时 也会出现(无法插入空行,行必须至少有一个列值集)删除代码如下
begin
if MessageDlg('确认要删除吗',mtConfirmation,[mbYes,mbNo],0)=mrYes then
begin
dm.mparAT.Delete;
dm.mparAT.Edit;
dm.mparAT.Post;
dm.mparAT.Refresh;
end;
end;
ORA-02292 违反完整约束条件 ,我 要怎么截取这个错误 让他出现我自己 的
showmessageADOTable的OnDeleteError事件!2.
Dm.mparAT.Insert; //Insert和Append只需要一个就行了!去掉其中一个
DM.mparAT.Append;
Dm.mparAT.Post;3.
dm.mparAT.Delete; //最后一条记录已经删除完了!
dm.mparAT.Edit; //你要干嘛呢?你想EDIT谁
dm.mparAT.Post;直接写dm.mparAT.Delete;试试吧!
dm.mparAT.Delete; //最后一条记录已经删除完了!
dm.mparAT.Edit; //你要干嘛呢?你想EDIT谁
dm.mparAT.Post;
-------------------------
不加dm.mparAT.Edit; 每执行一次删除都回出来 moarAT:dataset not in edit or insert mode
ADOTable的OnDeleteError事件!要怎么用.用异常吗
var Action: TDataAction);
begin
if Dm.mparAT.RecordCount<1 then
MessageDlg('表中无记录!',mtError,[mbOK],0);
end;end.
这样写吗 怎么有问题
现在是
(2)新增一条记录 在这个界面中我 用的是RzDBEdit1绑定表里的字段 但是当我 一点新增的时候 就 会出现 (无法插入空行,行必须至少有一个列值集) 出现这个后点确定 后可新增记录 数据库中也 相应增加 让我 很 郁闷 还有新增和修改后怎么让RzDBEdit里的内容为空 RzDBEdit.text;='' 不行
---------------
不知道怎么 回这样
2.
Dm.mparAT.Insert; //Insert和Append只需要一个就行了!去掉其中一个
DM.mparAT.Append;
Dm.mparAT.Post;Insert和Append都是增加的动作;
你只要用一个就行了!
DM.mparAT.FieldByName('field1').Value := ....
这里要赋值啊!
Dm.mparAT.Post;这里应该没没提交吧!
DM.mparAT.Append; 就可以了
Dm.mparAT.Post;是在确定按钮的时候调用的!
Dm.mparAT.Post; 完之后再
Dm.mparAT.Append;了
Dm.mparAT.Append; //再增加!
在 确定 按钮里写个Dm.mparAT.Append 就OK了
现在想加个 按钮 【下一条】点击这个按钮RzDBEdit里面就会相应出现下一条的内
Dm.mparAT.Next 不行 还是回到刚修改的地方------------
chenzhuo(睡到自然醒) 有其他的办法么
IsAppend: Boolean;
begin
IsAppend := Dm.mparAT.State = dsInsert; //如果是增加状态
Dm.mparAT.Post; //保存!!
if IsAppend then Dm.mparAT.Append; //再增加!下一条也可以这样写!
if Not (Dm.mparAT.State in [dsEdit,dsInsert]) then
if Not Dm.mparAT.Eof then Dm.mparAT.Next;
按你的写报错:
[Error] meditUnit.pas(74): Undeclared identifier: 'dsInsert'
[Error] meditUnit.pas(82): Undeclared identifier: 'dsEdit'
[Error] meditUnit.pas(82): Incompatible types: 'TDataSetState' and 'Integer'
[Fatal Error] zhcUnit.pas(52): Could not compile used unit 'meditUnit.pas'
引用单元DB他的定义是
TDataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert, dsSetKey,
dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead,
dsInternalCalc, dsOpening);
不知道往那加
DB 是什么
uses DB;是要加到这个meditForm(添加的窗体)的uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, RzPanel, Grids, DBGrids, DBCtrls, StdCtrls, RzLstBox,
RzDBList, RzDBGrid, RzDBNav, RzButton;这吗 他的定义又加到那
还有[Fatal Error] zhcUnit.pas(52): Could not compile used unit 'meditUnit.pas'双击他会提示到zhcForm(就是包还两个DBGrid的)里的 uses dataUnit, meditUnit, pgxUnit, deditUnit;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, RzPanel, Grids, DBGrids, DBCtrls, StdCtrls, RzLstBox,
RzDBList, RzDBGrid, RzDBNav, RzButton, DB;
dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead,
dsInternalCalc, dsOpening);
这个加到那!
dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead,
dsInternalCalc, dsOpening);
这个加到那!这个不用加,是我告诉你他是怎么定义的!
var mpara_id :string;
begin
mpara_id:=DBGrid1.fieldbyname('MPARA_ID')AS.string;
然后在执行个select语句 判断下就知道了 但是adotable好像不能执行sql语句 该怎么办
ShowMessage('存在明细');
begin
if dm.mparAT.Locate(MPARA_ID,DM.mparAT.fieldbyname('MPARA_ID').asstring,[]) then
ShowMessage('存在明细');
dm.mparAT.Delete;
end;
报错:[Error] zhcUnit.pas(71): Undeclared identifier: 'MPARA_ID'
[Fatal Error] LJYH_PGXT.dpr(11): Could not compile used unit 'zhcUnit.pas'
这个问题完了就结贴
ShowMessage('存在明细');MPARA_ID应该要加引号的if 这里是明细的table.Locate('MPARA_ID',adotable1.fieldbyname('MPARA_ID').asstring,[]) then
ShowMessage('存在明细');
begin
if dm.mparAT.Locate(MPARA_ID,DM.mparAT.fieldbyname('MPARA_ID').asstring,[]) then
begin
ShowMessage('存在明细');
Abort; //既然存在记录了,那就不让它删除了,所以可以用Abort或Exit退出!
end;
dm.mparAT.Delete;
end;
好了 现在就 结贴! 再次感谢chenzhuo(睡到自然醒);
:)
非常谢谢你 chenzhuo(睡到自然醒)的耐心 ,你给了我很大的帮助,
好了 现在就 结贴! 再次感谢chenzhuo(睡到自然醒);
:)