Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

---|Ветка была без названия|---


Страницы:   1 2 3 4 5 6 7 8

ki11er ©   (2003-03-04 21:11:00) 

приведенный ниже код валится через пару минут работы с сообщениями "Index is out of date" или "Insufficient Memory..." (при 256 оперативки и паре свободных гигах на винте ;-))))
При написании следовал советам, полученным в этой конференции, а так же из других источников. Можно ли написать подобный код так, чтобы он работал без глюков или это принципиально невозможно?

procedure TFormMain.FormCreate(Sender: TObject);
var i: integer;
str_tmp: string;
begin
StartDir := ExtractFilePath(Application.ExeName);
if StartDir[Length(StartDir)] <> "\" then begin
StartDir := StartDir + "\";
end;
sDirDB := StartDir + "dbase\";
CreateDir(sDirDB);
CreateDir(StartDir + "net");
Session.NetFileDir := StartDir + "net";
CreateDir(StartDir + "private");
str_tmp := StartDir + "private\" + IntToStr(GetTickCount);
CreateDir(str_tmp);
Session.PrivateDir := str_tmp;

tbTest.DatabaseName := sDirDB;
qrTest.DatabaseName := sDirDB;

btnStartStop.Caption := "


zacho   (2003-03-06 23:26:00) [61]

> Хочу, чтобы Вы все-таки поняли, что для меня не составляет
> никакого труда перевести все на MS Jet, MS SQL, MySQL, InterBase
> или что-то подобное

Без обид :-), я не знаю, есть ли у тебя опыт такого рода "перевода".
У меня - есть. Поэтому хочу предостеречь: перевести систему с одной СУБД на другую (а тем более с файл-серверной БД на полноценную РСУБД) не намного проще, чем разработать ее с нуля. Конечно, если не ставить целью получить тормозное глюкало :) Или если система (по крайней мере сама БД) весьма простая.


altarasjuk   (2003-03-06 23:21:00) [62]

У меня была подобная проблема правда с Accessom и через ADO, но в потоках суть может сводиться к следующему:
попробуй mutex мне помогло (API CreateMutext,WaiteForSingleObject) глянешь в хелп по ним, они довольно простые. может поможет. Тока mutex нужно создавать один раз для всей проги и ОБЯЗАТЕЛЬНО его удалять.


ki11er   (2003-03-06 22:36:00) [63]

2 MsGuns:
это уже больше похоже на конструктивную беседу...
> Похоже, ты собираешься проэмулировать движок (в данном случае
> БДЕ) на предмет многочисленных асинхронных обращений к одним
> и тем же объектам БД и в виду отсутствия "живых" 11 ПК с
> сидящими за ними в "полной боевой готовности" узерами ты
> задумал написать тестовое приложение, которое якобы будет
> работать за этих самых узеров. Эмуляцию каждого узера ты
> и пытаешься организовать в одной - разъединственной проге
> с помощью потоков каждый со своей "автономной" сессией.
> Угадал ?


Это не совсем так, основная причина все же - желание узнать как правильно нужно делать подобные вещи. А если уж так важна конкретика (хотя я честное слово этого не понимаю), то есть приложение (достаточно солидное), написанное на Delphi. В нем как раз идет работа с одной таблицей из нескольких потоков (кое-где через TTable, кое-где через TQuery). Написать по-другому (типа разнести в несколько приложений или свести всю работу в один поток) это нельзя, поверьте уж на слово. Написано все так, как Вы советуете, т.е. особо не задумываясь без доп. сессий. Периодически возникают проблемы с таблицей, а их быть не должно (по крайней мере не чаще, чем раз в пару месяцев). Я начал исследовать этот вопрос и нарыл некоторое количество информации, написанной не самыми глупыми людьми (в том числе и из Borland/Inprise). Исходя из этих рекомендаций и появился этот код.
Хочу, чтобы Вы все-таки поняли, что для меня не составляет никакого труда перевести все на MS Jet, MS SQL, MySQL, InterBase или что-то подобное. Но, мне интересно, почему именно этот код не работает и как заставить его работать (или доказать, что это невозможно).
Насчет нескольких копий программы - это еще сложнее, чем с потоками (Вам никогда не встречалось сообщение "Table is busy"?).

Резюме. Пусть целью будет просто протестировать BDE в указанных условиях (желательно на разных машинах и разных ОС). Если тестовая программа проработает в течение, например, месяца с двойной-тройной загрузкой от номинальной, значит этот код можно будет использовать в той программе, о которой я говорил. Вот и все в общем-то.


MsGuns   (2003-03-06 21:50:00) [64]

Отброшу обиды, - в чем-то мне очень симпатичны такие дотошные парни, пусть даже и нагловатые (с опытом пройдет)

Кажется, я начинаю понимать смысл твоего эксперимента.

