Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-92377
Cossys
2002-10-04 17:37
2002.10.28
Динамически добавлять поле к запросу


6-92641
bnn
2002-08-27 12:54
2002.10.28
Ошибка при работе с FTP клиентом SOCKET ERROR 10054


1-92516
123000
2002-10-14 20:41
2002.10.28
Richedit


7-92764
arcoant
2002-08-23 16:34
2002.10.28
Помогите please узнать открыта ли дверца CDROM a


14-92666
Desdechado
2002-10-07 13:18
2002.10.28
Ассоциации





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский