无法使用 pyodbc 将 jpeg 插入 filemaker 数据库:HY011 ODBC 错误
unable insert jpeg into filemaker db with pyodbc : HY011 ODBC Error
我在尝试将 JPEG 插入 FileMaker 14 数据库时遇到此 odbc 错误。当我 运行 针对 MySQL 插入 blob 的相同脚本时,没有错误。插入文本字段不会产生错误。
我也不知道,也找不到对 odbc 错误 HY011 有意义的解释...
有人可以帮忙吗?提前致谢!
交互式输入代码时的输出:
Python 2.7.9(默认值,2014 年 12 月 13 日,15:13:49)
[GCC 4.2.1 兼容 Apple LLVM 6.0 (clang-600.0.56)] on darwin
键入 "help"、"copyright"、"credits" 或 "license" 以获取更多信息。
>>> import pyodbc
>>> with open('Femke.jpg', 'rb') as f:
... data = f.read()
...
>>> conn = pyodbc.connect('DRIVER={/Library/ODBC/FileMaker ODBC.bundle/Contents/MacOS/fmodbc.so};SERVER=localhost;DATABASE=testContainer;UID=Admin')
>>> cur = conn.cursor()
>>> cur.execute("insert into testContainer (cont) values (PutAs(?, 'JPEG'))", pyodbc.Binary(data))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
pyodbc.Error: ('HY011', '[HY011] [unixODBC][Driver Manager]Attribute cannot be set now (0) (SQLPutData)')
>>>
这听起来可能有些多余,但我首先要仔细检查目标 FileMaker 字段是否确实定义为容器字段。如果不是,那很容易解释这个错误。您可能还想检查 this FileMaker help document,概述一些 O/JDBC blob 错误消息及其原因。
如果这些都没有帮助,我会检查 FileMaker 数据库中的安全设置,以确保 xDBC 用户有权在目标 table 中创建和编辑记录,并且容器字段设置为也允许这样做。
这是一个完全在黑暗中拍摄的照片,但请尝试更改
cur.execute("insert into testContainer (cont) values (PutAs(?, 'JPEG'))", pyodbc.Binary(data))
至
cur.execute("insert into testContainer (PutAs(cont,'JPEG')) values (?))", pyodbc.Binary(data))
在 filemaker jdbc/odbc 指南中明确指出它能够通过 JDBC(第 33 页)处理 clob 类型。对于 ODBC,我无法在文档中找到它,所以我想这是 FileMaker ODBC 接口的一个缺点。
我现在使用 JDBC 并且有效。
我在尝试将 JPEG 插入 FileMaker 14 数据库时遇到此 odbc 错误。当我 运行 针对 MySQL 插入 blob 的相同脚本时,没有错误。插入文本字段不会产生错误。 我也不知道,也找不到对 odbc 错误 HY011 有意义的解释...
有人可以帮忙吗?提前致谢!
交互式输入代码时的输出:
Python 2.7.9(默认值,2014 年 12 月 13 日,15:13:49) [GCC 4.2.1 兼容 Apple LLVM 6.0 (clang-600.0.56)] on darwin 键入 "help"、"copyright"、"credits" 或 "license" 以获取更多信息。
>>> import pyodbc
>>> with open('Femke.jpg', 'rb') as f:
... data = f.read()
...
>>> conn = pyodbc.connect('DRIVER={/Library/ODBC/FileMaker ODBC.bundle/Contents/MacOS/fmodbc.so};SERVER=localhost;DATABASE=testContainer;UID=Admin')
>>> cur = conn.cursor()
>>> cur.execute("insert into testContainer (cont) values (PutAs(?, 'JPEG'))", pyodbc.Binary(data))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
pyodbc.Error: ('HY011', '[HY011] [unixODBC][Driver Manager]Attribute cannot be set now (0) (SQLPutData)')
>>>
这听起来可能有些多余,但我首先要仔细检查目标 FileMaker 字段是否确实定义为容器字段。如果不是,那很容易解释这个错误。您可能还想检查 this FileMaker help document,概述一些 O/JDBC blob 错误消息及其原因。
如果这些都没有帮助,我会检查 FileMaker 数据库中的安全设置,以确保 xDBC 用户有权在目标 table 中创建和编辑记录,并且容器字段设置为也允许这样做。
这是一个完全在黑暗中拍摄的照片,但请尝试更改
cur.execute("insert into testContainer (cont) values (PutAs(?, 'JPEG'))", pyodbc.Binary(data))
至
cur.execute("insert into testContainer (PutAs(cont,'JPEG')) values (?))", pyodbc.Binary(data))
在 filemaker jdbc/odbc 指南中明确指出它能够通过 JDBC(第 33 页)处理 clob 类型。对于 ODBC,我无法在文档中找到它,所以我想这是 FileMaker ODBC 接口的一个缺点。 我现在使用 JDBC 并且有效。