Вопрос № 44858: Создаю таблицу в Database DesktopTableParadox 7
2 поля: 1 LongInteger и второе такое же.
В Delphi пользуюсь компанентами:
Table1
DataSource1
DBGrid1
Все работает.
Первый столбец заполнен.
Пытаюсь сдела...Вопрос № 44883: Здравствуйте уважаемые эксперты.
Столкнулся с проблемой, при использовании БД BDE (это данность, отказаться от использования я не могу, т.к. занимаюсь сопровождением уже готового проекта). В процессе работы программа добавляет данные в таблицу, о...
Вопрос № 44.858
Создаю таблицу в Database DesktopTableParadox 7
2 поля: 1 LongInteger и второе такое же.
В Delphi пользуюсь компанентами:
Table1
DataSource1
DBGrid1
Все работает.
Первый столбец заполнен.
Пытаюсь сделать второй столбец 'Вычисляемым'.
В OnCalcFields пишу:
with Table1 do Fields[1].Value:=Fields[0].Value*2;
И возникает ошибка: EListError with message 'List index out bounds (1)'
Отвечает: sir henry
Здравствуйте, Иванов Михаил Викторович!
А почему бы Вам не написать более по человечески:
Table1.FieldByName('ИмяПоля2').AsInteger:=Table1.FieldByName('ИмяПоля1').AsInteger *2;
?
Я конечно понимаю, хочется все покороче написать, но надо ведь чтобы и понятно было. Тогда будет понятно откуда ошибка.
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 01.06.2006, 10:41
Отвечает: Злоумышленник
Здравствуйте, Иванов Михаил Викторович!
Насколько мне извесно, в обработчике OnCalcFields вычисляются "вычисляемые поля". Поле у Вас не вычисляемое, поэтому используйте другой обработчик. Например OnPost (работает при сохранении записи).
Ответ отправил: Злоумышленник (статус: 8-ой класс)
Ответ отправлен: 01.06.2006, 19:01
Вопрос № 44.883
Здравствуйте уважаемые эксперты.
Столкнулся с проблемой, при использовании БД BDE (это данность, отказаться от использования я не могу, т.к. занимаюсь сопровождением уже готового проекта). В процессе работы программа добавляет данные в таблицу, обычный Insert и Post. При этом данные добавляются и все хорошо. Но после перезапуска данные, введенные в таблицу, пропадают. Время последнего изменения файла таблицы тоже не изменяется. Кто-нибудь с подобным сталкивался? Есть ли у кого идеи как эту проблему решить, или обойти?
Спасибо.
Отправлен: 01.06.2006, 11:53
Вопрос задал: akaDemik (статус: 2-ой класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Jadd
Здравствуйте, akaDemik!
Все очень просто, до банального. Каждый insert/post вставляет запись в "зеркало" таблицы в памяти. Т.е. реальных дисковых операций не происходит, что оправдано, т.к. это существенно снизит производительность БД. Поэтому, решением данной проблемы является сброс буферов на диск после каждой операции insert/post или после каждой критичной операции. Делается это так:
1. Способ - банальное открытие-закрытие рекордсета.
Table1.Close;
Table1.Open;
2. Способ - вызов функции сброса буферов
Table1.FlushBuffers;
Второй способ предпочтительней. Насколько я знаю, эта функция не приводит к открытию-закрытию рекордсета, что не скажется на производительности.
Успехов.
--------- Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал) Адрес: Санкт-Петербург WWW:http://www.sport-diary.ru ICQ: 28260749 ---- Ответ отправлен: 01.06.2006, 12:10 Оценка за ответ: 5 Комментарий оценки: Спасибо, за точность и оперативность. Помогло.