表字段结构为 id(int), name( varchar(100) )加密后String的ascii集为      0xf0, 0x07, 0xb1, 0x1a,
      0xbd, 0xec, 0x95, 0x09,
      0x45, 0xf8, 0xfe, 0xa4,
      0xe0, 0xdb, 0x6e, 0x68,
      0x87, 0x6c, 0x09, 0x0f,
      0x05, 0x54, 0x6f, 0x72,      '\0',使用AsString赋值给name字段,马上读出(数据还未update到数据库,直接从内存读),字符集变为      0x3f, 0x3f, 0xbd, 0xec,
      0x3f, 0x45, 0xf8, 0xfe,
      0xa4, 0xe0, 0xdb, 0x6e,
      0x68, 0x87, 0x6c, 0x09,
      0x0f, 0x05, 0x54, 0x6f,
      0x72,      '\0',后又使用SetData设置数据,结果和AsString出现一样的问题。请高手指教!!!总共200分,还有一百分在C++ builder区。

解决方案 »

  1.   

    你要不把内容都读出到memo中看看,
      

  2.   

    读过了,不行,只要赋值给AsString再读出,就变了,我想应该是赋值给AsString那里变了吧。
      

  3.   

    char encBuf[100] =
          {
          0xf0, 0x07, 0xb1, 0x1a,
          0xbd, 0xec, 0x95, 0x09,
          0x45, 0xf8, 0xfe, 0xa4,
          0xe0, 0xdb, 0x6e, 0x68,
          0x87, 0x6c, 0x09, 0x0f,
          0x05, 0x54, 0x6f, 0x72,
          '\0',
          };      String str1 = encBuf;      ADOTable1->Active = false;
          ADOTable1->TableName = "test_enc";
          ADOTable1->Active = true;      ADOTable1->Edit();
          ADOTable1->FieldByName("name")->AsString = str1;
          // 或者 ADOTable1->FieldByName("name")->AsString = encBuf;
          // 或者 ADOTable1->FieldByName("name")->SetData( encBuf, false );      ShowMessage( str1.Length() );
          ShowMessage( ADOTable1->FieldByName("name")->AsString.Length() );
      

  4.   

    我是用bcb的,delphi应该也一样吧。
      

  5.   

    str1 和 AsString 长度不一样。
      

  6.   

    能具体点么?
    byte数组和char好像没什么区别吧,我是用bcb的。谢谢。
      

  7.   

    string 不能保存一些特殊字符,象0x07,0x09等等。
    两种方案:一是使用BLOB保存
    一是转换为HEX
      

  8.   

    数据库字段是字符类型的,blob好像不能用啊,请问下怎么转换为Hex啊?
      

  9.   

    但是为什么,String赋值给String就对的呢?