Форум: "Базы";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
Внизпроблема с BDE или еще чем-то... Найти похожие ветки
← →
Sergey V. Shadrin (2002-09-27 09:47) [0]дано: несколько программ обращается к одной dbf (foxpro"шной, с одной записью) на чтение через bde при обращении приблизительно 6 программы (может пятой, если первая успевает закончить раньше не получается проверить :( ) не получаем доступ к ней на чтение... в чем причина может быть?
← →
Desdechado (2002-09-30 11:14) [1]наверно, открывается таблица в монопольном режиме
← →
Sergey V. Shadrin (2002-09-30 14:17) [2]нефига. выяснено что такая программа:
unit bde1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, dbtables;
type
TForm1 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
t:ttable;
i:integer;
implementation
{$R *.dfm}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
t.Close;
t.Free;
Application.MessageBox("CA90 closed","Pause wait");
end;
procedure TForm1.FormShow(Sender: TObject);
begin
t:=TTable.Create(nil);
t.DatabaseName:="c:\ca\s";
t.TableName:="ca90.dbf";
t.Open;
Application.MessageBox("CA90 opened","Pause wait");
end;
end.
если ее запустить до состояния "ca90 opened", а потом запустить еще одну копию и так далее всего получается на экране 6 сообщений о ca90, после чего идет ругань: Insufficient memory for this operation. Alias. вот такие вот пироги :( а мне надо чтобы было минимум 15 запусков одновременно... хотя если в одной программе открыть 20 таблиц - все нормально будет. а в разных - не получается.
← →
Desdechado (2002-09-30 16:37) [3]15 экземпляров одной программы одновременно?!
ну ты сказал.
так вопрос в другую плоскость перешел - не получение доступа к дбф, а недостаток памяти. А здесь сразу вижу глюк: создание таблицы на ПОКАЗ формы (вместо создания OnCreate), а уничтожение только на закрытие формы. Может создаваться 50 TTable при 50 показах, а указатели на 49 предыдущих теряются. Вот и освободить память нельзя.
← →
Sergey V. Shadrin (2002-10-01 07:08) [4]надо чтобы 15 одинаковых программ работало одновременно. здесь же мы имеем всего 6 работающих экземпляров. что для данной задачи не приемлемо. а о том, сколько надо памяти для этого? и где ее крутить? сейчас на машине стоит 256 метров. не думаю, что этого мало.
← →
Sergey V. Shadrin (2002-10-08 08:40) [5]что никто не знает что ли?
← →
Плохиш (2002-10-08 13:25) [6]1. Как тебе уже сказали, замени для начала FormShow на FormCreate
2. "Insufficient memory for this operation" тебе перевести?
3. почитай умные книжки оттуда можно почерпнуть много интересной и полезной информации, к примеру, что не всё определяется количеством MB.
← →
sniknik (2002-10-08 22:43) [7]to Desdechado
и остальным кому интересно. память в данном случае совершенно ни причем (я пробовал). ошибка вываливается на 6м открытии таблицы через BDE и только если запуск идет с одной машины. (количество сессий бде ограничено чтоли!). для чистоты эксперимента можно все убрать создание, события, результат не изменится если иметь 1 открытую таблицу.
ошибка звучит полностью так
Exception EDBEngineError in module Project1.exe at 000A18B6.
Insufficient memory for this operation
это при том что в диспечере задачь в этот момент доступно 663240 больше пол гига! кстати после того как искуственно "посадил" память до доступно 53348 то открылось те же пять прог с 1 подключением к таблице.
Плохиш-у - никакие книги не заменят опыта и эксперементаторства. ведь книги не бог пишет который изначально все знает, ктото должен быть первым.
← →
sniknik (2002-10-09 01:41) [8]опять об этом.
ошибка возникает в модуле DBTables
в процедуре procedure TDatabase.DoConnect;
на вызове
Check(DbiOpenDatabase(Pointer(DBName), nil,
DBIOpenMode(Integer(OpenModes[FReadOnly]) or OpenModeFlag),
ShareModes[FExclusive], Pointer(StrToOem(DBPassword)),
OptParamCount, OptFldDesc, OptParam, FHandle));
возврашает ошибку 9473 ->
DBIERR_NOMEMORY = (ERRBASE_LIMIT + ERRCODE_NOMEMORY);
ограничение по памяти именно в модуле BDE. Обычной то памяти дофига.
Может так проще будет. Остается узнать где оно прописано это ограничение, ну или найти того кто знает.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c