Login ProductsSalesSupportDownloadsAbout |
Home » Technical Support » DBISAM Technical Support » Support Forums » DBISAM General » View Thread |
Messages 1 to 10 of 18 total |
Database full error 9480 |
Thu, Apr 27 2006 2:15 PM | Permanent Link |
Roy Lambert NLH Associates Team Elevate | I've run into this error. Why I'm not sure. AddImages is run as part of a routine which is going to convert stuff from one format to another, there's about 25k records in the table to be converted, not all of them will have images.Roughly 83% of the way through I get the error which presumably means I've created more than 4096 tables in memory. The problem is for all of the tables I create I also zap em, or at least I thought I was. Can anyone suggest what's going on, and preferably a solution.
procedure AddImages; var ePics: TDBISAMTable; begin if not eMail.FieldByName('_InLine').IsNull then begin Pics := Encoded.AddPartMultipart('related', MimePart); ePics := MakeDBISAMTable(MakeImgAttMemTable('enc', 'I', Session), 'Memory', Session);<<<<<<<<<<<< table created here StreamMemoToTable('_InLine', eMail, ePics); ePics.First; while not ePics.Eof do begin ms := TMemoryStream.Create; TMemoField(ePics.FieldByName('_Item')).SaveToStream(ms); Encoded.AddPartHTMLBinary(ms, ExtractFileName(ePics.FieldByName('_Name').AsString), ePics.FieldByName('_CID').AsString, Pics); ms.Free; ePics.Next; end; ZapInMemoryTable(ePics);<<<<<<<<<<<< table removed here - or so I thought end; end; procedure ZapInMemoryTable(WhichTable: TDBISAMTable); begin try if Assigned(WhichTable) and WhichTable.Exists then begin WhichTable.DisableControls; WhichTable.Close; WhichTable.Exclusive := True; if not (WhichTable.Bof and WhichTable.Eof) then WhichTable.EmptyTable; WhichTable.DeleteTable; FreeAndNil(WhichTable); end; except // MessageDlg('Problem experienced deleteing memory table: ' + #13 + WhichTable.Name + #13 + WhichTable.TableName, mtError, [mbOK], 0); end; end; Roy Lambert |
Fri, Apr 28 2006 7:58 AM | Permanent Link |
Roy Lambert NLH Associates Team Elevate | Tim
I've been doing some more investigating. I added a TRichEdit control on the form and went Session.GetTableNames('memory', richedit1.Lines); After the encode operation. All I'm shown are the three memory tables that are created/freed with the form. To me that translates as I'm getting rid of them, however, when the count of creating/freeing the temporary in memory tables reaches the magic 4096 it blows up. I can work around it for the data conversion, but I'm getting worried about if I am freeing the tables properly or what. Roy Lambert |
Fri, Apr 28 2006 4:00 PM | Permanent Link |
Tim Young [Elevate Software] Elevate Software, Inc. timyoung@elevatesoft.com | Roy,
<< After the encode operation. All I'm shown are the three memory tables that are created/freed with the form. To me that translates as I'm getting rid of them, however, when the count of creating/freeing the temporary in memory tables reaches the magic 4096 it blows up. I can work around it for the data conversion, but I'm getting worried about if I am freeing the tables properly or what. >> Make sure that you open the temporary tables exclusively. That will prevent them from being thrown into the in-memory lock file and will allow you to create more than 4096 of them. -- Tim Young Elevate Software www.elevatesoft.com |
Sat, Apr 29 2006 6:32 AM | Permanent Link |
Roy Lambert NLH Associates Team Elevate | Tim
>Make sure that you open the temporary tables exclusively. That will prevent >them from being thrown into the in-memory lock file and will allow you to >create more than 4096 of them. OK, where I can I'll do that. It'll be no problem for ones created in a thread. At what point are they removed from the lock file? I would have thought deleting the table would be a good point. Roy Lambert |
Mon, May 1 2006 2:38 PM | Permanent Link |
Tim Young [Elevate Software] Elevate Software, Inc. timyoung@elevatesoft.com | Roy,
<< OK, where I can I'll do that. It'll be no problem for ones created in a thread. At what point are they removed from the lock file? I would have thought deleting the table would be a good point. >> It can't delete them from the lock file because it can't disturb the ordering of the "slots" used by each table. -- Tim Young Elevate Software www.elevatesoft.com |
Tue, May 2 2006 3:28 AM | Permanent Link |
Roy Lambert NLH Associates Team Elevate | Tim
I'd forgotten you used an offset (or whatever) to get the table/lock information, should have remembered that from previous postings. When does the exclusive flag have to be set eg table create table open table close table exclusive table open What would happen to locks with that sequence? Roy Lambert |
Tue, May 2 2006 1:50 PM | Permanent Link |
Tim Young [Elevate Software] Elevate Software, Inc. timyoung@elevatesoft.com | Roy,
<< When does the exclusive flag have to be set eg >> Open and create both, however a CreateTable automatically uses the Exclusive flag so that you don't have to. << table create table open table close table exclusive table open What would happen to locks with that sequence? >> That would cause a slot to be consumed in the lock file due to the first non-exclusive open. -- Tim Young Elevate Software www.elevatesoft.com |
Wed, May 3 2006 2:53 AM | Permanent Link |
Roy Lambert NLH Associates Team Elevate | Tim
That's about what I thought. Next question - when are slots in the lock file released? Is it possible over several months of creating/freeing memory tables with different names to fill it up? Roy Lambert |
Wed, May 3 2006 11:55 AM | Permanent Link |
Tim Young [Elevate Software] Elevate Software, Inc. timyoung@elevatesoft.com | Roy,
<< Next question - when are slots in the lock file released? >> Never. The only way to get rid of them is to delete the dbisam.lck file and let DBISAM rebuild it. With in-memory tables, this is possible only by shutting down the process. << Is it possible over several months of creating/freeing memory tables with different names to fill it up? >> Yes, provided that you don't set Exclusive=True for the in-memory tables. -- Tim Young Elevate Software www.elevatesoft.com |
Thu, May 4 2006 5:36 AM | Permanent Link |
Roy Lambert NLH Associates Team Elevate | Tim
I can't find the answers in the pdf manual so I'm asking the guru. I'm looking through the code of an existing app to open memory tables exclusively. I also opened the dbisam.lck file in notepad to see what's in it. I can spot all of the disk tables, most of the memory tables are created exclusively but one (SandT) isn't, and I can't see it anywhere. What is actually stored in dbisam.lck for memory tables? I presume, unlike disk tables, there would be one entry per instance of the application creating the memory table? Roy Lambert |
Page 1 of 2 | Next Page » | |
Jump to Page: 1 2 |
This web page was last updated on Wednesday, April 24, 2024 at 11:07 AM | Privacy PolicySite Map © 2024 Elevate Software, Inc. All Rights Reserved Questions or comments ? E-mail us at info@elevatesoft.com |