From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,7179b046d1b6799f X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 2003-12-21 12:32:44 PST Path: archiver1.google.com!news2.google.com!news.maxwell.syr.edu!small1.nntp.aus1.giganews.com!border1.nntp.aus1.giganews.com!intern1.nntp.aus1.giganews.com!nntp.giganews.com!nntp.comcast.com!news.comcast.com.POSTED!not-for-mail NNTP-Posting-Date: Sun, 21 Dec 2003 14:32:43 -0600 Date: Sun, 21 Dec 2003 15:32:41 -0500 From: "Robert I. Eachus" User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax) X-Accept-Language: en-us, en MIME-Version: 1.0 Newsgroups: comp.lang.ada Subject: Re: GNADE insert problem References: In-Reply-To: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Message-ID: NNTP-Posting-Host: 24.34.214.193 X-Trace: sv3-iyATvFt7dliTPAOdmrhpoFEX/3EozNoO/ZchExfnPU9HOsZ/idFYaSk+zyATlvx2tRRAfuYQpKHKg5T!b/pQwS+Sc47nYLJ0qlvTan4NpBFAuQPvfkrA0ip9lfRT6BWg8Aw7eOfutVw+BQ== X-Complaints-To: abuse@comcast.net X-DMCA-Complaints-To: dmca@comcast.net X-Abuse-and-DMCA-Info: Please be sure to forward a copy of ALL headers X-Abuse-and-DMCA-Info: Otherwise we will be unable to process your complaint properly X-Postfilter: 1.1 Xref: archiver1.google.com comp.lang.ada:3677 Date: 2003-12-21T15:32:41-05:00 List-Id: Jano wrote: > Just for the record, connecting from the same tasks makes no difference. I meant it when I said thread I meant execution thread, not thread of control. Maybe I should have spelled it out. Threads of control are usually mapped to different tasks in Ada, but there can be execution threads in a program that are NOT visible as tasks or otherwise. Typically you will create an execution thread in a database when you log in, and close it by logging out. But for example when you type SQL in a terminal session, each query is a separate execution thread. What makes cursor control so painful is that to find where where a cursor is created or set you have to look below the user visible Ada and SQL levels. Once you know which actions create cursors, you then have to find out where cursors are used and where the cursor that is used is expected to be found. The error message you are getting could come either from a thread that does not create a thread but expects an implicit cursor to be passed to it, or it could be that another action in that thread is leaving the implicit cursor locked. Without the software in front of me, I can't tell you what is happening, just to read the documentation--assuming you have decent documentation--or the source code and mark all the places where cursors are created, set, locked, and PASSED to other programs/subprograms/threads. When you have an Ada program that can have several active execution threads--and cursors in the database, you will still often have only one or two Ada tasks. (I typically have one task interacting with a user at a keyboard and display, and one task spawning queries, although sometimes I will have additional tasks for doing formatting of data returned. But the mapping I use is cusor <---> query, not cusor <---> Ada task. -- Robert I. Eachus "The war on terror is a different kind of war, waged capture by capture, cell by cell, and victory by victory. Our security is assured by our perseverance and by our sure belief in the success of liberty." -- George W. Bush