DataModule2.MeterQuery.Edit;
Str:=LedParaGet;
ShowMessage(IntToStr(Length(str)));//这里是48
DataModule2.MeterQuery.FieldByName('LedPara').AsString:=str;
DataModule2.MeterQuery.Post;
ShowMessage(IntToStr(Length(DataModule2.MeterQuery.FieldByName('LedPara').AsString)));//这里变2为什么会这样呢如果我把str:='aaaaaaaaaaaaaaaaaaa';那么一切正常。

解决方案 »

  1.   

    两个地方,
    一个数据库中表设计,字段定义的长度,如char(50).
    其次是ADOQuery或ADOdataset中,添加了fields列表,一般双击ADOQuery控件,就会弹出显示fields列表的界面,点中一行,在属性栏中修改其size超过48即可。 
      

  2.   

    在工程文件中:
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    把  Application.CreateForm(TDataModule2, DataModule2);放到其它窗口创建后试试。
      

  3.   

    把showmessage放在post语句的前面试看看
    应该是post后数据集滚动了
      

  4.   

    同样的代码今天又从2变28了想死的心都有了
    另外TO8楼的,放post前后没变化
      

  5.   

    str中的40多个字节
    F8 03 F9 03 EF 03 F8 03 F8 03 F9 03 F8 03 F8 03 F8 03 F8 03 EF 03 EF 03 EF 03 B5 00 60 00 F9 03 F8 03 F8 03 EF 03 F8 03 EF 03 F8 03 00 00 00 post后
    DataModule2.MeterQuery.FieldByName('LedPara').AsString读出的字节
    F8 03 F9 03 EF 03 F8 03 F8 03 F9 03 F8 03 F8 03 F8 03 F8 03 EF 03 EF 03 EF 03 B5 
    从00 60后丢失了
      

  6.   

    #0被认为是string的结束符,结束了把#0转换为'00'保存吧
      

  7.   

    我一开始也是这么猜测的,但是,str同样是string类型的,我读str就能正常读出所有数据
    是不是数据库中的string直接是以#0作为结束符,而delphi中的string保存了长度,所以不以#0结束呢
      

  8.   

    可能是数据库字符集设置和Delphi软件的设置不一样导致的吧,在MySQL中,可以用
    show variables like "c%"
    来查看相关设置
    具体分为3种字符集
    1. 客户端字符集
    2. 连接字符集
    3. 数据库字符集
    如果这些设置不一样,在提交到数据库中时,系统会自动进行类型转换,这种转换可能会造成数据异常