Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: СУБД и Delphi/Lazarus

  Все выпуски  

RusFAQ.ru: СУБД и Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / СУБД и Delphi

Выпуск № 148
от 06.06.2006, 17:35

Администратор:CJ
В рассылке:Подписчиков: 227, Экспертов: 33
В номере:Вопросов: 2, Ответов: 4


Вопрос № 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)'

Как заставить вычислять?
Отправлен: 01.06.2006, 06:43
Вопрос задал: Иванов Михаил Викторович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: 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
Комментарий оценки:
Спасибо, за точность и оперативность. Помогло.

Отвечает: Bochvarov NikB
Здравствуйте, akaDemik!
dbiSaveChanges(aTable.Handle));
Ответ отправил: Bochvarov NikB (статус: 9-ый класс)
Ответ отправлен: 01.06.2006, 12:19
Оценка за ответ: 5
Комментарий оценки:
Спасибо.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное