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

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

06.08.2010, 17:12. Показов 5697. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru