Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];

Вниз

try... except   Найти похожие ветки 

 
Vint   (2002-05-20 13:02) [0]

Уважаемые мастера, помогите пожалуйста у кого есть свободная минутка, что я делаю неправильно?

Переношу данные, при появлении одинаковых индексов надо обработать "Key violation" и продолжить копирование ...

пытаюсь сделать что-то вот так:

Form85.Table1.First;

while not Form85.Table1.Eof do
begin
Form1.Table1.Insert;
Form1.Table1.Edit;
try
Form1.Table1.FieldByName... := Form85.Table1.FieldByName...;
.
.
.
except
on EDBEngineError do
MessageDlg("Ошибка записи",
mtWarning, [mbOk], 0);

Form1.Table1.Post;
Form85.Table1.Delete;
end;
end
else
Form85.Table1.Next;
end;


 
Destroyer   (2002-05-20 13:08) [1]

А что не работает, какую ошибку выдает? По ходу дела все неправильно...


 
Vint   (2002-05-20 13:23) [2]

>Destroyer (20.05.02 13:08) спасибо Вам :-)

Все работает, только при появлении записи с одинаковым значением выдается "Key violation",
а мне надо чтобы перенос данных не прерывался этим сообщением, а запись вызывающая ошибку осталась во второй таблице (Form85).


 
Destroyer   (2002-05-20 13:32) [3]

1. Зачем Edit после Insert? Ведь Insert и так переводит таблицу в режим редактирования...
2. Ошибка должна возникать при вызове метода Post, а я его в теле Try не наблюдаю.
3. К чему относится else?????


 
Vint   (2002-05-20 14:34) [4]

>Destroyer (20.05.02 13:32)

Да Вы правы, я немного напутал когда копировал из программы.
Прошу меня простить

while not Form85.Table1.Eof do
begin
Form1.Table1.Insert;
try
Form1.Table1.FieldByName... := Form85.Table1.FieldByName...;
.
.
.
except
on EDBEngineError do
MessageDlg("Ошибка записи",
mtWarning, [mbOk], 0);

end;
Form1.Table1.Post;
Form85.Table1.Delete;

end;
Form85.Table1.Next;
end;

Вот вроде так. Вопрос в том, куда вставить
try ...
except
чтобы не прерывалось копирование?


 
Jony   (2002-05-20 16:25) [5]

А не появляется ли это сообщение на Form1.Table1.Post; Ведь ты пытаешься сохранить ошибочную запись уже в except. Там скорей Cancel ставить надо.


 
Vint   (2002-05-20 16:51) [6]

>Jony © (20.05.02 16:25)
объясните пожалуйста, если можно с примером,я просто никогда не работал с try ... except и ни как не могу с ним разобраться...

Таблица проиндексирована, как сделать чтобы перенос данных не прерывался, а одинаковые записи (которые вызывают "Key violation") остались во второй таблице?


 
Anatoly Podgoretsky   (2002-05-20 17:05) [7]

Post и Delete должны быть дo учсузе, вообще это программа сплошная ошибка, второй вариант просто немного лучше


 
Cranium   (2002-05-20 17:10) [8]

Все просто
try
{Исолняемы код в котором может возникнуть Исключение (ошибка)}
Table1.Post;

except
{тут прописываешь код который нужно выполнить в случае возникновения ошибки к примеру}
MessageDlg("Ошибка при записи в Базу!!!!", mtConfirmation, [mbYes, mbNo], 0)
end;


 
Vint   (2002-05-20 17:19) [9]

>Anatoly Podgoretsky © (20.05.02 17:05)

Сделал, как Вы написали...
вылетает мое сообщение ("Ошибка записи") и на этом прог. зацикливается...
снимаю задачу, таблица пустая.


 
Anatoly Podgoretsky   (2002-05-20 17:20) [10]

Наверно у тебя еще много ошибок осталось, последний код никто не видел


 
Vint   (2002-05-20 17:22) [11]

>Cranium © (20.05.02 17:10)

А где писать Form85.Table1.Next,
до или после except?


 
Vint   (2002-05-20 17:27) [12]

>Anatoly Podgoretsky © (20.05.02 17:20)

Вот мой код:

Form85.Table1.First;

while not Form85.Table1.Eof do
begin
if Form85.Table1.FieldByName("N_PAKT").AsInteger = 0 then
begin
try
Form1.Table1.Insert;

{Здесь приравниваются поля из Form85.Table1 в Form1.Table1}

m := m+1;
Form1.Table1.Post;
Form85.Table1.Delete;
except
on EDBEngineError do
MessageDlg("Ошибка записи",mtWarning, [mbOk], 0);
end;

end
else
Form85.Table1.Next;

Gauge1.Progress := Gauge1.Progress + 1;
end;



 
Anatoly Podgoretsky   (2002-05-20 17:44) [13]

