FireDAC数据库连接管理控件 TFDManager

RAD Studio11 提供了FireDAC连接数据库。关于 FDConnection 与数据库建立连接,最简单的办法就是拖动控件TFDConnection到界面上。双击此控件,它会弹出一个对话框。在那个对话框里面进行设置就好了。

FireDAC 还提供了一个 TFDManager 控件。设计期拖一个出来放到界面上,指定其属性 ConnectionDefFileName 为外部ini文件,参数在外部ini文件的[mycon]小节中设置。这样是非常方便的:

① 如果程序中有多个 FDConnection 需要连接同一个数据库,对每个 FDConnection 进行参数设置,不管是设计期还是运行期,都是很麻烦的。但使用FDManager只需修改参数ConnectiondefName为mycon即可。

②如果参数需要在安装程序时进行修改,比如不同的场合数据库文件的路径不同,数据库服务器的 IP 地址不同等等,把这些参数写死在程序里面是不行的。使用FDManager,只需修改外部文件的参数即可,程序运行时自动从外部文件加载连接参数。

例如:config.ini

[MySqlCon]
Database=orders
User_Name=cds
Password=123456
Server=127.0.0.1
DriverID=MySQL
CharacterSet=Gb2312

 

本文为原创文章,转载请注明出处!

informix 通过ADO或ODBC连接提取数据时出现中文乱码的解决方法

最近在做一个项目,是对INFORMIX数据库的数据进行大数据分析,INFORMIX数据库数据有上亿条,没有linux的Root权限和informix数据的生产权限,只能读取。客户要求结果显示在内网windows WEB服务器上,终端通过浏览器来阅读。

我采用python+django+pandas+matplotlib。

首先要做的是:连接数据库并获取数据,其次要创建内网WEB服务,然后实现实时数据分析。

在做第一步时,就遇到INFORMIX的数据汉字编码问题。

现数据采用8859-1字符集,819编码。通过取数据分析,所有汉字为GBK编码的十六进制字符输出。

原生输出肯定为乱码,解决方案:网上能查到的唯一能解决的就是采用JDBC加连接输出控制实现。

我们既然知道出现乱码原因,就可以编程来实现。以下是我在HTML中和Django模板中解决乱码的方法。

一、ASP

<%
var _chrs = new Array();
var _db = new ActiveXObject(“ADODB.Connection”);
_db.Open(“provider = microsoft.jet.oledb.4.0;data source=” + Server.MapPath(“\data\\gbkdb.mdb”));
var _rs = new ActiveXObject(“ADODB.Recordset”);
var _sql=”Select * From gbk ”
_rs.open(_sql, _db);
var _tempi;
var _tempchr;
while(! (_rs.eof )) {
_tempchr=_rs(‘GBK’).value;
_tempi=parseInt(_tempchr, 16);
_chrs[_tempi]=_rs(‘CHRS’).value;
_rs.movenext;
}
_rs.close();
_db.close();

function gbk2chr(_str){
var _temp=”??”;
var _xiabiao=parseInt(_str, 16);
if (!((_chrs[_xiabiao]==”undefined”)||(_chrs[_xiabiao]==null)))
{_temp=_chrs[_xiabiao]}
return _temp;
}

function tounicode(str){
var tounicode1=””;
var len=str.length;
var code1=0;
var code2=0;
var code161=””;
var code162=””;
var _str1=””;
var _temp=””;
for(var i=0;i<len;i++){
code1 = str.charCodeAt(i);
code161 = code1.toString(16);
if (code1>159) {
code2 = str.charCodeAt(i+1);
code162 = code2.toString(16);
_str1=code161+code162;
tounicode1=tounicode1+gbk2chr(_str1);
i++
}
else {
tounicode1=tounicode1+code161;
}
}
return tounicode1;
}

%>

数据库后台取数后调用 tounicode()转换一下,即可在HTML页面正确显示汉字。

二、Django(这个要简单些)

def uni2gbk2(_str):

  if type(_str)!=str:
return _str
strl=len(_str)
a=””
i=0
while i<strl:
if ord(_str[i])>128:
a1=hex(ord(_str[i]))
a2=hex(ord(_str[i+1]))
i=i+2
ab=str(a1)[2:]+str(a2)[2:]
abb=bytearray.fromhex(ab)
a=a+abb.decode(“gbk”)
else:
a=a+_str[i]
i=i+1
return a

取数后,调用uni2gbk2转换即可

本文为原创文章,转载请注明出处!