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名称 用户名 密码

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值