Похоже, ты собираешься проэмулировать движок (в данном случае БДЕ) на предмет многочисленных асинхронных обращений к одним и тем же объектам БД и в виду отсутствия "живых" 11 ПК с сидящими за ними в "полной боевой готовности" узерами ты задумал написать тестовое приложение, которое якобы будет работать за этих самых узеров. Эмуляцию каждого узера ты и пытаешься организовать в одной - разъединственной проге с помощью потоков каждый со своей "автономной" сессией. Угадал ?

Если да, то:

Во-первых:
1. Достаточно было написать прогу, работающую с таблицей стандартно.Через стандартные компоненты и безо всякого распараллирования.
Ввести в прогу некий "флаг готовности", проверяя который она решает, начать ли ей свои вставки/удаления/изменения
Т.е. пока "флаг" не горит, он просто ждет, ничего не делая
2. Запустить эту прогу 11 раз.
3. Зажечь флаг и смотреть. (Можно с секундомером или до первого эксепшена.

В качестве флага можно использовать, например, простецкий текстовый файл с одной строкой типа "Поехали !". Как только ты создашь такой файл, твои все 11 прог запустят свои "машинки".
Для варьирования циклов и типов модификаций (вставка/удаление/изменение) каждой прогой можно придумать мульон разных алгоритмов,- я думаю что для тебя это не проблема

Во-вторых:

Даже если у тебя все нормально отработает и ты получишь какие-то результаты, то они (результаты) не будут отражать ровным счетом НИЧЕГО. Просто потому, что сэмулировать РЕАЛЬНУЮ ситуацию на РЕАЛЬНОЙ БД с РЕАЛЬНЫМИ клиентами с их прибамбасами чрезвычайно сложно. И уж совершенно невозможно без привязки к КОНКРЕТНОЙ БИЗНЕС-ЛИГИКЕ БД, т.е. к составу и структурам таблиц БД, их связей, ограничений и так далее и так потом.

Именно поэтому вся эта ветка изначально была начата тобою зря. Даже если ты запустишь и отладишь свой код, твоя прога и, ГЛАВНОЕ, цель, которую ты ею преследуешь, окажется АБСОЛЮТНО БЕСПОЛЕЗНОЙ.
Это как попытаться создать панацею от всех болезней.


ki11er   (2003-03-06 21:02:00) [65]


> Попробуй FTable.SessionName:=FSession.Name


Так а я как делаю?

if bWithSession then begin
_FSession := Sessions.OpenSession("Session" +
IntToStr(integer(@_FSession)) +
IntToStr(GetTickCount));
str_dir := StartDir + "Private" + "\" + _FSession.SessionName;
CreateDir(str_dir);
_FSession.PrivateDir := str_dir;
_FSession.NetFileDir := StartDir + "net";
FTable.SessionName := _FSession.SessionName;
end else begin
_FSession := nil;
end;


2 Модератор:
Понятно. Типа, "особы, приближенные к императору". Ок, больше не повторится.


Serginio   (2003-03-06 19:20:00) [66]

Попробуй FTable.SessionName:=FSession.Name или используй для каждого потока свой TDataModule c TSessinon.AutoSessionName:=True. Ограничение БДЕ на одновременно открытых сессиях помоему 48. Кстати при использовании СОМ объектов как раз применяется такая схема


ki11er   (2003-03-06 19:11:00) [67]

Удалено модератором
Примечание: Модератор сам решит, удалять или нет или оставить в назидание потомкам


ki11er   (2003-03-06 19:08:00) [68]

2 MsGuns:
Распальцовки-распальцовками... Но... Вопрос, который я задал, довольно принципиальный для тех, кто серьезно работает через BDE с Paradox"ом (насколько это вообще возможно...). Это не просто тупая программулина новичка, а тест, который должен ответить на вполне конкретные вопросы. Что это за программа и для чего я пояснил несколько раз. Хотя, не знаю, может у меня и с русским языкам проблемы, а не только с языками программирования ;-)


ki11er   (2003-03-06 18:59:00) [69]


> При такой методике тебе скоро совсем прекратят отвечать,
> кому охота оказаться облитыми грязью.

Это уже флейм, но кого я "облил" грязью? У меня и в мыслях этого не было. Я просто предложил совместными усилиями решить проблему и все 8-O


MsGuns   (2003-03-06 18:58:00) [70]

Побуду-ка еще раз идиотом (достал пацан вконец !)

Не, ну в самом деле, нормальный пачан пришел в форум за квалифицированным советом. В надежде, что в в его конкретном коде
(который не работает) конкретные спецы конкретно разберутся и конкретно дадут ответ, в какой конкретной строке кода содержится конкретная ошибка и как эту ошибку конкретно исправить.
При этом вубаться в смысл того, что там написано, конкретно не будут (типа, а что это вообще за прога, что она должна делать и т.д.)
Просто раберутся и ответят. Желательно с выложением собственных фрагментов, где что-то реализуется именно так, как в его собственном коде. При этом спецы должны все это разжевать, прокомментировать, объяснить суть и вывести мораль. В этом случае у нормального пачана будет нормальное мнение о нормальных посетителях нормального форума.

И за эту-то пустяковину (по мнению пачана) он (пачан) скажет спецам (не всем, а только тем, кто особо достоин) свое пачанское спасибо.

Не вышло... Не оправдали... Осрамились...

Выводы:
- Нормальным пачанам не фиг лазать по отстойным форумам
- Если уж вошли, то сразу предупреждать, чтоб фуфлы в ЕГО ветки не залазили. Так сказать, не посягали.
- Если посягнут, то они суть идиоты и дураки, потому как пачан так для себя решил сразу и бесповоротно.

Ты, "убийца здравого смысла", написал, что это "мои проблемы".
Так вот я их сейчас и решу.
Просто пошлю тебя и твою ветку туда, где обоим самое место.


Anatoly Podgoretsky   (2003-03-06 18:52:00) [71]

Ответы тебе были даны и уж это твоя проблема, что ты их не понимаешь, но не как не тех людей. Методика ведения дисскусси во всех этих ветках, а также в не указанных не отличается.
При такой методике тебе скоро совсем прекратят отвечать, кому охота оказаться облитыми грязью.


ki11er   (2003-03-06 18:38:00) [72]

Удалено модератором


ki11er   (2003-03-06 18:34:00) [73]


> ki11er! А ведь это вроде твой далеко не первый такой "странный"
> вопрос? Лениво рыться в архивах. И на прошлые твои вопросы
> вроде тоже были такие же "идиотские" ответы. Ни о чем не
> говорит?

Какие проблемы? Вот они все:
1. вопрос про TSession http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1046715844&n=1
Напрямую связан с обсуждаемым здесь вопросом, естесственно ответа нет...

2. dBASE или Paradox http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1046771586&n=1
Ответа нет. Если конечно не считать ответом утверждения, что я, типа, ничего не понимаю...

3. Как нужно создавать таблицу, чтобы ее макс. размер был 2Gb?
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1046768740&n=1
Получен более-менее нормальный ответ на вопрос как. Но никак не объясняется, к каким коссвенным результатам это приведет, и почему это Borland по умолчанию так не сделал?

4. Одновременные запросы (BDE)... http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1046699069&n=1
Примерно то же, что и эта ветка.

5. TTable vs TQuery http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1046688075&n=1
Тоже нет конкретного ответа.

-------------------------------------------------------------
Итого: на 5 вопросов получен 1 более-менее приемлимый ответ.

Может в консерватории что-то нужно подправить? (c) М. Жванецкий.


Smashich   (2003-03-06 18:25:00) [74]

Удалено модератором
Примечание: Давай без личных оскорблений


BlackTiger   (2003-03-06 18:23:00) [75]

Дебилы мы тут все убогие, в общем.
Ламеры полные, нифига не понимающие в программировании. Да и вообще сайт этот надо закрывать, потому как тут только идиоты собрались.

:))))

