载入:
 pBox.Items.AddObject(trim(pQuery.FieldValues[VIEWFIELD]),TObject(pQuery.FieldByName(TEXTFIELD).AsString));pQuery.FieldByName(TEXTFIELD)有可能是整数、小数和字符 
      读: 
  var strValue:string;  if pBox.ItemIndex>=0 then
     strValue:=string(pBox.Items.Objects[pBox.ItemIndex])
  else
     strValue:='';为什么 我读出来的值是乱码????????

解决方案 »

  1.   

    pQuery.FieldValues[VIEWFIELD]返回的是Variant,你转成STRING看看
      

  2.   

    是不是類型不匹配或是字符集的問題可參考以下代碼:with datamodule1.qdepartment do
      begin
      close;
      sql.clear;
      sql.add('select * from department order by departmentid');
      open;
      end;
      while not datamodule1.qdepartment.eof do
      begin
      combobox4.items.Add(datamodule1.qdepartment.fieldbyname('departmentname').Value,datamodule1.qdepartment.fieldbyname( 'departmentname ').Value);
      datamodule1.qdepartment.Next; //数据后移
      end;
    读取时,使用:
    如是整型integer(combobox4.items.Objects[Combobox4.ItemIndex])
    其余类型类似...
      

  3.   

    你这个是经典问题之一首先,你的代码的写法本身没什么问题。问题出在你不懂字符串的生命周期这个问题上,当你进行AddObject的时候,如果立刻ShowMessage,是可以看到的,但是当你离开了这个过程后,该字符串就会被释放了,因此你重新读出来的时候,就变成了乱码。请注意不是什么东西都能这样强行转型的,即使编译上没出错。要解决这个问题,必须使用字符串指针PString。添加的时候先New一个PString,然后把这个指针转成TObject添加进去就行了。记得最后自己释放指针的内存。
      

  4.   


    AddObject  可以传一个指针进去,或一个对象.  
    string 的生存周期决定了你的用法是错误的.
      

  5.   

    嗯!3-4楼说的都不错AddObject第1项可以是字符串类型的,因为在AddObject至List的同时,是进行Move操作的,即内存复制。这样即使跳出过程,也不受string计数机制的限制了。
    而第2个参数是一个指针引用,即把过程中的string的首址传给list的FObject,这样肯定就受到string计数机制的影响。轻则乱码,重则内存错误。所以建议在使用Addobject时,第2个参数尽量用一个基本数据类型,如integer等。
    pBox.Items.AddObject(trim(pQuery.FieldValues[VIEWFIELD]),Pointer(pQuery.FieldByName(TEXTFIELD).AsInteger));
      

  6.   

    strValue:=string(pBox.Items.Objects[pBox.ItemIndex])pBox.Items.Objects[pBox.ItemIndex] 相当于TObject(pQuery.FieldByName TEXTFIELD).AsString)你想你强制string一个对象的结果能是什么呢?只能是乱码Combobox的object应该是这样用的Type
      Ttest=Class(TObject)
        VIEWFIELD:String;
        TEXTFIELD:String;
      end;
    ....var
      ob_Test:Ttest;
    begin
    ....
     while not pQuery.Eof do
      begin
       ob_Test:=Ttest.Create;
       ob_Test.VIEWFIELD:=pQuery.FieldByName('VIEWFIELD').asString;
       ob_Test.TEXTFIELD:=pQuery.FieldByName('TEXTFIELD').asString;
       pBox.Items.AddObject(ob_Test.VIEWFIELD,ob_Test);
       pQuery.next;
      end;....
      
      strValue:=string(pBox.Items.Objects[pBox.ItemIndex] as Ttest).VIEWFIELD;  strValue:=string(pBox.Items.Objects[pBox.ItemIndex] as Ttest).TEXTFIELD;