![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
---|Ветка была без названия|---
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]На тарелочке, с известной каемочкой.