ki11er! А ведь это вроде твой далеко не первый такой "странный" вопрос? Лениво рыться в архивах. И на прошлые твои вопросы вроде тоже были такие же "идиотские" ответы. Ни о чем не говорит?


Smashich   (2003-03-06 18:16:00) [76]

2 ki11er (06.03.03 17:57)
ндя....


ki11er   (2003-03-06 18:13:00) [77]


> У меня сложилось иное мнение об этой ветке.
> ...

Не знаю, какое у Вас сложилось мнение, это Ваши личные проблемы. Я пришел сюда за квалифицированной помощью, т.к. сам не очень силен в данном вопросе. Задал максимально _конкретный_ вопрос. В ответ получил многостраничную беседу о смысле жизни, порядке вещей, моей компетентности, и т.д. и т.п. Короче, много чего, но только не то, за чем пришел :(


Anatoly Podgoretsky   (2003-03-06 18:09:00) [78]

Но ключи от кваритры не дают :-)


MsGuns   (2003-03-06 18:07:00) [79]

>ki11er (06.03.03 17:57)
>Здесь же есть более умные, пусть они код и выложат

У меня сложилось иное мнение об этой ветке.
Пришел один умный пацан и задал такой же умный вопрос, а несколько дураков, прикинувшись типа мастерами, стали донимать его тупыми, не оносящимися к теме вопросами и еще более тупыми ответами. При этом сами-то они ни фига, ессно, не могут и никогда не могли, а умному пацану просто пАрят мОзги. Наверное, для поднятия авторитета в собственных дурацких глазах
;)))


Anatoly Podgoretsky   (2003-03-06 17:59:00) [80]

На тарелочке, с известной каемочкой.


Страницы:   1 2 3 4 5 6 7 8

Наверх

Титульная страница Поиск, карта сайта Написать письмо