Re: [Zope-DB] Zope/Plone, interbase, and blob fields
Thanks again for your post, and my sincere apologies for the delay in writing (I've been off and then had to sort out some other stuff which required all of my limited attention!). Thanks also to the off-list help from David Rushby. His advice which sort of worked was basically: Using a database interface that allows you to take advantage of prepared statements and bound parameters, as in: cur.execute(update table_1 set blob_field_1 = ? where other_field_1 = ?, ('blob string value', 'other field value')) This was a slightly different python syntax to that which I was using, and seems to work - but only when using it straight from Python. I can run this absolutely fine (even using gvib!) from the python instance in the Plone installation (Plone\Python\python.exe). There are absolutely no errors, and it updates the field. However, copying the function almost exactly (just inserting a self parameter before the two notes/key parameters .. or even trying it without) does not work. When I call this function, Plone freezes - no errors, nothing, just everything freezes up (there's nothing I can see in the log files apart from it calling the page). I don't know if this is of any significance, but when this happens, for any calls to a page served by Plone, the browser tries to open the page, but nothing happens, no page not found errors, etc, it just keeps trying. Once Plone has been stopped, then the page not found appears. I doubt its of any use, but you can't have too much info!! Anyway, the function in the external method is: def updateEntityNotes(self,notes,entKey): try: dbCon = gvib.connect(theDB, userName, userPass) cur=dbCon.cursor() cur.execute(UPDATE ENTITY SET EN_NOTES=? WHERE EN_KEY=?,(notes,int(entKey))) dbCon.commit() return 'ok' except: return 'bError:/b Sorry, your request could not be processed correctly.br '+str(traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback)) And it is called with a dtml-let call (so the result can be used): dtml-let err=updateEntityNotes(theNotes,theKey) (theNotes and theKey have already been subject to calls to be str() and int() respectively). I just tested the interface to this from Plone, removing any database access at all, and just returning a random statement, and it works fine. So Plone is accessing the external method, there are no imported functions used that aren't used in other external methods, so it just seems to be executing the cur.execute() statement. Without the dbCon.commit(), Plone still crashes. Can anyone tell me why the actual python instance that came with Plone can do this fine, but Plone itself can't? Kind regards, and thanks once again to everyone who has helped me. Ashley - Original Message - From: bobb [EMAIL PROTECTED] To: Ashley Lloyd [EMAIL PROTECTED]; zope-db@zope.org Sent: Friday, August 05, 2005 6:39 PM Subject: Re: [Zope-DB] Zope/Plone, interbase, and blob fields - Original Message - From: Ashley Lloyd [EMAIL PROTECTED] To: zope-db@zope.org Sent: Friday, August 05, 2005 6:55 AM Subject: [Zope-DB] Zope/Plone, interbase, and blob fields Apologies if this appears twice - I initially sent from the wrong address!! Hi, I've been having trouble updating BLOB (subtype text) fields from Zope. I've a table with several fields, one of which is a blob. Creating a record works fine, but when I attempt to update a record, I get an error. Initially I used gvib, but recently (thanks to a lot of help from another list) I changed to kinterbasdbDA, and I still get errors. The errors I get are as follows: Error Type ProgrammingError Error Value (-413, 'execute.isc_dsql_execute: conversion error from string BLOB. ') Error Trace Traceback (most recent call last): File C:\Program Files\ESOPPlone\Zope\lib\python\DocumentTemplate\DT_Try.py, line 149, in render_try_except result = render_blocks(self.section, md) File C:\Program Files\ESOPPlone\Zope\lib\python\DocumentTemplate\DT_Util.py, line 201, in eval return eval(code, d) File , line 2, in f File C:\Program Files\ESOPPlone\Zope\lib\python\Shared\DC\ZRDB\DA.py, line 428, in __call__ else: result=DB__.query(query, self.max_rows_) File C:\Program Files\ESOPPlone\Zope\lib\python\Products\kinterbasdbDA\db.py, line 198, in query self.cursor.execute(src) File C:\Program Files\ESOPPlone\Zope\lib\python\Products\kinterbasdbDA\kinterbasdb\__init__. py, line 585, in execute res = _kinterbasdb.execute(self._C_cursor, sql, params) ProgrammingError: (-413, 'execute.isc_dsql_execute: conversion error from string BLOB. ') I also get a similar error (same value type) when just testing the SQL method in the ZMI, even when the SQL that the method generates is just: UPDATE ENTITY SET EN_NOTES = 'Hello world' WHERE EN_KEY = 12 The metatata of the table has the notes field definition as: EN_NOTES BLOB SUB_TYPE 1 SEGMENT SIZE 80, Maybe you
Re: [Zope] RE: Blobs in Interbase
Bob, you're a star! I unpacked it, restarted Zope, and there it was! Marvellous, I've now got a kinterbase installed that works. Thats the good news. The bad news is I still can't update the blob field - I still get errors. I think, unless anyone here has any more ideas, I'll have to go and bother people in another mailing list. I've tried absolutely everything I can think of - sqlvar tags of type string and nb, trying cast(... as blob) in the sql (doesn't seem to work), I've even just tried setting it to 'Hello world', without using any dtml variables at all, and it won't accept it. From what I've read elsewhere, there are tools in some software (mostly for Delphi I believe), that will allow updates of text blob fields, so I was hoping that kinterbasdb had something in it as well, but if it does, it isn't working on mine!! The interbase version is 6.0-6.1, if that jogs any memories for anyone. Thanks once again to everyone who has tried to help me. Kind regards Ashley Ashley Lloyd wrote: Hi Bob, If you don't mind doing that, I'd really appreciate it. Nothing I seem to be trying to install at the moment seems to be working. As with Phil, mine is from a Plone install, but I have got other versions of Python elsewhere, (I think there's even an old Zope standalone instance still lurking somewhere, altho I don't think it can run) just to confuse matters. Anyway, my Zope is even older - 2.6.1, so hopefully it'll be compatible. Thanks very much again for your help. Ashley - Original Message - From: "Bob Corriher" [EMAIL PROTECTED] To: [EMAIL PROTECTED] Cc: "Ashley Lloyd" [EMAIL PROTECTED]; zope@zope.org Sent: Tuesday, August 02, 2005 4:01 PM Subject: Re: [Zope] RE: Blobs in Interbase Hi Phil Ashley, I also have kinterbasedbDA working on Windows. It is with an older version of Zope (2.6.4). The DA version is 1.1.1.1. The kinterbasdb version is 3.0.1. It uses a dll called _kinterbasedb.dll, instead of a pyd. I don't remember the exact installation process anymore, but I think I just grabbed it from another working site. If you like, I could zip it up and send it to you. The site uses blobs (all sub_type text) in many places, so maybe older/other versions don't support this as well. Bob Corriher CTO P-Wave Inc. Philip Kilner wrote: Hi Ashley, Can't help you on the blob front... Ashley Lloyd wrote: I've had trouble installing kinterbase (it complains about LDAP..?), so at the moment I use gvib. I've pencilled in quite a bit of time today to try to get kinterbase installed. Unfortunately I'm on Windows, which I'm guessing contributes to the installation problems! ...but I can confirm that KIinterbaseDA works nicely on Windows - I've been happily using it for some time, and haven't had any issues at all (BTW, I don't use LDAP and KInterbaseDA has never mentioned it!). The only problem I had at install time was getting my head around the distinction between the Python part and the Zope DA part. HTH -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.338 / Virus Database: 267.9.8/61 - Release Date: 8/1/2005 No virus found in this outgoing message.Checked by AVG Anti-Virus.Version: 7.0.338 / Virus Database: 267.9.8/61 - Release Date: 8/1/2005 ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
[Zope] RE: Blobs in Interbase
Hi Bob, Thanks again for your reply. I've tried this approach before, so I'm thinking perhaps its my db adaptor. Which one are you using, if you don't mind me asking? I've had trouble installing kinterbase (it complains about LDAP..?), so at the moment I use gvib. I've pencilled in quite a bit of time today to try to get kinterbase installed. Unfortunately I'm on Windows, which I'm guessing contributes to the installation problems! Thanks once again for your help and your time. If this doesn't work, I'll look for the Zope-DB list, and basically go and bother someone else. Cheers Ashley From: Bob Corriher [EMAIL PROTECTED] To: CC: [EMAIL PROTECTED] Subject: Blobs in Interbase Date: Mon, 01 Aug 2005 12:23:55 -0400 Hi Ashely, I use Interbase (and Firebird) in Zope regularly and I just use the regular ZSQL Method syntax for blob fields: dtml-sqlvar name=blob_fld type=nb to update the field.If the field may be left null, I usually use something like this in the ZSQL Method: dtml-if blob_fld dtml-sqlvar name=blob_fld type=nb dtml-else null /dtml-if Apply commas at the end (or beginning) of the dtml-sqlvar and null if necessary. This should work for Interbase from version 4.x thru Interbase 6.x and for all versions of Firebird. If you need further help, just email me (and the list). Also, there is a Zope-DB list for discussing Zope and RDBMS issues and the real gurus hang out there. HTH Bob Corriher CTO P-Wave Inc. Ashley wrote: Hi bobb, thanks for your reply. If I found the right post (reading an image from blob in mysql and displaying it), then thanks very much but I don't think it'll apply too much to my situation. I can retrieve the contents of the blob field fine, its updating it that causes the problems. Thanks again, though. I posted directly out of Outlook Express, by the way, just hitting New Post. Kind regards Ashley bobb [EMAIL PROTECTED] wrote in message news:[EMAIL PROTECTED] I posted some stuff I was doing some time ago w/ mysql / blobs and zope some time ago so that my grandchildren could google for it :)... if you goggle for zope mysql blob bobb you'll get it. It's not interbase. hth bobb Also, your post came through as a newsgroup posting, which means I had to cut / paste / finagle the whole thing to reply... It's the first time I've ever seen that (I use m$ outlook express) How are you posting to here? (curious, that's all) Ashley [EMAIL PROTECTED] wrote in message news:[EMAIL PROTECTED] I'm not sure if this is the right place for this, if not, my apologies. I've got a Clients table in an interbase db with various fields, one of which is a BLOB field (subtype text), used to maintain some notes. When inserting a Client into the table, this field populates fine. However, when attempting to update the client, for some reason, it won't. It just will not allow me to do an update with the notes field in the statement. I've googled around, and found lots of bits helping with Delphi, and lots of statements that BLOB fields in Interbase are tricky to update, but nothing that helps. Has anyone out there found a way around this? I'm using currently using gvib as my database adaptor, as kinterbase does not seem to want to install at all (seemingly problems with ldap ..). My Zope instance is installed from a Plone installer. Zope Version (Zope 2.6.1 (binary release, python 2.1, win32-x86), python 2.1.3, win32) Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] System Platform win32 Thanks in advance Ashley ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev ) ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev ) -- -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.338 / Virus Database: 267.9.7/60 - Release Date: 7/28/2005 ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] RE: Blobs in Interbase
Hi Phil, Thanks for your email. The LDAP error, as it turns out, was from zkinterbasdb or something like that - something I probably picked up thinking it was kinterbase. Forgive my ignorance, but what was your procedure for installing kinterbase? I've tried just installing kinterbasDA, which required kinterbasdb. So I've tried installing kinterbasdb (from an executable, rather than the more familiar simple compressed file), but I keep getting an ImportError: DLL load failed when looking at the product in Control_Panel/Products. The error refers to a line import _kinterbasdb as _k. I've assumed that its referring to import _kinterbasdb.pyd, rather than a dll, as thats all that I can find. I've tried copying it into several places, but I'm assuming that its compiled by the exe at install time, and is specific to the folder its placed in. Or I could be completely wrong! Any hints as to your procedure would be appreciated, as this is getting frustrating (probably meaning I'm missing stupid things). Thanks Ashley - Original Message - From: Philip Kilner [EMAIL PROTECTED] To: Ashley Lloyd [EMAIL PROTECTED] Cc: [EMAIL PROTECTED]; zope@zope.org Sent: Tuesday, August 02, 2005 11:14 AM Subject: Re: [Zope] RE: Blobs in Interbase Hi Ashley, Can't help you on the blob front... Ashley Lloyd wrote: I've had trouble installing kinterbase (it complains about LDAP..?), so at the moment I use gvib. I've pencilled in quite a bit of time today to try to get kinterbase installed. Unfortunately I'm on Windows, which I'm guessing contributes to the installation problems! ...but I can confirm that KIinterbaseDA works nicely on Windows - I've been happily using it for some time, and haven't had any issues at all (BTW, I don't use LDAP and KInterbaseDA has never mentioned it!). The only problem I had at install time was getting my head around the distinction between the Python part and the Zope DA part. HTH -- Regards, PhilK Email: [EMAIL PROTECTED] PGP Public key: http://www.xfr.co.uk Voicemail Facsimile: 07092 070518 You'll find that one part's sweet and one part's tart: say where the sweetness and the sourness start. - Tony Harrison ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )
Re: [Zope] RE: Blobs in Interbase
Hi Bob, If you don't mind doing that, I'd really appreciate it. Nothing I seem to be trying to install at the moment seems to be working. As with Phil, mine is from a Plone install, but I have got other versions of Python elsewhere, (I think there's even an old Zope standalone instance still lurking somewhere, altho I don't think it can run) just to confuse matters. Anyway, my Zope is even older - 2.6.1, so hopefully it'll be compatible. Thanks very much again for your help. Ashley - Original Message - From: Bob Corriher [EMAIL PROTECTED] To: [EMAIL PROTECTED] Cc: Ashley Lloyd [EMAIL PROTECTED]; zope@zope.org Sent: Tuesday, August 02, 2005 4:01 PM Subject: Re: [Zope] RE: Blobs in Interbase Hi Phil Ashley, I also have kinterbasedbDA working on Windows. It is with an older version of Zope (2.6.4). The DA version is 1.1.1.1. The kinterbasdb version is 3.0.1. It uses a dll called _kinterbasedb.dll, instead of a .pyd. I don't remember the exact installation process anymore, but I think I just grabbed it from another working site. If you like, I could zip it up and send it to you. The site uses blobs (all sub_type text) in many places, so maybe older/other versions don't support this as well. Bob Corriher CTO P-Wave Inc. Philip Kilner wrote: Hi Ashley, Can't help you on the blob front... Ashley Lloyd wrote: I've had trouble installing kinterbase (it complains about LDAP..?), so at the moment I use gvib. I've pencilled in quite a bit of time today to try to get kinterbase installed. Unfortunately I'm on Windows, which I'm guessing contributes to the installation problems! ...but I can confirm that KIinterbaseDA works nicely on Windows - I've been happily using it for some time, and haven't had any issues at all (BTW, I don't use LDAP and KInterbaseDA has never mentioned it!). The only problem I had at install time was getting my head around the distinction between the Python part and the Zope DA part. HTH -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.338 / Virus Database: 267.9.8/61 - Release Date: 8/1/2005 ___ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )