使用DBGRID有如下几个问题:
1.如何判断当前DBGRID有几行?(也就是有几条记录,
使用DataSource还是Query的DataSet的RecordCount来判断吗?)
2.如何判断当前DBGRID某行被选中?
(有没可能出现有记录却没有一行被选中的情况?)
3.如何取出被选中行的第一个字段的值?使用MaskEdit的问题:
1.如何让用户只输入数字和小数点?
2.如何判断这个数字是有效的?(譬如不能出现1.2.3这样的情况)关于替换字符的问题
1.使用哪个函数执行字符串替换功能?
(如VB中使用replace函数)关于保存数据的问题
1.在DBGRID中某一行的最后一个值(数字)发生改变时,
我需要修改该行以及以下所有行的该字段做相应的加减,
请问该过程在什么位置中执行比较合理?
是更新数据库然后刷新显示好一点
还是在DBGRID中计算完毕然后更新回数据库中好一点?
如果是后面一种情况,在哪个事件里面写POST?(我用了ADOQUERY)关于安装控件的问题
1.我找了一个FlatStyle控件,安装了半天也没安装上
书上说要找BPL文件,我找了半天没找到
我只有一个FlatStyle_D6.dpk文件和source目录下的pas文件第一次用Delphi做数据库,多谢大家帮助了,谢谢,嘻嘻.
//从此Delphi又多了一个菜鸟扳手...

解决方案 »

  1.   

    1. DBGrid1.DataSource.DataSet.RecordCount就是记录数;
    2. 不用判断
    3. DBGrid1.DataSource.DataSet.Fields.Fields[0].asInteger/asString...
    如果你知道DBGrid1的DataSource的DataSet固定的是什么,比如说是Table1;上面的都可以写成:Table1.RecordCount和Table1.Fields.Fields[0].asInteger/asString...1. 不用MaskEdit,用Edit,在其OnKeyPress()中写:
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
     //如果用户输入的是小数点,并且已经有小数点了
     if (Key=DecimalSeparator) and (Pos(key,Edit1.Text)>0) then Key:=#0
     //如果用户输入规定字符以外的字符(#8是Backspace)
     else if not(Key in [#8,'0'..'9',DecimalSeparator]) then Key:=#0;
    end;
    2. 如上写法,输入肯定是有效的1. 好象没有replace,先StrPos定位,手工替换后面的没看懂
      

  2.   

    1.应该是判断你所关联的表的记录数即可,就是recordcount
    2.只要判断一下关联的表当前记录就行了
    3.具体语法忘了,应该是talbe1.field[0].asString
       后面的asString如果是其它类型的的数据改一下就行了
      

  3.   

    关于安装控件的问题
    1.我找了一个FlatStyle控件,安装了半天也没安装上
    书上说要找BPL文件,我找了半天没找到
    我只有一个FlatStyle_D6.dpk文件和source目录下的pas文件
    >>FlatStyle_D6.dpk直接安裝
    在設定中加上路徑
      

  4.   

    {
      Name:        FastReplace();
      Param:       all:源字符(串);
                   target:替换字符(串);
                   source:被替换的字符(串);
      Author:      haughtiant
      CreatDate:   2002、9、28
      Description: 字符(串)替换;
    }
    function FastReplace(source,target,all:string):string;
    var
      i:integer;
    begin
      while (pos(source,all)<>0) do
      begin
        i:=pos(source,all);
        Delete(all,i,length(source));
        Insert(target,all,i);
      end;
      Result:=all;
    end;如果你的第一行有更改,而且以下的各行也遵循相同的规则(如:都加100),建议先将数据库更新(update table set field=field+100 where ,,,,,,;commit;),然后重新显示;判断是否合法(float)
    try
      strtofloat(edit1.text);
    except
      showmessage('输入数据不合法!');
    end;