当前位置: 首页 > news >正文

D 10.4.2 基于Unigui的Email定时发送 (Windows、Linux)

一、项目背景

      实现一个基于unigui的邮件发送系统(替代数据库邮件方式);

系统要求

要求点:

 1、数据访问

     数据库连接组件访问,不需要前后端分离或者其它语言来实现;

 2、系统部署

    Windows+Linux  均能正常部署;

功能要求

1、定时推送

   基于推送池(任务表)数据写入,按照一定时间间隔进行循环推送,同时反置更新推送数据,避免重复推送等;

2、Webapi接口

   衍生webapi接口,用于其它业务系统实时调用(注册邮箱验证码或者其它实时通知信息);

3、Job任务实现

  对于业务数据定期需要推送(可能每周、可能每天),可设置的任务调度来实现Job任务处理;

二、问题解决方案

1、数据库连接组件(Linux)

  Windows 下部署均为以下异常;Linux下部署,才会出现以下异常;

  Unidac 版本(8.4.2) Firedac(Delphi 10.4.2 自带)

 1.1 字符串乱码问号(Unidac)

      直连Sql server,中文字符显示???,字符集存在异常;

  解决办法:字段修改为nvarchar,由于项目是需要动态读取数据库数据,每个字段都进行修改nvarchar

  缺点:每个字段都修改nvarchar(汉字两个字节),对于动态查询不太友好,同时字段转nvarchar,工作量较大;

 1.2 字段截取(Firedac)

    

解决方案一、

方法1:

FormatOptions.MapRules.Add(dtWideString,dtWideMemo);
FormatOptions.MapRules.Add(dtAnsiString,dtWideMemo);

上述方法是将字符串类型字段映射为Memo类型的字段,能正确显示长度;

缺点:字段全部默认为Memo 数据,Dbgrid直接显示Memo,无法正确显示相关字段内容;可以通过fdmemtable 设置字段列来解决,也就是查询数据必须设定字段(对数据库动态字段查询极其不友好,工作量大)

方法2:

修改TFDConnection 下FormatOptions.StrsTrim2Len  true,显示固定长度,显然不符合要求;

笔者解决方案为,windows默认unidac连接接口,linux采用odbc来访问数据,非常友好解决以上存在问题;

2、Job任务调度处理

    对于需要定期执行(类似于数据库作业等),delphi或者unigui基于此类的跨平台以及定时作业执行相对比较薄弱;

解决方案:采用其它语言比较成熟的任务调度方案,同时跨平台支持较好;

笔者使用的.NET 的qurtz.ui来实现定期任务调度等;

三、方案设计处理

   采用前后端一体化,采用数据库访问组件(unidac)来实现,采用qurtz.ui来弥补完善delphi目前任务调度不足的情况;

四、数据访问ODBC配置

   1、Windows下配置;

       自行百度即可解决,比较简单

   2、Linux下配置

        以ubuntu 24.04 版本为例

    

    2.1 安装odbc -sqlserver驱动

一、安装odbc驱动;


https://learn.microsoft.com/zh-tw/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-2017&tabs=ubuntu18-install%2Cubuntu17-install%2Cubuntu16-install%2Credhat7-13-install%2Cubuntu-offline


二、安装库文件


sudo apt-get install tdsodbc


三、mssql工具


https://learn.microsoft.com/zh-cn/sql/linux/sql-server-linux-setup-tools?view=sql-server-ver16&tabs=ubuntu-install

sudo apt-get update
sudo apt-get install mssql-tools18 unixodbc-dev

四、数据库访问

sqlcmd -S server -C -U 用户名 -P 密码 -d 数据库名;

五、安装freetds( --with-tdsver=8.0  报错)

tar zxvf freetds-stable.tgz

sudo ./configure --prefix=/usr/local/freetds --enable-msdblib --with-gnu-ld  --enable-shared --enable-static

make

make install

vim /etc/ld.so.conf
加入一行:/usr/local/freetds/lib

sudo ldconfig


--查看freetds
vim /etc/freetds/freetds.conf 

cd /usr/local/freetds/bin/

./tsql -H your SQLserver addr -p 1433 -U 用户名 -P 密码 -D 数据库

注意你的密码有特殊字符例如 !和 # 之类的,那么需要加上转义符 \!\# ,这样就会被 freetds 识别。

六、检查odbc版本

odbcinst -j

isql -v DSN名称 用户名 密码


http://www.mrgr.cn/news/2315.html

相关文章:

  • centos安装docker
  • 8月16日笔记
  • 机器学习在智能复合材料中的应用与实践
  • 【K8S系列】Kubernetes基础介绍
  • 运行微信小程序报错:Bad attr data-event-opts with message
  • 【Python机器学习】利用PCA来简化数据——示例:利用PCA对半导体制造数据降维
  • ChatGPT 如何实现自然语言搜索企业数据?
  • React+Vis.js(05):vis.js的节点的点击事件
  • linux | ubuntu虚拟机创建硬盘、磁盘分区、分区挂载、自动挂载、磁盘清理
  • ModuleNotFoundError: No module named ‘sentence_transformers.model_card‘
  • Spring AOP应用指南:概念、通知与表达式分析
  • AI作画提示词(Prompts)工程:指南与实践技巧
  • 巴西服务器租用市场:中国企业出海布局的新热点
  • 2024新型数字政府综合解决方案(五)
  • 单元测试、系统测试、集成测试知识总结
  • 【TC3xx芯片】TC3xx芯片CAN模块详解
  • 搜维尔科技:【产品推荐】Manus Quantum Mocap Metagloves VR手套数据手套机械手训练专用手套
  • JVM内存模型分析
  • java中final的使用方法
  • Linux tar解压指令