Текущий архив: 2003.01.23;
Скачать: CL | DM;
Вниз
Помогите! Какая то странная ошибка Найти похожие ветки
← →
Smirnoff © (2002-12-28 14:58) [0]База данных работает по сетке.
Оператор на клиентской машине целый день вносит новые записи.
И вот какая лажа:
0-3-5-7 или 10 раз в день при добавлении новой записи почему то добавляется пустая запись
при этом с прогой ничего страшного не происходит, оператор просто редактирует пустую запись и все идет нормально.
Системы в появлении ошибок вроде нет никакой. Все от фонаря и в принципе то не очень часто - можно работать, но заказчик требует решения проблемы (и он то прав), а у меня голова пухнет
← →
Prooksius © (2002-12-28 15:39) [1]Интербейс тут не при чем.
Ошибка в проге.
Давай подробности. Как вставляешь записи.
← →
Wolf © (2002-12-28 15:42) [2]Попроси оператора, когда это произойдет, в точности записать данные которые он пытался ввести и попробуй сам воспроизвести, может что-то на клиенте.
Запусти SQL Monitor ему на машине и установи огромный буфер для записи, а потом поройся логе. А там уже в зависимости от того был послан ли правильный запрос будешь знать, чье вина: клиента или сервера.
Если ты работаешь через BDE то подойдет их SQL Monitor, а если напрямую, то монитор есть где-то на этом сайте в кладовке.
← →
passm © (2002-12-28 16:06) [3]Smirnoff © (28.12.02 14:58)> Логично было бы поставить ограничение на уровне БД. Поля NOT NULL, либо триггеры.
← →
kaif © (2002-12-28 16:10) [4]Как вообще возможно добавление пустой записи? Что понимается под пустой записью? Неужели у Вас нет ключевого поля NOT NULL? Непонятно все это... База должна быть организована так, чтобы это было невозможно априори. Тогда данная ситуация выразилась бы в ошибке, которую легко было бы обнаружить (попытка вставки дубликата или пустого значения).
← →
Smirnoff © (2002-12-28 16:42) [5]NOT NULL сказали не использовать, т.к. они не знают точно будет ли заполнятся поле в конкретной записи
оператор после появления пустой записи ее редактирует, внося те же самые данные, и все проходит нормально.
записи записываю так:
старт транзакции
добавление данных, введенных в поля
конец транзакции
← →
passm © (2002-12-28 17:42) [6]Smirnoff © (28.12.02 16:42)> Тогда все на совести пользователя.
← →
Smirnoff © (2002-12-28 18:06) [7]to passm ©
при мне он вводдил, происходила ошибка, а потом при мне редактировал - все пользователь делал верно.
to all
А может ли это зависеть от ОС на сервере?
← →
pusrg © (2002-12-28 21:05) [8]
> Smirnoff © (28.12.02 16:42)
> NOT NULL сказали не использовать, т.к. они не знают точно
> будет ли заполнятся поле в конкретной записи
А о таком понятии как ключевое поле Вам известно? Данное поле не редактируется пользователем, и по определению не может быть NOT NULL.
Далее смотрите kaif © (28.12.02 16:10)
← →
Wolf © (2002-12-29 10:23) [9]Если ты видел, при каких условиях происходит ошибка, так почему не попробовать ее воспроизвести с монитором и отладчиком?
← →
kaif © (2002-12-29 15:40) [10]Если ввод данных делается в DBGrid, то тогда возможно следующее:
1. Добавляется новая строка стрелкой вниз.
2. Вводится значение в ячейку, но не отменяется с помощью ESC, а зщабивается с помощью BACKSPACE.
3. Затем юзер возвращается на предыдущую строку набора с помощью стрелки вверх.
4. В результате бессознательно на сервер посылается "пустая" запись.
------------
Возможно и иная логика:
1. Имееться кнопка "сохранить"
2. После нажатия "Сохранить" автоматически делается DataSet.Insert для того, чтобы ввести новую запись.
3. Пользователь незаметно для себя нажимает иногда "сохранить" 2 раза.
--------------
Одним словом, не зная устройства интерфейса приходится гадать...
=============ОДНАКО!!!!!!!===============
Никакие причины типа "не та файловая система", "сервер глючит" и т.п. НЕ МОГУТ привести к такой ошибке.
-----------------
Совет (2 совета)
1. [Проверка на стороне клиента] В событие OnBeforePost компонента TDataSet расписать проверку типа:
Flag := False;
with DataSet do
for i := 0 to Fields.Count - 1 do
begin
if Fields[i].AsString <> "" then
Flag = True;
end;
if not Flag then
Abort; {или raise Exception.Create("Пустая запись")}
2. [Проверка на стороне сервера]
Создать триггер ACTIVE BEFORE INSERT
и в нем проверить все поля. Если они все пустые, вызвать EXCEPTION.
Страницы: 1 вся ветка
Текущий архив: 2003.01.23;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.023 c