当前位置:主页>仓库管理软件> 列表

dbgrid与数据库的问题?[:D] 找青岛进销存软件

销售管理软件版1楼: 我使用ACCESS2000数据库,与ehlib3.6控件,在具体运用中出现如下问题:
用dbgrideh来浏览修改数据库表格时,
比如要将某金额改为0值,正确的方法是用户在该单元格中输入0即可。
但是,用些用户习惯按“del”或“back”键将单元格内容删除;
如果这样,则数据库表中对应记录的字段值为NULL,不是想要的0,如果有空值,往往会导致SQL的UPDATE运算不正确。

不知哪位大侠解决过类似问题,在下请教

2楼: 在Update之前处理下 如电脑进销存

3楼: 请问如何处理?

4楼: 你只要在dbgrideh的键盘事件中,当key=#8 or key=#46的时候,你就直接给当前单元赋值为0啊!!!

5楼: 有没有其他如办法?
楼上说的虽然可行,但实际操作时情况较复杂,这样做会导致其他问题的出现

6楼: 在post之前賦值為0
if ...then
=0

销售管理软件版7楼: 帮顶!

╭=========================================╮

80G海量源代码,控件,书籍全免费狂下不停!

http://www.source520.com

╰=========================================╯

8楼: zhenshide方法比较好!

9楼: 我记得delphi里有个函数,名字忘记了。xxx(‘’,0),如果是空就返回0

10楼: 修改ACCESS2000数据库 金额字段的默认值为‘0'', 不准为空

11楼: 楼上办法我也试过,这样程序在操作过程中,如果删除了单元格中内容,则程序会自动提示出错。

12楼: 如上述方法仍不满意


可尝试修改数据库表定义中,该字段允许为空
但在录入中做必要控制,这样界面会友好许多,也容易控制 如好用的财务软件

13楼: 真的没有好的办法了吗?

销售管理软件版14楼: 设置字段可以为空,默认值为0就可以,或者在post之前判断其值,如果为空,就赋0;

15楼: 在改字段的onValidate事件中添加
procedure TForm1.ADOTable1DSDesignerValidate(Sender: TField);
begin
if (sender.Value=null) then
begin
if application.MessageBox(''是否取消修改,否则重新输入合法数值'',''信息'',mb_OKCancel+mb_iconwarning)=1 then
begin
sender.DataSet.Cancel;
abort;
end
else
abort;//重新输入
end;

end;

16楼: 自己写个象SQL Server 里面的IsNull函数就是了
IsNull(''...'',0) 不就可以了?

17楼: 我的作法通常是这样:
在字段的Validate事件里判断字段值是否为0:
if (clddetailBox_Size.AsInteger > 0) and
(clddetailBox_Qty.AsInteger > 0) then
begin
clddetailqty.AsInteger := clddetailBox_Size.AsInteger * clddetailBox_Qty.AsInteger;


end;

18楼: 在数据库beforepost事件中进行判断有关字段
如果 字段.value=null then 字段.value=0

19楼: 在BeforePost之前加上:
 Table1.FieldByName(''FieldName'').AsFloat := Table1.FieldByName(''FieldName'').AsFloat;

20楼: 在Access数据库中设置该表的相应字段允许空值以可以。

销售管理软件版21楼: 我同意chen_liang的做法

22楼: 在改字段的onValidate事件中添加

方法测试后,不行 如青岛进销存软件

23楼: 用sender.value=null判断一下,如果为空,可以赋值为0.

24楼: 如果对Sender.value:=0进行赋值,程序运行产生错误?

25楼: 在改字段的onValidate事件中添加
if (sender.value=null) then
begin
showmessage(''请输入正确的值'');
abort;
end;

在:dbedit控件中应用正常,在dbgrid中如清除单元格内容,会自动弹出两次对话框,不知为何?
可能是清除前後都觸發了
你可以用別的事件,比哪用post事件來寫

26楼: 执行你的SQL的UPDATE运算之前能否先执行另外一个Update,也就是把相关的null全部替换为0,这样比较简单。

27楼: 多人接受答案了。