А где отмена операции при ошибке - Cancel?
Next вообще почему то срабатывает по условию else предполагается снятие задачи только по трем кнопкам. Лишнии begin end, что отнюдь не облегчает понимание. Вывод диалога в агрегатной процедуре не завидую оператору.


 
Lusha   (2002-05-20 17:45) [14]

>Vint © (20.05.02 17:19)
вылетает мое сообщение ("Ошибка записи") и на этом прог. зацикливается...

И правильно делает. Цикл то пока не Eof, а в обработчике исключительной ситуации только выдача сообщения... Перемещаться по набору данных кто будет, Пушкин?


 
Vint   (2002-05-20 18:32) [15]

>Anatoly Podgoretsky © (20.05.02 17:44)

> не завидую операторуСпасибо за критику ...
только диалог :
on EDBEngineError do MessageDlg("Ошибка записи",mtWarning, [mbOk], 0);
мне вообще не нужен, я его просто из примера взял.

где отмена операции при ошибке - Cancel?, а где она должна быть???



>Lusha © (20.05.02 17:45)

Перемещаться по набору данных кто будет, Пушкин?
перемещаюсь с помощью Next, или я чего не понял?
а except я хочу использовать, чтобы не вылетал "Key violation Error" вернее чтобы не прерывался перенос данных.






 
Anatoly Podgoretsky   (2002-05-20 19:01) [16]

Cancel должен быть в процедуре обработки ошибки, а в ней также желательно сделать счетчик необработаных.
Перемещаться то ты перемещаесься, но только по условию N_PAKT = 0 в остальных случаях твоя программа висит.
Ты бы сел с карандашом, наривовал бы схемку и проиграл в уме операци, очень поможет, сразу начнешь понимать, что делаешь и что надо делать, только просмотри все варианты ошибок.


 
Vint   (2002-05-20 19:14) [17]

>Anatoly Podgoretsky © (20.05.02 19:01)
нет, нет!!!
она не висит, понимаете данные переносятся из Form85 в Form1, но не все, а только те котрые "N_PAKT" = 0

т.е. я делаю Delete и курсор уходит на следующую запись!

а если "N_PAKT" <> 0 тогда Next, и запись остается в таблице в Form85


 
Vint   (2002-05-20 19:19) [18]

>Anatoly Podgoretsky © (20.05.02 19:01)

> Cancel должен быть в процедуре обработки ошибки, а в ней также желательно сделать счетчик необработаных.
Да это все я понял, но только как это сделать???
если я пишу Cancel так:
except
on EDBEngineError do
MessageDlg("Ошибка записи",mtWarning, [mbOk], 0);
Cancel;
end;
то компилятор дает ошибку :-)



 
dimis   (2002-05-20 20:14) [19]

надо вынести код добавления записи в отдельную функцию и в ней делать try except
а в основной процедуре делать итерации по form85.Table1.Тогда будет работать
а еще лучше просто написать нормальный SQL запрос, который сделает все автоматически


 
Anatoly Podgoretsky   (2002-05-20 20:26) [20]

Form1.Table1.Cancel;

else
Form85.Table1.Next;
Другого .Next; нет
Ты бы попробовал сначала выпольнить все на бумаге, то этих проблем бы не было, а было бы полное понимание


 
Vint   (2002-05-20 20:58) [21]

Неее, наверно я такой тупой, ничего с этим неподелаешь!
>Anatoly Podgoretsky © (20.05.02 20:26)
Все сделал как написали все равно Key violation выскакивает.
Ты бы попробовал сначала выпольнить все на бумаге
да что тут представлять, что за сверх сложный алгоритм то!
Издеваетесь что ли?

>dimis (20.05.02 20:14)
написать нормальный SQL запрос
немогу!!! ключевое поле формируется на ходу, во время переброски, в зависимости от содержимого нескольких полей в таблице и даты.

Может еще какие идеи есть :-)


 
Vint   (2002-05-20 21:42) [22]

>Anatoly Podgoretsky © (20.05.02 20:26)

Прошу простить, заработался!
Ошибку обрабатывал компилятор, приложение работает!
УРА РАБОТАЕТ, УРААААА!!!


Всем большое спасибо!


 
Anatoly Podgoretsky   (2002-05-20 21:51) [23]

Vint © (20.05.02 20:58)
Да какое там и в мыслях не было.
Просто для такого простого кода на удивление много ошибок и непонимания



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.005 c
1-40024
Alex is Fecit
2002-05-29 21:49
2002.06.13
---|Ветка была без названия|---


1-39986
Ricoshet
2002-05-31 11:51
2002.06.13
Что за глюк в RxTrayIcon?


1-40065
прохожий
2002-06-02 13:08
2002.06.13
Чтение файла / парсинг строк! Плиииз хелп...


1-39992
ЗЛ
2002-06-03 14:29
2002.06.13
И еще один вопрос (не в тему, но очень нужно) вынужден был постав


3-39927
RDA
2002-05-20 19:35
2002.06.13
Каскадные изменения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский