问题标签 [unixodbc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 在 Ubuntu 11.10 上使用 python 和 unixODBC 读取 MS Access JET 4 数据库 (.mdb):获取错误值
我在尝试在 Ubuntu 11.10 32 位上使用 Python 2.7.2(unixODBC 2.2.14、pyodbc 2.1.11 和 mdbtools 驱动程序)读取 Microsoft Access 数据库(JET 4 .mdb)时遇到了一些问题。是的,我知道这是一个可怕的想法,但奇怪的是,这是我能找到的最简单的解决方案。由于各种原因,我想避免将 .mdb 数据库转换为另一种格式(如 sqlite),但如果我无法弄清楚这似乎是唯一的解决方案。对于这个问题的长度,我深表歉意,而且我对 linux 和 odbc/数据库处理也很陌生。我花了 3 天时间试图解决这个问题,但最后两天却一无所获。
问题:我可以读取数据库,但值未正确编码/格式。
Python代码:
输出:
行:
应该:
我认为并且一直在努力弄清楚的是,在读取列信息(SQLDescribeCol.c)和/或获取数据(SQLFetch.c 和 SQLGetData.c)时出现错误。
以第 1 列和第 2 列为例。第 1 列是时间戳,并正确标识为时间戳 (SQL_TYPE_TIMESTAMP)。它还将正确的值读入缓冲区(Buffer = [03/14/03 15:40:00]),但似乎被 Column Size/StrLen 或 Ind 缩短为 8,因为结果输出为 8 个字符长 '03 /14/03',虽然我认为大小 8 指的是字节(?)。
第 2 列是整数值 1,但在 Buffer 中读取为 49。我还没有弄清楚为什么,但它将所有整数值读取为 ascii 代码/数字字符(1 变为 49,2 变为 50 等),这相当不方便当数字变大时(例如1728变成942815025),我不知道如何处理。双数在缓冲区中也被错误地读取。
SQLDescribeCol 来自日志,第 1 列和第 2 列(与下面链接的完整日志文件相同):
来自日志列 1 和 2 的 SQLGetData:
这些是 mdbtools 给出的表 abd 的列:
完整的 ODBC 日志文件: http: //pastebin.com/Q01ahwCW
如果有人对如何解决这个问题有任何提示(包括简单的数据库转换,因为我必须经常转换),将不胜感激!如果需要更多信息,我可以提供!
谢谢!
php - 从 PHP 连接到 SQL Server 时出现“自适应服务器不可用或不存在”错误
我正在尝试使用我在此处概述的 unixODBC 和 FreeTDS 从我的 Mac 连接到 SQL Server 2005 DB 。但是,当我尝试使用相同的设置连接到不同的数据库时,我得到:
这是我的 freetds.conf 设置:
这是我的 odbc.ini:
我仍然能够连接到我在这台计算机上设置的另一个数据库(在我上面链接的博客文章中描述),所以我很确定错误不在 Mac 端。我已在服务器上验证我使用了正确的 IP 地址和端口。关于可能是什么问题的任何想法,如果它在服务器端?
sql-server-2008 - Debian Linux 上的 pyodbc/FreeTDS/unixODBC:TDS 版本的问题
我在 Debian Lenny (5.0.7) 上成功使用 pyodbc 时遇到了一些麻烦。具体来说,我似乎无法获取 NVARCHAR 值(不是 SQL Server 专家,所以请放轻松:))。
大多数传统查询都可以正常工作。例如, table1 中的行数产生
和完整的 id 转储一样
但是名称转储(同样,NVARCHAR 类型)不会
...关键错误是
pyodbc.ProgrammingError: ('42000', '[42000] [FreeTDS][SQL Server] Unicode 唯一排序规则中的 Unicode 数据或 ntext 数据无法使用 DB-Library(如 ISQL)或 ODBC 版本 3.7 或更早。(4004)(SQLExecDirectW)')
这在表中是一致的。
我已经尝试了各种不同的版本,但现在我正在运行 unixODBC 2.2.11(来自 lenny repos)、FreeTDS 0.91(从源代码构建,带有./configure --enable-msdblib --with-tdsver=8.0
)和 pyodbc 3.0.3(从源代码构建)。
使用类似的组合(unixODBC 2.3.0、FreeTDS 0.91、pyodbc 3.0.3),相同的代码可以在 Mac OS X 10.7.2 上运行。
我搜索了高低,研究了此处和此处提供的解决方案并重新编译了不同版本的 unixODBC 和 FreeTDS,但仍然没有骰子。相关配置文件如下:
任何建议或方向将不胜感激!
php - 无法从 linux 平台浏览器中的 php 文件连接到 SQL Server
我使用 unixodbc 和 FreeTDS 从 linux 连接到 SQL Server。连接成功。此外,当我从命令提示符运行 php 代码时,它会正确执行,但是当我尝试在 Web 浏览器中运行代码时,它会给我错误“无法连接到服务器”。
sql-server-2008 - Datastage 连接到 SQLServer 2008 的 ODBC 配置文件
我在 sun solaris 服务器上有一个 odbc 配置文件,用于 IBM 数据阶段。
我们需要连接到一个 sqlserver express 版本。
用于连接的 ip 是 xxx.xxx.xxx.xxx\TARGET
端口是 1433,
数据库是 dbname。
配置文件示例为:
如果我尝试从 datastage 连接到 sqlserver,我不能!
如果我尝试从 Management Studio 连接到 sqlserver,使用类似服务器名称字段值“xxx.xxx.xxx.xxx\TARGET”,我可以。
配置文件对您的意见是否正确,或者在 sqlserver 上有一些设置要做吗?
Sqlserver 机器打开了端口 1433 用于从 datastage 服务器进行连接。
到 sqlserver 机器的所有其他连接都可以。
提前非常感谢。
codeigniter - CodeIgniter - Active Record 使用 Access ODBC 返回空结果
我在 Linux 系统上通过 mdbtools 连接到 Access DB,并在通过 Active Record 运行任何查询时返回空结果。日志中没有错误或任何内容。有任何想法吗 ?它可以顺利连接到数据库,并且我可以毫无问题地访问表或使用默认的 PHP 方法(例如 odbc_exec(...))运行查询。
数据库连接如下所示:
odbc.ini 看起来像:
连接:
64-bit - Sybase ODBC 到 64 位的 UnixODBC?
似乎 64 位 Sybase ASE 驱动程序仍将 SQLLEN 类型视为 32 位,而 UnixODBC 和几乎所有其他驱动程序都需要 64 位。例如,对于 SQLBindParameter 函数中的 strlen 参数,这是有问题的。
尽管可以通过将 SQLINTEGER 数组转换为 SQLLEN * 来破解这种特殊情况,但它会迫使我对 Sybase 进行特定的 ODBC 调用,这违背了通用 API 的目的。
这可以解决吗?有没有人设法在 64 位 Linux 上使用 Sybase ODBC 驱动程序而没有这些丑陋的黑客攻击?
php - 使用 PHP 5.1.6 与 IBM DB2 的 ODBC 连接
我正在使用 CentOS 版本 5.6(最终版)和 PHP 5.1.6(cli)(构建时间:2012 年 2 月 2 日 18:24:47)。我需要连接同一本地网络中的 DB2 数据库服务器。Db2 版本是 V5R3。我已经安装了 iSeriesAccess 客户端以及 unixODBC。
我的 odbc.ini 配置:
我正在运行以下代码:
我收到以下错误消息:“ [unixODBC][IBM][System i Access ODBC Driver]缺少连接所需的系统名称。错误! ”
有什么我想念的吗?欢迎您提出建议。
php - Access DB 上的 SQL 查询使用 mdbtools 返回 null 或空结果
如果我使用除了SELECT *
使用 ODBC 查询 Access DB 之外的任何条件,我会收到以下错误:No tuples available at this result index
有任何想法吗 ?这是特定的 GROUP BY 查询:
编辑
直接从 mdbtools 的命令行工具运行查询后,我得到以下信息:
postgresql - 使用 unixODBC api 异步执行 sql 失败
我想从一个应用程序中锁定一个表并插入一些数据。我的要求是,如果该表已被任何其他进程锁定,那么我需要在特定时间后尝试锁定。
我在 centOS 机器上使用 unixODBC 驱动程序,我的数据库是 postgresql。我对如何使用 odbc api 异步执行 sql 进行了研究。我发现 SQLSetStmtAttr api 可用于异步执行 sql 语句。但它不起作用。
这就是我编写代码的方式:
//但是进程在 SQLExecDirect api 上挂起,因为该表“test”已经被另一个进程锁定。(挂在某种意义上,等待所有其他进程释放锁)
为什么会这样?那是因为我的 unixODBC 驱动程序不支持异步执行。如果是这样,为什么 SQLSetStmtAttr 返回成功?
任何帮助是极大的赞赏。提前致谢。