С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/27: Рейтинг темы: голосов - 27, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 19.11.2009
Сообщений: 15

Получение результата выполнения ADOStoredProc

06.08.2010, 17:12. Показов 5391. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. При выполнении хранимой процедуры столкнулся с проблемой получения результата её работы. База данных на SQL сервере, клиентское приложение на C++B 6.
Суть проблемы в следующем, ранее я уже делал эту базу данных, только клиентское приложение было на Access. Там при выполнении хранимой процедуры я использовал следующий подход:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Private Sub Cena()
    Dim qdfCen As QueryDef
    Dim rstCen As Recordset
 
    ' Create a temporary QueryDef object to retrieve
    ' data from a Microsoft SQL Server database.
    Set qdfCen = CurrentDb.CreateQueryDef("")
    With qdfCen
        .Connect = "ODBC;DSN=istok;UID=user-пк;PWD='';DATABASE=sbit"
 
        .ReturnsRecords = True
        .SQL = "EXECUTE GetCenyByKodnov '" & Список14.Value & "'"
        Set rstCen = .OpenRecordset(dbOpenSnapshot)
    End With
 
    With rstCen
        Список14 = !код_товара
        Поле46 = !цена_товара
 
        rstCen.MoveNext
 
        .Close
    End With
 
Exit_Sub:
    Exit Sub
Код немного упрощён.
Вот текст самой процедуры на SQL сервере:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE PROCEDURE GetCenyByKodnov
    @код_товара INT
AS
    IF EXISTS (SELECT код_товара
           FROM   Цены
           WHERE код_товара = @код_товара)    
        SELECT*
        FROM Цены
        WHERE код_товара = @код_товара
    ELSE
    BEGIN
        RAISERROR ('Не найдена запись, соответствующая введённому коду товара.', 16, 1)
        WITH NOWAIT
    END
GO
Есть ли вожмозность в С++В использовать похожий подход? Вот текст из С++В:

C++
1
2
3
4
5
ADOStoredProc1->Parameters->ParamByName("@код_товара")->Value=StrToInt(DBEdit15->Text);
ADOStoredProc1->Prepared=true;
ADOStoredProc1->ExecProc();
 
DBEdit14->Text=
Получаеться я передаю необходимый параметр в процедуру, она выполняеться, а как перехватить результат??
Заранее огромное спасибо за помощь, просто очень нужно это для диплома.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.08.2010, 17:12
Ответы с готовыми решениями:

Получение результата POST-запроса
Здравствуйте! Недавно научился посылать POST-запросы через компонент IdHTTP. Вообщем-то результатом является страница html, сгенерированная...

Занесения результата выполнения SQL запроса в TreeView
Подскажите пожалуйста, как реализовать возможность занесения результатов запроса в TreeView под определенный Items? Например, я хочу в...

Получение результата в виде одномерного массива
Здравствуйте уважаемые знатоки. Пытаюсь получить результат в виде одномерного массива с помощью компоненты Memo. Начальные значения ввожу в...

5
64 / 64 / 10
Регистрация: 19.10.2009
Сообщений: 234
07.08.2010, 15:04
Цитата Сообщение от slrvsp Посмотреть сообщение
а как перехватить результат??
Заранее огромное спасибо за помощь, просто очень нужно это для диплома.
Перепеши немного процедуру чтоб она тебе возвращала не только цену товара или что там у тебя но и допустим значение (0 или 1) что допустим будет означать 1 - найдена, 2 - ошибка, и текст этой ошибки выводи в самом клиенте а не в процедуре!
1
1 / 1 / 0
Регистрация: 19.11.2009
Сообщений: 15
07.08.2010, 16:24  [ТС]
Нет вопрос не в том, чтобы получить результат выполнено/не выполнено, а в том чтобы получить результат поля, т.е. запрос возвращает строку в которой код товара соответствует введённому коду, а также в строке есть поле цена товара, вот доступ к этому полю мне и нужно получить, т.е. получить значение стоящее в этом поле (например для товара с кодом 10 цена составляет 1000).

Добавлено через 1 час 2 минуты
После 2-х дней перекапывания интернета и интенсивного изучения всех особенностей Delphi, так как на билдере я ничего путного не нашёл решение было найдено, причём решение элементарное. Вот код:
C++
1
2
3
4
5
6
int a,b;
ADOStoredProc1->Close();
ADOStoredProc1->Parameters->ParamByName("@код_товара")->Value=StrToInt(DBEdit15->Text);
ADOStoredProc1->Prepared=true;
ADOStoredProc1->Open();
DBEdit14->Text=ADOStoredProc1->FieldByName("цена товара")->AsInteger;
Нужно было просто использовать FieldByName. Эх как говориться всё гениальное просто. Спасибо всем прочитавшим, надеюсь мой ответ кому нибудь пригодиться.
0
0 / 0 / 0
Регистрация: 26.01.2012
Сообщений: 4
26.01.2012, 14:38
slrvsp, а вы не знаете, как перехватить в билдере сообщение об ошибке из sql???
0
1 / 1 / 0
Регистрация: 19.11.2009
Сообщений: 15
26.01.2012, 22:03  [ТС]
Дипллом делал давно, но если мне память не изменяет, то raiserror у меня в коде sql выводит ошибку и в билдере при неверном выполнении. Сча допише ущё кусочек кода из билдера для перехвата ошибок, вроде бы.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        catch (...)
        {
                 try
                 {
                         throw Exception("");
                 }
                 catch (Exception &exception)
                 {
                         Application->ShowException(&exception);
                 }
        }
        return 0;
}
как то так
1
0 / 0 / 0
Регистрация: 26.01.2012
Сообщений: 4
28.01.2012, 01:20
Огромное спасибо))) Это как раз то__))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.01.2012, 01:20
Помогаю со студенческими работами здесь

Получение результата после POST запроса
Как получить код страницы после POST запроса? параметры я передал верно, но после того как я загрузил код страницы в мемо, код остался...

AdoStoredProc и DB2
При попытке выполнить процедуру получаю ошибку: Процедура проверена на сервере, автоматически находится в inspector-е. Типы данных тоже...

Проблемы с ADOStoredProc
Здравствуйте. Работаю BCB6 +MSSQLSERV2000 +ADO. Началось с того, что пытаясь вызвать одну ХП процедуру после другой , вылетает ошибка по...

Ошибка компонента ADOStoredProc
TADOStoredProc* ADP; ADP = new TADOStoredProc(this); ADP->Connection = Form1->ADOConn; ADP->ProcedureName =...

Получение результата выполнения сторонней программы
есть программа на С++, результатом которой является рассчет переменной х. каким образом передать эту переменную обратно в php скрипт? а...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru