Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376

Delphi + sql процедура с входной и выходной переменными

26.02.2017, 12:07. Показов 2945. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте .
подскажите пожалуйста.
работаю в mssql и delphi 10/
создал процедуру
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
USE ....
GO
CREATE PROCEDURE proc_outd (@ind AS nvarchar(50))
AS
DECLARE @outd AS nvarchar(50) 
SELECT
@outd=COUNT(s.h_id)   
FROM 
....
....
...
WHERE ......
AND s.h_id =@ind
подключаю входную переменную

Delphi
1
2
3
4
adoQuery14.Close;
adoQuery14.SQL.Clear;
adoQuery14.SQL.text:='exec proc_out '+cxGrid4DBTableView1.DataController.GetDisplayText(cxGrid4DBTableView1.DataController.FocusedRecordIndex,0)  ;// это я считываю с грида и предаю в процедуру входящее значение
adoQuery14.Open;
вопрос таков как мне получить в delphi выходную переменную @outd
подскажите плиз . не знаю как реализовать.
заранее благодарен.

Добавлено через 58 минут
попробовал
Delphi
1
outd:=adoQuery24.FieldByName('@outd').AsString;
неполучается

Добавлено через 13 минут
дописал
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
USE ....
GO
CREATE PROCEDURE proc_outd (@ind AS nvarchar(50))
AS
DECLARE @outd AS nvarchar(50) 
[B]EXEC @outd OUTPUT[/B]
SELECT
@outd=COUNT(s.h_id)   
FROM 
....
....
...
WHERE ......
AND s.h_id =@ind
теперь delphi выдаёт: Неудолось наййти хранимую процедуру ""
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.02.2017, 12:07
Ответы с готовыми решениями:

Входной и выходной файлы
Сейчас на олимпиадных задачах требуется, что бы данные подавались из файла Input.txt и записывались в выходной файл - output.txt. Как это...

Входной и выходной сигнал RC
Добрый день. Помогите пожалуйста: есть теория документ 1 нужно в MathCAD получить результат фото 1. Как эти формулы правильно записать? ...

Входной и выходной файлы
нужно сделать, чтобы переменная s бралась из файла и чтобы результат программы выводился в отдельный файл имя входного файла -...

18
Модератор
 Аватар для D1973
9916 / 6453 / 2455
Регистрация: 21.01.2014
Сообщений: 27,389
Записей в блоге: 3
26.02.2017, 12:14
pek, а почему ADOQuery??? Для работы с хранимыми процедурами есть свой компонент - TADOStoredProc
1
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
26.02.2017, 12:26  [ТС]
до это го момента я только делал приложение и процедуры были с входными параметрами.
и я не знаком с TADOStoredProc -- подскажите как реализовать что я хочу .
0
Модератор
 Аватар для D1973
9916 / 6453 / 2455
Регистрация: 21.01.2014
Сообщений: 27,389
Записей в блоге: 3
26.02.2017, 12:36
Цитата Сообщение от pek Посмотреть сообщение
подскажите как реализовать
У меня нет установленного ни MS SQL, ни чего-то наподобие... Я уже и забыл, когда это использовал, лет 10 точно прошло...
Цитата Сообщение от pek Посмотреть сообщение
я не знаком с TADOStoredProc
Ну дык познакомся...
Тыц
1
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
26.02.2017, 13:46  [ТС]
сделал вот так
добавил компонент
Delphi
1
2
3
4
//adostoredproc1.ExecProc;
ADOStoredProc1.Parameters.ParamValues['@ind'] := cxGrid2DBTableView1.DataController.GetDisplayText(cxGrid2DBTableView1.DataController.FocusedRecordIndex,0)  ;
outd:= ADOStoredProc1.Parameters.ParamValues['@outd'];
showmessage(outd);
ругается что @outd нот фоунд это что в процедуре капаться?

Добавлено через 17 минут
при включение
adostoredproc1.ExecProc;
---Не удолось найти хранимую процедуру ""
вот начало процедуры
ALTER procedure [dbo].[proc_outd] (@ind as nvarchar(50))
as
declare @outd as nvarchar(50)
EXEC @outd OUTPUT
подскажите что не так

Добавлено через 20 минут
также пишет что в процедуре и функции слишком много аргументов это если я меняю местами параметры в таблицы параметров @ind и return_value
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
26.02.2017, 15:07
Цитата Сообщение от pek Посмотреть сообщение
CREATE PROCEDURE proc_outd (@ind AS nvarchar(50))
AS
DECLARE @outd AS nvarchar(50)
SELECT
@outd=COUNT(s.h_id) *
FROM
....
....
...
WHERE ......
AND s.h_id =@ind
это с каких пор такой синтаксис ХП стал?

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
CREATE PROCEDURE proc_outd (@ind int, @outd int output)
AS
BEGIN
SELECT
@outd=COUNT(s.h_id)   
FROM 
....
....
...
WHERE ......
AND s.h_id =@ind
END
1
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
28.02.2017, 12:14  [ТС]
подскажите ещё вот такую штуку.
как я ранее говорил беру данные из грида передаю в процедуру и из процедуры получаю значение.
возникает такая проблема : с первого раза выдаёт правильное значение со второго раза уже неправильно .
то есть надо включать обновление только ни пойму чего процедуры или в делфи чего то

