Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
1-72232
W0land
2003-01-14 14:31
2003.01.23
WinXP+Delphi5 - проблема с отладчиком


1-72211
diks
2003-01-14 12:18
2003.01.23
Кнопочки


1-72292
fifo
2003-01-15 12:57
2003.01.23
VarArrayCreate c типом Record


3-72076
karan1
2002-12-26 18:13
2003.01.23
Как визуализировать XML файл через DBGrid или какое дерево...


14-72524
avkar
2003-01-07 13:40
2003.01.23
Компонент