Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 28

Не понимаю что делает процедура (try, catch)

25.03.2013, 16:25. Показов 1278. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Объясните, пожалуйста, что делает эта процедура:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
bool __fastcall TMain::TryExecQuery(TADOQuery* zapros)
{
    try
    {
        zapros->ExecSQL();
    }
    catch (Exception &exception)
    {
        
        Trace(exception.Message);
        return false;
    }
    return true;
Я так понимаю оно проверяет запрос на выполнимость и если там запрос выдаст ошибку, то оно ее помещает в &exception. Правильно ли я понимаю?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.03.2013, 16:25
Ответы с готовыми решениями:

Не понимаю что за вирус и что делает со шрифтами
Все так и не могу разобраться с данным вирусом. Вот скрин что он вытворяет И так почти везде, msconfig, любые инсталяторы, HiJackThis,...

Не понимаю что делает этот цикл
k2 = 0: k4 = 0: k5 = 0 For j = 1 To 5 If Cells(i, j + 2) = 2 Then k2 = k2 + 1 If Cells(i, j + 2) = 4 Then k4 = k4 + 1 ...

Не понимаю, что делает приведенный цикл for
Вот код, не совсем понимаю, что тут делает цикл for, объясните пожалуйстаю:cry: #include <iostream> void compress(char...

7
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
25.03.2013, 16:36
ExecSQL() выполняет запрос, сохраненный в SQL property.
А в блоке catch exception.Message пишется в Trace.
1
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 28
25.03.2013, 17:06  [ТС]
Цитата Сообщение от chizz Посмотреть сообщение
ExecSQL() выполняет запрос, сохраненный в SQL property.
А в блоке catch exception.Message пишется в Trace.
Но при каких условиях оно возвращает истину, а при каких ложь?

Например у меня есть подобная процедура (подобная к TryExecQuery из прошлого сообщения):
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool __fastcall TMain::TryOpenQuery(TADOQuery* zapros)
{
    try
    {
        zapros->Open();
    }
    catch (Exception &exception)
    {
        Trace(exception.Message);
    }
    return true;
}
А потом вот эта процедура, которая зависит от TryOpenQuery :

C++
1
2
3
4
5
6
7
8
9
bool __fastcall TMain::GetNumber(String label, String &number, String &isloco, String &tara)
{
    query->Close();
    query->SQL->Clear();
    query->SQL->Add("select number,isloco,tara from vagons where label = " + label);
    TryOpenQuery(query);
   // еще тут код, который не может ни на что влиять - просто присваивания 
    return true;
}
Так вот, мне кажется что функция GetNumber всегда должна возвращать ИСТИНУ ... но наверное это не так и единственное что может повлиять это вот вызов в ней TryOpenQuery .... и вот хочу понять - каким образом может возвратиться ЛОЖЬ в этой процедуре (в GetNumber) ?

Добавлено через 1 минуту
Просто код не я писал, а мне нужно будет на основе него создавать ... ну вот потому пытаюсь разобраться.
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
25.03.2013, 18:07
TryOpenQuery(query);
может возвратить "ЛОЖЬ" - но actually он не возвращает "ЛОЖЬ", а возвращает какой-либо exception, который и обрабатывается в try/catch - в случае если нет доступа к БД или запрос query кривой.
1
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 28
25.03.2013, 18:48  [ТС]
Цитата Сообщение от chizz Посмотреть сообщение
TryOpenQuery(query);
может возвратить "ЛОЖЬ" - но actually он не возвращает "ЛОЖЬ", а возвращает какой-либо exception, который и обрабатывается в try/catch - в случае если нет доступа к БД или запрос query кривой.
Дело в том что у меня в программе этот запрос есть в таком условии:
C++
1
if(!TryOpenQuery(query))
То он все-таки возвращает НОЛЬ или не ноль ...

То есть я правильно понимаю - если кривой запрос или нет доступа к БД, то возвращаемое значение будет эквивалентно ЛОЖЬ ?
А если например и доступ есть и запрос нормальный, но вот ни одной строки запрос не возвратил - какое тогда значение возвратит TryOpenQuery(query) ? (как я понял то он возвращает ноль (ложь) , но вот может не правильно понимаю и не совсем так работает).
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
26.03.2013, 10:14
Судя по тексту TryOpenQuery возвращает либо true либо вызывает Exception.

Вот например в bool TryExecQuery в случае Exception возвращается false, если запрос удачно прошел - true.
C++
1
2
3
4
5
6
7
8
9
10
11
 try
    {
        zapros->ExecSQL();
    }
    catch (Exception &exception)
    {
        
        Trace(exception.Message);
        return false;
    }
return true;
В TryOpenQuery возвращается либо true, либо ничего (Exception). False TryOpenQuery не возвращает, судя по коду.
1
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 28
26.03.2013, 12:52  [ТС]
Ну тогда получается что GetNumber всегда возвращает ИСТИНУ ?
Ведь TryOpenQuery даже если не возвратит результат, то выполнение процедуры оно не прервет.
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
26.03.2013, 12:56
GetNumber возвращает ИСТИНУ только в случае успешного завершения.
И да, если TryOpenQuery не прерывает выполнение процедуры, то GetNumber всегда будет возвращать истину.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.03.2013, 12:56
Помогаю со студенческими работами здесь

Не понимаю, что делает части кода
Всем привет. Есть пример кода с заданием. Имеется произвольный список, состоящий из числовых атомов. Преобразовать список по следующему...

Что делает процедура?
Здравствуйте, помогите разобраться для чего данный код: Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) ...

Что делает процедура?
Что делает эта процедура при нажатии кнопки "Новая"? procedure TFormMain.NNewClick(Sender: TObject); begin ...

Что делает эта процедура?
PROCEDURE change ( name_array IN owa_text.vc_arr, value_array IN owa_text.vc_arr ) IS BEGIN FOR i IN 1..name_array.COUNT() ...

Что делает данная процедура?
EXEC sp_executesql N'CREATE OR ALTER PROCEDURE dbo.ttn_prixDEL @tpNo AS VARCHAR(20), @retVal AS BIT OUTPUT AS DECLARE @id_mat AS...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru