Python 2.4
Windows XP SP2
MS Access 2000
mx.ODBC 2.0.7
Problem data truncation occuring (here's the actual error message):
mxODBC.Warning: ('01004', 5, '[Microsoft][ODBC Microsoft Access Driver]
String data, right truncated on column number 3 (Expr1002)', 3326)
I believe that have found a bug in mx.ODBC not properly assigning the
correct data type to a column.
Here is a sample script that demonstrates the problem and why I think it is
being handled incorrectly:
# NOTE memo1 and memo2 are memo fields in the test_table
import mx.ODBC.Windows
dbs = mx.ODBC.Windows.connect('database', '', '')
sql = "select memo1, memo2, memo1 & ' ' & memo2 from test_table where
record_id = 1"
c = dbs.cursor()
c.execute(sql)
print
print 'mxODBC SQL DataTypes:'
print
for i in mx.ODBC.Windows.sqltype:
print i, mx.ODBC.Windows.sqltype[i]
print
print 'Column DataTypes:'
print
for i in range(len(c.description)):
print c.description[i][1]
c.close()
dbs.close()
When you run this script it produces the following output:
mxODBC SQL DataTypes:
1 CHAR
2 NUMERIC
3 DECIMAL
4 INTEGER
5 SMALLINT
6 FLOAT
7 REAL
8 DOUBLE
9 DATE
10 TIME
11 TIMESTAMP
12 VARCHAR
91 TYPE_DATE
92 TYPE_TIME
93 TYPE_TIMESTAMP
-1 LONGVARCHAR
-10 WCHAR_LONGVARCHAR
-9 WCHAR_VARCHAR
-8 WCHAR
-7 BIT
-6 TINYINT
-5 BIGINT
-4 LONGVARBINARY
-3 VARBINARY
-2 BINARY
Column DataTypes:
-1
-1
12
From the output you can see that memo1 and memo2 are both determined to be
of type longvarchar (-1) but when the columns are concatenated together the
resulting column is given a type of varchar (12). Obviously this is why the
data truncation is occurring.
Is this a known problem?
I can work around the problem using a converter function:
def converter(position, sqltype, sqllen):
print 'in :', position, sqltype, sqllen
if position == 2:
sqltype = -1
sqllen = 1073741823
print 'out:', position, sqltype, sqllen
return sqltype, sqllen
and then using:
c.setconverter(converter)
but shouldn't mx.ODBC have properly assigned the correct sqltype and sqllen
for the concatenated memo columns in the first place? 3 1781
Joe wrote: Python 2.4 Windows XP SP2 MS Access 2000 mx.ODBC 2.0.7
Problem data truncation occuring (here's the actual error message):
mxODBC.Warning: ('01004', 5, '[Microsoft][ODBC Microsoft Access Driver] String data, right truncated on column number 3 (Expr1002)', 3326)
I believe that have found a bug in mx.ODBC not properly assigning the correct data type to a column.
Here is a sample script that demonstrates the problem and why I think it is being handled incorrectly:
# NOTE memo1 and memo2 are memo fields in the test_table
import mx.ODBC.Windows
dbs = mx.ODBC.Windows.connect('database', '', '')
sql = "select memo1, memo2, memo1 & ' ' & memo2 from test_table where record_id = 1"
c = dbs.cursor()
c.execute(sql)
print print 'mxODBC SQL DataTypes:' print
for i in mx.ODBC.Windows.sqltype: print i, mx.ODBC.Windows.sqltype[i]
print print 'Column DataTypes:' print
for i in range(len(c.description)): print c.description[i][1]
c.close() dbs.close()
When you run this script it produces the following output:
mxODBC SQL DataTypes:
1 CHAR 2 NUMERIC 3 DECIMAL 4 INTEGER 5 SMALLINT 6 FLOAT 7 REAL 8 DOUBLE 9 DATE 10 TIME 11 TIMESTAMP 12 VARCHAR 91 TYPE_DATE 92 TYPE_TIME 93 TYPE_TIMESTAMP -1 LONGVARCHAR -10 WCHAR_LONGVARCHAR -9 WCHAR_VARCHAR -8 WCHAR -7 BIT -6 TINYINT -5 BIGINT -4 LONGVARBINARY -3 VARBINARY -2 BINARY
Column DataTypes:
-1 -1 12
From the output you can see that memo1 and memo2 are both determined to be of type longvarchar (-1) but when the columns are concatenated together the resulting column is given a type of varchar (12). Obviously this is why the data truncation is occurring.
Is this a known problem?
I can work around the problem using a converter function:
def converter(position, sqltype, sqllen): print 'in :', position, sqltype, sqllen if position == 2: sqltype = -1 sqllen = 1073741823 print 'out:', position, sqltype, sqllen return sqltype, sqllen
and then using:
c.setconverter(converter)
but shouldn't mx.ODBC have properly assigned the correct sqltype and sqllen for the concatenated memo columns in the first place?
This is a very nice piece of deduction, and I am copying this message to
you and to the egenix-users list, since that's generally a reliable way
to get Marc-Andre's attention.
I'm not convinced that it demonstrates an mxODBC bug, since I don't
believe that the ampersand is actioned by the drivers, but I'm not the
best one to be authoritative about this.
others-who-read-this-reply-will-ly y'rs - steve
--
Meet the Python developers and your c.l.py favorites March 23-25
Come to PyCon DC 2005 http://www.pycon.org/
Steve Holden http://www.holdenweb.com/
Thanks for forwarding the message, Steve.
Steve Holden wrote: Joe wrote:
Python 2.4 Windows XP SP2 MS Access 2000 mx.ODBC 2.0.7
Problem data truncation occuring (here's the actual error message):
mxODBC.Warning: ('01004', 5, '[Microsoft][ODBC Microsoft Access Driver] String data, right truncated on column number 3 (Expr1002)', 3326)
I believe that have found a bug in mx.ODBC not properly assigning the correct data type to a column.
Here is a sample script that demonstrates the problem and why I think it is being handled incorrectly:
# NOTE memo1 and memo2 are memo fields in the test_table
import mx.ODBC.Windows
dbs = mx.ODBC.Windows.connect('database', '', '')
sql = "select memo1, memo2, memo1 & ' ' & memo2 from test_table where record_id = 1"
c = dbs.cursor()
c.execute(sql)
print print 'mxODBC SQL DataTypes:' print
for i in mx.ODBC.Windows.sqltype: print i, mx.ODBC.Windows.sqltype[i]
print print 'Column DataTypes:' print
for i in range(len(c.description)): print c.description[i][1]
c.close() dbs.close()
When you run this script it produces the following output:
mxODBC SQL DataTypes:
1 CHAR 2 NUMERIC 3 DECIMAL 4 INTEGER 5 SMALLINT 6 FLOAT 7 REAL 8 DOUBLE 9 DATE 10 TIME 11 TIMESTAMP 12 VARCHAR 91 TYPE_DATE 92 TYPE_TIME 93 TYPE_TIMESTAMP -1 LONGVARCHAR -10 WCHAR_LONGVARCHAR -9 WCHAR_VARCHAR -8 WCHAR -7 BIT -6 TINYINT -5 BIGINT -4 LONGVARBINARY -3 VARBINARY -2 BINARY
Column DataTypes:
-1 -1 12
From the output you can see that memo1 and memo2 are both determined to be of type longvarchar (-1) but when the columns are concatenated together the resulting column is given a type of varchar (12). Obviously this is why the data truncation is occurring.
Is this a known problem?
No, but then the MS Access ODBC drivers are always full of
surprises :-) (things have gotten a lot better recently, though). I can work around the problem using a converter function:
def converter(position, sqltype, sqllen): print 'in :', position, sqltype, sqllen if position == 2: sqltype = -1 sqllen = 1073741823 print 'out:', position, sqltype, sqllen return sqltype, sqllen
and then using:
c.setconverter(converter)
but shouldn't mx.ODBC have properly assigned the correct sqltype and sqllen for the concatenated memo columns in the first place?
mxODBC gets the select column information from the ODBC driver
and then fetches the data rows based on that information.
In the above case, the Access ODBC driver tells mxODBC that
the third column is of type VARCHAR and passes it some
length information that obviously is wrong.
The only way to fix this is using a converter like you did.
BTW, do you have more info on the length of the memo field
contents and the value that Access passes back as sqllen
for the third column ?
It is possible that this is some off-by-one bug in the driver.
We could work around that by creating a larger buffer to
hold the data.
This is a very nice piece of deduction, and I am copying this message to you and to the egenix-users list, since that's generally a reliable way to get Marc-Andre's attention.
Indeed :-) (don't read c.l.p that often these days)
I'm not convinced that it demonstrates an mxODBC bug, since I don't believe that the ampersand is actioned by the drivers, but I'm not the best one to be authoritative about this.
others-who-read-this-reply-will-ly y'rs - steve
--
Marc-Andre Lemburg
eGenix.com
Professional Python Services directly from the Source (#1, Mar 03 2005) Python/Zope Consulting and Support ... http://www.egenix.com/ mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/
__________________________________________________ ______________________
::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! ::::
Hi Steve,
Thanks, I find you get much better help when you provide the details needed
for your case instead of expecting others to invest alot of their time
before you did your homework.
Thanks for sending it over to Marc. Last time I found a bug in the mx stuff
(YEARS AGO) I sent it directly to Marc but was trying not to bother him
until I tried the list first.
One point I forgot to mention in the previous reply is that AFTER the
converter function is setup and used if you examine the
cursor.description[column][1] values it still has the old sqltype and
sqllen. Not sure if that would be considered a bug or not? I would have
expected that the converter hook would have also modified the description
info to match what the converter hook did.
Thanks again for your assistance.
Regards,
Joe This is a very nice piece of deduction, and I am copying this message to you and to the egenix-users list, since that's generally a reliable way to get Marc-Andre's attention.
I'm not convinced that it demonstrates an mxODBC bug, since I don't believe that the ampersand is actioned by the drivers, but I'm not the best one to be authoritative about this.
others-who-read-this-reply-will-ly y'rs - steve -- Meet the Python developers and your c.l.py favorites March 23-25 Come to PyCon DC 2005 http://www.pycon.org/ Steve Holden http://www.holdenweb.com/ This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Marco Aschwanden |
last post by:
Hi
- Win2000
- Python 2.3.3
- py2exe 0.5.0
- eGenix Comercial & Base Package
I am developing an app using mxODBC. On the home page they say
...
|
by: Wolfgang Kaml |
last post by:
Hello All,
I have been working on this for almost a week now and I haven't anything up
my sleeves anymore that I could test in addition or change....
Since I am not sure, if this is a Windows...
|
by: Kong Li |
last post by:
Follow up to this thread, the latest Oracle 9i release 2 patchset
(9.2.0.5) fixed the handle count leak problem. The problem is in
Oracle client component.
Thanks.
Kong
-----
From: Kong...
|
by: Andreas Lauffer |
last post by:
I changed from Access97 to AccessXP and I have immense performance
problems.
Details:
- Access XP MDB with Jet 4.0 ( no ADP-Project )
- Linked Tables to SQL-Server 2000 over ODBC
I used...
|
by: Roger Redford |
last post by:
Dear Experts,
I'm attempting to marry a system to an Oracle 817 datbase.
Oracle is my specialty, the back end mainly, so I don't
know much about java or javascript.
The system uses javascript...
|
by: Andreas Lauffer |
last post by:
Can anyone tell me advantages / disadvantages of DataDirect Server
Wire ODBC-driver?
Any experiences?
What about redistribution?
Andreas Lauffer, easySoft. GmbH, Germany
|
by: Lauren Quantrell |
last post by:
Maybe a dumb question - I'm new to ODBC. How do I install an Access
..mde file on a user's workstation and create the ODBC connection to
the backend SQL Server database without having to go through...
|
by: Alec |
last post by:
Hi All,
I am currently trying to link in Access 97 to a table in a MSSQL 7
server. Initially the link is fine, however, when I close the access
database and re-open it from the same network...
|
by: Crazy Cat |
last post by:
Hi all,
I am having trouble getting linked Oracle 9 server in MS SQL Server
2005 Express to work properly. My machine is running Windows XP.
The Microsoft and Oracle OLE DB Providers have...
|
by: bazzer |
last post by:
hey,
im trying to access a microsoft access database from an ASP.NET web
application in visual basic 2003.NET. i get the following error when i
try running it:
Server Error in...
|
by: Rina0 |
last post by:
Cybersecurity engineering is a specialized field that focuses on the design, development, and implementation of systems, processes, and technologies that protect against cyber threats and...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 2 August 2023 starting at 18:00 UK time (6PM UTC+1) and finishing at about 19:15 (7.15PM)
The start time is equivalent to 19:00 (7PM) in Central...
|
by: erikbower65 |
last post by:
Using CodiumAI's pr-agent is simple and powerful. Follow these steps:
1. Install CodiumAI CLI: Ensure Node.js is installed, then run 'npm install -g codiumai' in the terminal.
2. Connect to...
|
by: erikbower65 |
last post by:
Here's a concise step-by-step guide for manually installing IntelliJ IDEA:
1. Download: Visit the official JetBrains website and download the IntelliJ IDEA Community or Ultimate edition based on...
|
by: Taofi |
last post by:
I try to insert a new record but the error message says the number of query names and destination fields are not the same
This are my field names
ID, Budgeted, Actual, Status and Differences
...
|
by: lllomh |
last post by:
Define the method first
this.state = {
buttonBackgroundColor: 'green',
isBlinking: false, // A new status is added to identify whether the button is blinking or not
}
autoStart=()=>{
|
by: lllomh |
last post by:
How does React native implement an English player?
|
by: Mushico |
last post by:
How to calculate date of retirement from date of birth
|
by: DJRhino |
last post by:
Was curious if anyone else was having this same issue or not....
I was just Up/Down graded to windows 11 and now my access combo boxes are not acting right. With win 10 I could start typing...
| |