case不同的index,调用不同的sql,insert到不同的字段

解决方案 »

  1.   

    之前有想过用case of,相当于上面的代码要复制十次,我感觉应该还有其它办法的吧
      

  2.   

    不用case,来个简单的:
    定义一个StringList,存储ComboBox相应的字段名;
    在combobox选择事件里直接:
     sql.Add('insert into 表名(' + StringList[combobox.selectedIndex] + ') values(‘ +combobox.text + ’)');
    大概这个意思,属性名称可能不准确;
      

  3.   

    楼主有一个概念未弄清,数据库表的数据是一条一条插入的。你插入的时候,每个字段都有值,否则为空。
    建议插入一条记录,UpData字段值。
    通常的办法,每个字段对应一个DBCombobox(或combobox) 。
      

  4.   

    是这样的,我弄的是一个成绩录入系统,姓名等相关的信息都提前作好了的,只差一个得分了,所以我经通过edit所成绩录入到指定的名字下面,但是又有很多学科,所以学科选择相当于combobox的选择,每一个学科有一个字段,所以我需要动态的录入。
      

  5.   

    我试试你说的方法!我很少用stringlist能不能来点全的代码,我没弄出来,呵呵,感谢了
      

  6.   

    如果是动态录入成绩的话,还是通过若干个TEdit,分别对应相关字段,然后通过SQL语句更新保存录入数据:
    比如:Edit1对应语文,Edit2对应数学,Edit3对应物理1、读取记录行的ID
    2:SQ语句
      SQL:='Update 成绩单 set ';
      SQl:=SQL+'语文='+#39+Trim(Edit1.Text)+#39+',';
      SQl:=SQL+'数学='+#39+Trim(Edit2.Text)+#39+',';
      SQl:=SQL+'物理='+#39+Trim(Edit3.Text)+#39+',';
      SQl:=SQL+' where ID='+#39+ID+#39;
    3、通过ADO控件执行SQL语句即可
      

  7.   

    你的意思和我说的不太一样,我上图,再详细说说!上面的项目是根据下面的combobox来选择的,当选择不同的项目的时候,成绩那一样的字段就会不一样,所以这个做法我不会弄,各位知道的能来个方法,楼上的各位朋友给的都不是很好用或者我真的不会用。当选择项目后,dbgrid里面就会显示学生的基本信息,当标点击对应行后,下面的成绩那里就可以输入,提交到数据库,所以重点就是选择后,成绩里面的字段会变。
      

  8.   

    1、请告诉成绩录入的表名,主键名(ID),最好每个字段名都列出来。
    2、TDBGrid如何打开的。知情才能参谋!
      

  9.   

    表是student_score  然后里面的项目名是A,B,C,D,E,F,G,H然后对应的得分字段是A_score,B_score,C_score,D_score,E_score, G_score, H_score  姓名:s_name
    性别:s_sexDBGRID是通过绑定datasourse来实现的数据显示的!~
      

  10.   


    但是DBGRID里面的得分字段只有一个,这个是动态来显示的,就是combobox里面来确定是哪一个字段。就是这一环不知道怎搞了
      

  11.   

    这个用存储过程吧,根据这个类型选择不同的sql执行,比如跳远就执行啥
    项目和执行的sql这样写在数据库和存储过程中,这要可以动态的不改变程序就行执行
      

  12.   

    除了存储过程就没有其它的了吗?第一,我使用的如果不是sql数据呢,用的是MDB呢,还有其它办法没有
      

  13.   

    除了存储过程就没有其它的了吗?第一,我使用的如果不是sql数据呢,用的是MDB呢,还有其它办法没有那你建个表呀,类型和对应的查询语名不就行了,我也是这么做的
      

  14.   

    除了存储过程就没有其它的了吗?第一,我使用的如果不是sql数据呢,用的是MDB呢,还有其它办法没有那你建个表呀,类型和对应的查询语名不就行了,我也是这么做的
     先试试你说的这个方法,谢谢!
      

  15.   

    简单的实现了一下,供楼主参考代码部分:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, Grids, DBGrids, ADODB;type
      TForm1 = class(TForm)
        ComboBox1: TComboBox;
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        DBGrid1: TDBGrid;
        DataSource1: TDataSource;
        Edit1: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        Button1: TButton;
        procedure ComboBox1Change(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        function IntToBin(Value: LongInt;Size: Integer): String;
        procedure SetDBGridShowColus(ch:Byte);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationvar
      SelField:string;{$R *.dfm}procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      case ComboBox1.ItemIndex of
        0:begin SetDBGridShowColus(1);SelField:='A_score' end;   //下面和0一样就不多写了
        1:SetDBGridShowColus(2);
        2:SetDBGridShowColus(4);
        3:SetDBGridShowColus(8);
        4:SetDBGridShowColus(16);
        5:SetDBGridShowColus(32);
      end;
    end;function TForm1.IntToBin(Value, Size: Integer): String;
    var
      i: Integer;
    begin
      Result:='';
      for i:=Size-1 downto 0 do
      begin
        if Value and (1 shl i)<>0 then
        begin
          Result:=Result+'1';
        end
        else
        begin
          Result:=Result+'0';
        end;
      end;
    end;procedure TForm1.SetDBGridShowColus(ch: byte);
    var
      strtmp:string;
      i:Byte;
      cls:array[1..6] of Byte;
    begin
      strtmp:=IntToBin(ch,6);
      for i:=1 to Length(strtmp) do
      begin
        cls[i]:=StrToInt(strtmp[i]);
      end;
      
      DBGrid1.Columns[2].Visible:=cls[1]=1;
      DBGrid1.Columns[3].Visible:=cls[2]=1;
      DBGrid1.Columns[4].Visible:=cls[3]=1;
      DBGrid1.Columns[5].Visible:=cls[4]=1;
      DBGrid1.Columns[6].Visible:=cls[5]=1;
      DBGrid1.Columns[7].Visible:=cls[6]=1;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      //确定保存
      {知道了表名、字段名称、姓名等信息、
      不要使用insert into ,
      需要使用Update student_score set A_score=:A_score where 判断条件
              Parameters.ParamByName('id').Value:=strtofloatDef(edit1.text,0.0)}
    end;end.
      

  16.   

    如果这几个项目都在一个表中,可以通过显示隐藏dbgrid中的某些列来实现楼主的要求,保存成绩要用到update,不能用insert。