Добавлено через 10 минут
даже нет со второго раза только только выдаёт правильное значение
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
28.02.2017, 14:20
Саму процедуру, уж будь добр, отладь без дельфи
1
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
28.02.2017, 15:44  [ТС]
я не пойму что допилить в процедуре
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
USE ... 
GO
/****** Object:  StoredProcedure [dbo].[proc_outd]    Script Date: 28.02.2017 19:29:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET NOCOUNT ON;
GO
 
ALTER procedure [dbo].[proc_outd] (@in int, @out int output)
as
begin
--set @out=''
select
@out=count(s.h_id)   
from 
 
where ....l
and s.h_id =@in
end
подскажите что влияет на то что срабатывает с первого раза
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
28.02.2017, 16:41
Цитата Сообщение от pek Посмотреть сообщение
как я ранее говорил беру данные из грида передаю в процедуру и из процедуры получаю значение.
возникает такая проблема : с первого раза выдаёт правильное значение со второго раза уже неправильно .
лучше не говорить, а код показать
1
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
28.02.2017, 16:58  [ТС]
где именно капать

Добавлено через 1 минуту
в чём может быть проблема
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
28.02.2017, 17:13
Цитата Сообщение от pek Посмотреть сообщение
как я ранее говорил беру данные из грида передаю в процедуру и из процедуры получаю значение.
неужели вместо слов код трудно показать? Проблема именно в этом: на словах делаете одно, в по факту - совсем другое
1
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
28.02.2017, 17:20  [ТС]
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET NOCOUNT ON;
GO
 
ALTER procedure [dbo].[proc_outd] (@in int, @out int output)
as
begin
--set @out=''
select
@out=count(*)   
from Ls
left join  DL on
                  Ls.l_id=DL.l_id
where DL.l_id is null
and h_id  like @in
end
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
28.02.2017, 17:28
и где здесь
Цитата Сообщение от pek Посмотреть сообщение
беру данные из грида передаю в процедуру и из процедуры получаю значение
1
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
28.02.2017, 17:38  [ТС]
Delphi
1
2
3
ADOStoredProc1.Parameters.ParamValues['@ind'] := cxGrid2DBTableView1.DataController.GetDisplayText(cxGrid2DBTableView1.DataController.FocusedRecordIndex,0)  ;
outd:= ADOStoredProc1.Parameters.ParamValues['@outd'];
showmessage(outd);
вот что я имел ввиду
только это почемуто не сразу правильно выдаёт результт со второго раза
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
28.02.2017, 17:43
а где ExecProc между заданием параметра и получением результата?
1
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
28.02.2017, 18:15  [ТС]
спасибо.
ExecProc я помещал то сверху то снизу этого вырождения.
не знал что надо между.
снимаю шляпу.
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
28.02.2017, 18:19
Цитата Сообщение от pek Посмотреть сообщение
не знал что надо между.
задать параметр, вычислить, получить результат. Как-то трудно представить иную последовательность
Цитата Сообщение от pek Посмотреть сообщение
снимаю шляпу.
1
0 / 0 / 1
Регистрация: 27.04.2016
Сообщений: 376
28.02.2017, 18:36  [ТС]
вопрос конечно не по этой теме
но не могли бы подсказать как в sql настроить отладчик. просто речь была про отладку процедуры.
пишет у меня отладка "Для продолжения отладки необходимо настроить брандмауэр"
я нащел инструкцию от майкрософт как настраивать но ничего не помогает.
подскажите как сделать чтобы отладка работала.
зы. антивирус каспер мож он не пускае
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.02.2017, 18:36
Помогаю со студенческими работами здесь

Входной и выходной сигнал
Здравствуйте, ув. Форумчане :) Была поставлена задача "Разработка программы моделирования линейного элемента с насыщением". ...

Входной/Выходной файл
выдает ошибку "ошибка ввода вывода 103 файл не открыт" вот код program pr; var a,c:text; b:array of integer; i,s,j:integer; ...

Сделать входной и выходной файл
нужно зделать из этой задачи входные файлы и выходные помоите плиз var Form1: TForm1; a:array of integer; b:array of integer; ...

Входной и выходной параметр хранимой процедуры
Хотел сделать процедуры с входным и выходным параметрами. Workbench ругается на запятую между параметрами. Что не так подскажите. ...

Зачем очищать входной и выходной поток ?
Зачем очищать входной и выходной поток


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
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 Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru