我的表格如下:(学生号,学生名,。)
学科号,学科名,。。)
学生号,学科号,成绩)
//下划线为主码因为考虑到使用的习惯,因此我将学科号转成学科名以dbcombobox显示,当我插入的时候出现问题,当我输入了学生号,在dbcombobox选择了‘语文’,填好了成绩后,用insert 和edit进行插入,提示错误。究竟是什么原因啊?

解决方案 »

  1.   

    估计是不是你的学科名为string,学科号为int,在Insert和EDIT操作学科号时你输入的值是学科名,产生了类型错误.要做这样的转换,在字段的onGetText和OnWriteText事件里面处理,很简单
      

  2.   

    Tcombobox这个里面只能存显示的值,要么就用一个指针结构来存,保存的时候就找这个选中值对应的ID值
    或者用EH控件
    PcomBoList = ^TComBoList;
    TComboList = record
      id : integer;
      name : string;
    end;
    ComList : TList;
    装载数据
    procedure TEHLibClass.InitCombox(Sender: TObject; sqlstr, keyName,
      keyID: string);
    var i : integer;
     p : PcomBoList; 
    begin
      if sqlstr <> '' then
      begin
        with FADOQ do
        begin
          Close;
          Sql.Clear;
          Sql.Add(sqlstr);
          open;
          First;
          if RecordCount <> 0 then
          begin
            if UpperCase(TComponent(Sender).ClassName) = UpperCase('TComboBox') then
            begin
              TComboBox(Sender).Items.Clear;
              TComboBox(Sender).Items.BeginUpdate;
              for i := 0 to RecordCount - 1 do
              begin
                new(p);
                p.id := Fieldbyname(keyID).AsString;
                p.name := Fieldbyname(keyName).AsString;
                ComList.add(p);
                if keyName <> '' then
                  TDBComboBox(Sender).Items.Add(Fieldbyname(keyName).AsString);
                Next;
              end;
              TComboBox(Sender).Items.EndUpdate;
            end else if UpperCase(TComponent(Sender).ClassName) = UpperCase('TDBComboBoxEH') then
            Begin
              TDBComboBoxEH(Sender).Items.Clear;
              TDBComboBoxEH(Sender).KeyItems.Clear;
              TDBComboBoxEH(Sender).Items.BeginUpdate;
              for i := 0 to RecordCount - 1 do
              begin
                if keyID <> '' then
                  TDBComboBoxEH(Sender).KeyItems.Add(Fieldbyname(keyID).AsString);
                if keyName <> '' then
                  TDBComboBoxEH(Sender).Items.Add(Fieldbyname(keyName).AsString);
                Next;
              end;
              TDBComboBoxEH(Sender).Items.EndUpdate;
            End
          end;
        end;
      end;  
    end;取出ID和显示值TComBoBox
    if ComboBox.itemIndex <> -1 then
    begin
      id := PcomBoList(ComList[ComBox.itemIndex]).id;
      name := PcomBoList(ComList[ComBox.itemIndex]).name;
    end;
    TDBComBoBoxEH
    if DBComboBoxEH.itemIndex <> -1 then
    begin
      id := DBComboBoxEH.value;
      name := DBComboBoxEH.Text;
    end;