是这样的有两个表
表product
id     name
1      红豆
2      绿豆
3      黄豆表order
name   amount(数量)
红豆    3
黄豆    6order中字段name是product.name的子集,要求对order有插入,删除,修改的操作,order中name做成多选框形式(内容为product的所有name值)当选中时,且后边的amount不为空才将信息上传(批量上传)至数据库表order中,有什么办法能实现吗?或用其他方式实现也可以,我都想了好几天了,紧急求救,多多感谢!

解决方案 »

  1.   

    可以增加一个字段(DBCheckBox),用来判断是否需要上传.另外amount为空的用sql语句就可以过滤。
      

  2.   

    怎么没大看懂?你是要在程序界面上显示order的内容供客户选取么?批量上传是什么意思?我没看出你的问题难点在哪,选择的时候直接判断amount的值不可以么?
    或者你说的再详细些,我最喜欢帮MM,呵呵(擦口水中……)
      

  3.   

    是在界面上显示product中name字段的内容供用户选择,但不是combobox下拉形式的,是把所有内容用checkbox形式显示,并且后边对应Edit框填写与之对应的产品数量,最后传至表order中!明白?
      

  4.   

    To 龙飞白水dbgrid的datasouce对应  表order,那么dbcheckbox中怎么提取表product中name字段的所有内容供选择呢?能说的详细些吗?
      

  5.   

    if checkbox1.checked then
    begin
      
      s1:='select a.acount from order a where a.name=checkbox.caption';
       adoquery1.sql.text:=s;
       edit1.text:=adoquery1.fieldbyname('acount').asstring;
      
    end;
    先把ADO 连起来
      这样就可以把数据显示出来啦
      

  6.   

    要传回ORDER表
    用一条INSERT INTO 语句就可以啦
      

  7.   

    To woshilyy:
    可是checkbox.caption是从表product的name字段提取出来的,关键就在这!!且供选则的checkbox个数就是表product的纪录个数(name主键)
      

  8.   

    order中name做成多选框形式(内容为product的所有name值)当选中时,且后边的amount不为空才将信息上传是在界面上显示product中name字段的内容供用户选择,但不是combobox下拉形式的,是把所有内容用checkbox形式显示,并且后边对应Edit框填写与之对应的产品数量,最后传至表order中!明白?
    ----------------------------------------------
    又有点晕,到底界面上显示的是哪个表的name字段?在上传之前判断后面的edit框有没有内容不用说吧,教你一个简单的方法:你可以放两个query控件,一个操纵表product,一个操纵表order,虽然有点麻烦但简单易懂且不易出错
      

  9.   

    create table product(id number(3),name varchar2(10));
    create table order(name varchar2(10),amount number(50);
    insert into product(1,'红豆');
    insert into product(2,'绿豆');
    insert into product(3,'黑豆');
    select p.name,nvl(o.amount,0) amount from product p,order o where p.name=o.name(+);
    NAME AMOUNT
    黑豆 0
    红豆 0
    绿豆 0
    delphi中:
    with adoquery1 do
    begin
      active:=fasle;
      sql.clear;
      sql.add(' select p.name,nvl(o.amount,0) amount from product p,order o ');
      sql.add(' where p.name=o.name(+) ');
      active:=true;
    end;
    dbgrid.dataSource:=adoquery1;这时在adoquery的update事件中写以下代码
    begin
      if :amount>0 then
        insert into order values(:name,:amount);
      end if;
    end;
      

  10.   

    To:Hellolongbin呵呵,是想两个都显示呢,因为order中的name是product的子集,所以如果是表order里的内容则在product.name前边打勾,不知道能不能实现呢?唉,好像是我表达能力不太好呀!