起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 368|回复: 13

【搞定】临时字段的 chaeckbox 表现**

[复制链接]
发表于 2007-12-24 10:00:01 | 显示全部楼层 |阅读模式
做了一个简单实验,一个整数型临时字段表现类型设置为‘checkbox’,临时字段‘XZ’自动填充 0

功能业务是:选中一条以后,条件一样的都要选中并且改变字段‘shuzi’改变值。

目的:应用临时字段的cheeckbox

做完以后遇到的问题:

1、if SysUtils.UpperCase(Field.Name)='XZ' then
这个判断一直为 false ,进入不了里面的循环

2、屏蔽了问题一 的判断,进入下面判断,每次窗体创建后第一次点中选择不进入循环,第二次点击就进入循环操作了,奇怪啊

3、      Edit;
                  FieldByName('XZ').AsInteger:=1;
                  FieldByName('shuzi').AsInteger:=100;
                  Post;
这个操作的时候 FieldByName('XZ').AsInteger:=1; 这句,我以前写的是: FieldByName('XZ').AsBoolean:=True; 可是报错,可是就在我现在做的系统里面我在别的地方这么写过就没有报错,同样的设置。。。太奇怪了。。

下面是我写的代码:(不多)
procedure TMainForm.BizFormShow(Sender: TObject);
begin
  DataSetBroker.DataSet.Open;
  ChangeIng:=True;
end;

procedure TMainForm.DataSetBrokerDataChange(Sender: TObject; Field: TDataField);
var
  I:Integer;
begin
  if Field <> nil then
  begin
    if ChangeIng then
    begin
      if SysUtils.UpperCase(Field.Name)='XZ' then
      begin
        if DataSetBroker.DataSet.FieldByName('XZ').AsBoolean then
        begin
          ChangeIng:=False;
          I:=DataSetBroker.DataSet.FieldByName('tiaojian').AsInteger;
          showmessage(IntToStr(I));
          with DataSetBroker.DataSet do
          begin
            First;
            While Not Eof do
            begin
              if FieldByName('tiaojian').AsInteger=I then
              begin
                if FieldByName('XZ').AsBoolean=false then
                begin
                  Edit;
                  FieldByName('XZ').AsInteger:=1;
                  FieldByName('shuzi').AsInteger:=100;
                  Post;
                end;
              end;
              Next;
            end;
          end;
          ChangeIng:=True;
        end;
      end;
    end;
  end;
end;


希望客服大虾能做以下,看看我这几个问题是怎么回事,谢谢了
下面图是表结构设计

aa.jpg

10.75 KB, 下载次数: 196

回复

使用道具 举报

发表于 2007-12-24 10:19:51 | 显示全部楼层
1、你跟踪过吗? Field.Name  是啥?空吧,你是要取字段名,应该用 Field.fieldname,
2、FieldByName('XZ').AsBoolean:=True 你这是判断?还是复制?如果是判断,怎么还有“:”,
   报啥错误呢?把原始的错误信息帖出来。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-24 10:27:00 | 显示全部楼层
to
atiger

1、按照你说的对了,我写的时候写错了,没注意,呵呵

2、是赋值,报错为:
运行选择窗体的时候发生异常:Cannot access field '选择' as type Boolean类型:EDatabaseError
可是我以前这么写过,没错。。

另外 在窗体打开后,我操作的时候,第一次选中到这句的时候判断为 false ,第二次选中后才判断为true,就是窗体打开后第一次选中不进行循环操作
if DataSetBroker.DataSet.FieldByName('XZ').AsBoolean then

你在帮我看看

另外谢谢你啊,好像每次都是你给我解决问题,还是你们客服都用这一个号啊,呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-24 11:02:18 | 显示全部楼层
没人回答了啊。。自己顶一下
回复 支持 反对

使用道具 举报

发表于 2007-12-24 11:22:41 | 显示全部楼层
2、不会的,你是在设计环境下运行的,还是运行环境下,你再看看是怎么写的,跟踪一下,或者把代码帖全了我看看

3、在窗体打开后,我操作的时候,第一次选中到这句的时候判断为 false ,
不会呀。没有能再现,你的意思,已经执行 if DataSetBroker.DataSet.FieldByName('XZ').AsBoolean then   这句话了,

每个人都有自己的bbs帐号的,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-24 11:33:20 | 显示全部楼层
我是在设计环境下运行的,报错就在改变:FieldByName('XZ').AsBoolean:=true;

执行道判断那句了,问题很奇怪

所有代码:
unit MainForm;

interface

uses
  Business.System, Business.Forms, Business.Data, Business.Model;

type
  TMainForm = class(TForm)
    InfoBroker: TInfoBroker;
    DataSetBroker: TDataSetBroker;
    DataGrid1: TDataGrid;
    DataGrid1id: TDataGridColumn;
    DataGrid1shuzi: TDataGridColumn;
    DataGrid1tiaojian: TDataGridColumn;
    DataGrid1XZ: TDataGridColumn;
    procedure BizFormShow(Sender: TObject);
    procedure DataSetBrokerDataChange(Sender: TObject; Field: TDataField);
  private
    ChangeIng:Boolean;
  public
    {public declarations}
  end;

implementation
uses
Business.Forms.Dialogs,Business.System.SysUtils, Business.System.DateUtils,
  Business.System.StringUtils;

procedure TMainForm.BizFormShow(Sender: TObject);
begin
  DataSetBroker.DataSet.Open;
  ChangeIng:=True;
end;

procedure TMainForm.DataSetBrokerDataChange(Sender: TObject; Field: TDataField);
var
  I:Integer;
begin
  if Field <> nil then
  begin
    if ChangeIng then
    begin
      if Field.FieldName='XZ' then
      begin
        if DataSetBroker.DataSet.FieldByName('XZ').AsBoolean then
        begin
          ChangeIng:=False;
          I:=DataSetBroker.DataSet.FieldByName('tiaojian').AsInteger;
          showmessage(IntToStr(I));
          with DataSetBroker.DataSet do
          begin
            First;
            While Not Eof do
            begin
              if FieldByName('tiaojian').AsInteger=I then
              begin
                if FieldByName('XZ').AsBoolean=false then
                begin
                  Edit;
                  FieldByName('XZ').AsBoolean:=true;
                  FieldByName('shuzi').AsInteger:=100;
                  Post;
                end;
              end;
              Next;
            end;
          end;
          ChangeIng:=True;
        end;
      end;
    end;
  end;
end;

end.

我的版本是2827,你可以做了例子实验一下,好奇怪的,呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-24 11:35:50 | 显示全部楼层

数据库设计看一楼。。

这是临时字段的设计

b.jpg

37.6 KB, 下载次数: 174

回复 支持 反对

使用道具 举报

发表于 2007-12-24 11:46:46 | 显示全部楼层
你是啥类型的数据库,如果可以,你做个简单例子,我直接导入进去测试,这样省的来回确认细节,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-24 11:53:18 | 显示全部楼层
我用的是 oracle 8 数据库,我做一个例子,我怎么发给你啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-24 11:55:22 | 显示全部楼层
我在什么空间下面建,你能够导入啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-5 03:08 , Processed in 0.057193 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表