Following the discussion of ZClasses vs Products earlie this year I decided to convert some of my ZClass utilities to real Products, and I have run into an early problem. Im developing with Zope 2.7.3 and MySQL 3.23 but don't think the versions are particularly relevant. The database connection works fine - I used the Connection Test tab to create the table I need and make an initial entry. I want to get some information from the database during the instanciation sequence. I have Googled for hours, looked at other Products and looked at the source code for ZSQLMethods and DB and lots of other things, and I am stuck. This is where I have got to: I have a dtml form that lists available connections for the user to select from. That passes a connection id to a second form. In the second form I have a bit of dtml: <dtml-in expr="getFilters(connection_id)"> <dtml-var Filter> [just a list at this stage] <dtml-in> In the product I have tried this: def getFilters(self, connection_id): return SQL('getFilterSQL', 'Get Filter List', connection_id, '', _getFiltersSQL) where _getFiltersSQL=""" select Filter from Table group by Filter order by Filter """ [just the table name at this stage - no parameters] (which I think creates an SQL object) It gives me this (partial) traceback on submission of Form 2: * Module App.special_dtml, line 175, in _exec * Module DocumentTemplate.DT_In, line 685, in renderwob * Module Shared.DC.ZRDB.DA, line 492, in __getitem__ * Module Shared.DC.ZRDB.Aqueduct, line 313, in __getitem__ KeyError: 0 (Also, an error occurred while attempting to render the standard error message.) and I have tried this: def getFilters(self, connection_id): return SQL('getFilterSQL', 'Get Filter List', connection_id, '', _getFiltersSQL)() (which I think calls the SQL object) It gives me this output: The database connection MySQL_database_connection cannot be found. (Also, an error occurred while attempting to render the standard error message.) and I have tried this: def getFilters(self, connection_id): connection = getattr(self, connection_id) return connection().query(_getFiltersSQL) (which I think calls a method of the Connection object) I know that this returns ([{'width': 6, 'null': 1, 'type': 't', 'name': 'Filter'}], (('Public',),)) but the dtml-in loop does not produce anything. [Public is one of the Filters, nothing to do with Zope] I would be grateful if anybody can tell me the best way to read from (and write to) the database before the Product is installed, or point me to good documentation or an example Product. Cliff