Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Можно ли использовать INSERT и DELETE для справочн (число прочтений - 13727 )
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Можно ли использовать INSERT и DELETE для спра
Ответ #15 - 19. Июля 2006 :: 07:31
Печать  
Цитата:
ПолучитьОписаниеОшибки можно в любом случае(даже не проверяя результат метода Выполнить)

Не нужно так делать! Получать описание ошибки нужно только в случае, если Выполнить() = 0!!!
Потому как текст ошибки в переменной-члене класса находится, можно поймать вообще левый текст ошибки.
  
Наверх
ICQ  
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Можно ли использовать INSERT и DELETE для спра
Ответ #16 - 19. Июля 2006 :: 10:35
Печать  
spock писал(а) 19. Июля 2006 :: 07:31:
Не нужно так делать!

это уже другой вопрос(ты же понимаешь что: "кто как хочет так и ..."  © не знаю чьё ). но в данном случае ошибка будет.
Цитата:
Потому как текст ошибки в переменной-члене класса находится, можно поймать вообще левый текст ошибки.

метод ПолучитьОписаниеОшибки выдаёт последнюю ошибку, если она конечно есть, если ее нет тогда вернет пустую строку. попробуй для начала выполнить глюкавый инсерт, а затем выполни НЕ глюкавый (к примеру селект либо инсерт) и после каждого метода выполнить сообщай описание ошибки. в результате ты увидишь что после первого метода выполнить у тебя метод получитьописаниеошибки вернет не пустую строку, а после второго - вернет пустую. имхо, метод ПолучитьОписаниеОшибки возвращает строку m_strError класса CDBException в случае не выполнения метода Выполнить, а в случае выполнения метода Выполнить возвращает пустую строку.
имхо, из выше изложеного можно сделать вывод что код:
Код
Выбрать все
запрос.Выполнить(".....");
если запрос.ПолучитьОписаниеОшибки() <> "" тогда
сообщить(запрос.ПолучитьОписаниеОшибки());
запрос.Закрыть();
возврат;
конецесли;
запрос.Закрыть();
 


будет верным, но и с этим кодом можно спорить на разные темы.
  
Наверх
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Можно ли использовать INSERT и DELETE для спра
Ответ #17 - 19. Июля 2006 :: 11:14
Печать  
Еще раз говорю, так ловить ошибку в корне не верно.

Цитата:
...имхо, из выше изложеного можно сделать вывод что код...

будет работать до поры, до времени.
  
Наверх
ICQ  
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Можно ли использовать INSERT и DELETE для спра
Ответ #18 - 19. Июля 2006 :: 11:16
Печать  
spock писал(а) 19. Июля 2006 :: 11:14:
Еще раз говорю, так ловить ошибку в корне не верно.

Цитата:
...имхо, из выше изложеного можно сделать вывод что код...

будет работать до поры, до времени.

я же не спорю, я только основываюсь на фактах.
  
Наверх
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Можно ли использовать INSERT и DELETE для спра
Ответ #19 - 20. Июля 2006 :: 06:49
Печать  
spock писал(а) 19. Июля 2006 :: 11:14:
Еще раз говорю, так ловить ошибку в корне не верно.

несогласен, если пользоваться методом выполнить, т.к. в начале метода переменная, содержащая текст ошибки, обнуляется, а при ПолучитьОписаниеОшибки, если есть ошибка при выполнении метода Выполнить, возвращает текст ошибки, иначе просто возвращает содержимое переменной, которое в начале метода выполнить было очищено. отсюда делаем вывод: работает и ловит.
  
Наверх
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Можно ли использовать INSERT и DELETE для спра
Ответ #20 - 20. Июля 2006 :: 07:02
Печать  
Это юмор такой чтоли?
Цитата:
Выполнить / Execute
...
Возвращает: тип: Число. 1 - запрос выполнился успешно, 0 - безуспешно, описание ошибки можно получить, вызвав метод ПолучитьОписаниеОшибки.
...

А если что-то поменяется в поведении класса? И не будет каждый раз очищаться переменная-член?
И еще, лишние вызовы зачем делать?
Если метод вернул 0, то проверяем, что там за ошибка, если интересно конечно. Другого варианта не должно быть вообще.
  
Наверх
ICQ  
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Можно ли использовать INSERT и DELETE для спра
Ответ #21 - 20. Июля 2006 :: 07:48
Печать  
не спорь с ним, spock
это бесполезно... Нерешительный
  
Наверх
 
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Можно ли использовать INSERT и DELETE для спра
Ответ #22 - 20. Июля 2006 :: 10:22
Печать  
а если чтото поменяется в поведении класса и метод Выполнить не будет возвращать 0 или 1, а метод ПолучитьОписаниеОшибки отработает правильно?  что тогда? (это тоже из разряда фантастики).
я не говорю что так как ты предлагаешь нельзя писать, а нужно писать так как я говорю. и не спорю чей код универсальней или правильней. твой вариант я использую в своих наработках, но по большей части проверяю ВыборкаОткрыта(). с неданих времен использую ВыполнитьИнструкцию().
писать код можно какой угодно в данной ситуации и мой вариант не будет ошибочным.
  
Наверх
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Можно ли использовать INSERT и DELETE для спра
Ответ #23 - 20. Июля 2006 :: 10:27
Печать  
villy писал(а) 20. Июля 2006 :: 10:22:
а если чтото поменяется в поведении класса и метод Выполнить не будет возвращать 0 или 1

это будет уже критическим багом.

А вот если метод ПолучитьОписаниеОшибки() будет при неправильном использовании выдавать мусор, то это фича.

Я к чему это все... а к тому, что читают этот форум люди и советовать использовать заведомо опасный код не нужно.
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Можно ли использовать INSERT и DELETE для спра
Ответ #24 - 20. Июля 2006 :: 10:35
Печать  
transbublik

villy писал(а) 20. Июля 2006 :: 06:49:
spock писал(а) 19. Июля 2006 :: 11:14:
Еще раз говорю, так ловить ошибку в корне не верно.

несогласен, если пользоваться методом выполнить, т.к. в начале метода переменная, содержащая текст ошибки, обнуляется, а при ПолучитьОписаниеОшибки, если есть ошибка при выполнении метода Выполнить, возвращает текст ошибки, иначе просто возвращает содержимое переменной, которое в начале метода выполнить было очищено. отсюда делаем вывод: работает и ловит.

А твой метод документирован в официальной документации?
Т.е. что является гарантией того, что реализация метода ПолучитьОписаниеОшибки() завтра не изменит поведение?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Можно ли использовать INSERT и DELETE для спра
Ответ #25 - 20. Июля 2006 :: 10:40
Печать  
kms писал(а) 20. Июля 2006 :: 10:35:
А твой метод документирован в официальной документации?
Т.е. что является гарантией того, что реализация метода ПолучитьОписаниеОшибки() завтра не изменит поведение?

к кому вопрос?
  
Наверх
ICQ  
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Можно ли использовать INSERT и DELETE для спра
Ответ #26 - 20. Июля 2006 :: 10:41
Печать  
какая же это фича? если я дропну не существующую темп.таблицу (к примеру) и в дальнейшем у меня текст этой ошибки будет присутствовать при каждом вызове метода ПолучитьОписаниеОшибки .... нет, это не фича. поэтому называть код (решающий проблему в поставленном вопросе) заведомо опасным я бы не стал.
  
Наверх
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Можно ли использовать INSERT и DELETE для спра
Ответ #27 - 20. Июля 2006 :: 10:49
Печать  
spock писал(а) 20. Июля 2006 :: 10:40:
kms писал(а) 20. Июля 2006 :: 10:35:
А твой метод документирован в официальной документации?
Т.е. что является гарантией того, что реализация метода ПолучитьОписаниеОшибки() завтра не изменит поведение?

к кому вопрос?

Ну, вообще, первая цитата transbublik'а - ему и вопрос.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Можно ли использовать INSERT и DELETE для спра
Ответ #28 - 20. Июля 2006 :: 11:08
Печать  
kms писал(а) 20. Июля 2006 :: 10:49:
Ну, вообще, первая цитата transbublik'а - ему и вопрос.

просто тоже хотел ответить
  
Наверх
ICQ  
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Можно ли использовать INSERT и DELETE для спра
Ответ #29 - 21. Июля 2006 :: 11:24
Печать  
хочу поставить точку в данной дискусссссии:
es3000 писал(а) 14. Июля 2006 :: 13:08:
Никакой ощибки не возвращает

код:
Код
Выбрать все
л_ODBCDatabase = СоздатьОбъект("ODBCDatabase");
л_ODBCRecordset = СоздатьОбъект("ODBCRecordset");
л_ODBCRecordset.УстБД(л_ODBCDatabase);
л_ODBCRecordset.Выполнить("DELETE FROM $Справочник.Склад_Товары");
л_ODBCRecordset.Выполнить("INSERT INTO $Справочник.Склад_Товары (Descr) VALUES (""какой-то товар"")");
сообщить(л_ODBCRecordset.ПолучитьОписаниеОшибки());
л_ODBCRecordset.Закрыть();
 


является ответом на данный пост (еще раз заостряю внимание на решение проблемы в : es3000 писал(а) 14. Июля 2006 :: 13:08:
Никакой ощибки не возвращает

)
т.е. я не претендую что этот код есть универсальным (и не претендовал). но то что он позволит "узреть" ошибку --- это факт.

to kms
kms писал(а) 20. Июля 2006 :: 10:35:
А твой метод документирован в официальной документации?
Т.е. что является гарантией того, что реализация метода ПолучитьОписаниеОшибки() завтра не изменит поведение?

в описании метода Выполнить чёрным по белому :
"...
Возвращаемое значение:
(Число)  1 - запрос выполнился успешно, 0 - не успешно, описание ошибки можно получить вызвав метод GetLastError.
..."
--- явно указано то что "изрекает" spock, но для того что бы увидеть ошибку при выполнении операции: "INSERT INTO $Справочник.Склад_Товары (Descr) VALUES (""какой-то товар"")" не обязательно проверять возвращаемое методом Выполнить значение.
p.s.: ... всё в этом мире относительно.
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать