• lazarus编译的应用由于linux 日期格式引起unidac日期字段保存时出错的问题(2022.04.28修正)


    lazarus 生成的程序在linux arm64(银河麒麟和raspberry)使用unidac控件(数据库postgresql),采用以下代码保存日期字段时,提示“无效UTF8的编码字节顺序 ”,百思不解这奇怪的问题,后来发现DateTimeToStr转换出现的日期格式和windows的不一样。
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      UniQuery1.Edit;
      UniQuery1.FieldByName('prdate').AsDateTime:=now;
      UniQuery1.Post;
    end;

    post时提示出错:

      Linux下默认的日期格式:

     尝试将lazarus的日期格式改为与windows的一样:

    var fs:TFormatSettings;
    begin
      fs.DateSeparator:='-';
      fs.TimeSeparator:=':';
      fs.ShortDateFormat:='yyyy-mm-dd';
      fs.LongDateFormat:='yyyy-mm-dd';
      fs.LongTimeFormat:='hh:NN:ss';
      fs.ShortTimeFormat:='hh:NN:ss';
      DefaultFormatSettings:=fs;
    end; 
    //2022-04-28发现使用以上方法在windows下float字段会只显示整数的Bug
      //使用以下方法设置后日期、float在windows、linux都正常 2022.04.28
    DefaultFormatSettings.ShortTimeFormat:='yyyy-mm-dd'; DefaultFormatSettings.ShortTimeFormat:='hh:NN:ss'; DefaultFormatSettings.LongDateFormat:='yyyy-mm-dd'; DefaultFormatSettings.LongTimeFormat:='hh:NN:ss'; DefaultFormatSettings.DateSeparator:='-'; DefaultFormatSettings.TimeSeparator:=':';

    改变日期格式后,unidac 日期字段保存也正常了,说明我遇到的问题是日期格式引起的,如你使用过程也遇到同样问题可偿试使用这个方法说不定能解决。 
    还有另一种解决方法就是采用SQL Update,也能正常更新日期字段:

      UniQuery1.SQL.Text:='update power set prdate='+chr(39)+lrdatetimetostr(now)+chr(39)+' where username=''1''';
      UniQuery1.ExecSQL;
  • 相关阅读:
    超市商品购买与管理系统
    以后写博客必须有计划一点
    关于变量初始化的问题
    先思考,后动手。
    springmvc springboot springcloud 三者的区别?
    3.20计算机组成原理课堂笔记
    作业1(基本题)JSP基本语法相关练习
    下载 Java
    地区sql
    maven ssm 编译异常记录:
  • 原文地址:https://www.cnblogs.com/qiufeng2014/p/16179434.html
Copyright © 2020-2023  润新知