![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
18192123 |
![]()
Сообщение
#1
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
В базе (на IBExpert) есть хранимая процедура:
Код ALTER PROCEDURE MED_ACT_AND_SPEC ( code_act integer) returns ( code_spec integer) as begin for select "MED_ACT_and_SPEC".code_spec from "MED_ACT_and_SPEC" where "MED_ACT_and_SPEC".code_act=:code_act into :code_spec do suspend; end которая возвращает набор из числовых значений.. В Builder по нажатию кнопки вот такой обработчик:
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Обычно (по крайней мере при использовании TADOStoredProc это работает), если хранимая процедура возвращает не одно значение, а набор данных, то для получения всего набора можно вместо ExecProc() сделать:
sp->Open(); |
18192123 |
![]()
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Обычно (по крайней мере при использовании TADOStoredProc это работает), если хранимая процедура возвращает не одно значение, а набор данных, то для получения всего набора можно вместо ExecProc() сделать: sp->Open(); у меня IBStoredProc.. и программа требует "use ExecProc for Procedure"... однако если добавить ExecProc, то ситуация не меняется... Сообщение отредактировано: 18192123 - 22.12.2008 0:46 |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата Вызов ExecProc предназначен для хранимых процедур, которые не возвращают набор данных. Для процедур, возвращающих набор данных используется метод Open, либо Active:=true. Итого, что имеем: у тебя есть хранимая процедура, тебе надо из нее вернуть таблицу (ну, не вожно, несколько данных), так? Значит, делаешь следующее: На форму добавляешь TIBQuery, в ней - вызываешь хранимую процедуру, запустить Query можно так, как я показал, через Open, и прочитать результаты через First/Next... (это все чисто теоретически, у меня нет установленного IBase, поэтому проверить не могу). В IBQuery.SQL - что-то типа SQL SELECT * FROM MED_ACT_AND_SPEC(:CODE_ACT) , опиши параметр CODE_ACT у IBQuery, и присвой ему значение аналогично тому, как ты делала это для IBStoredProc ... |
18192123 |
![]()
Сообщение
#5
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Пусть свой набор значений я получила...Записала его в массив..
И хочу из этого набора выбрать число, и выбор этот должен осуществляться случайным образом (но из имеющегося набора!)..Скажите пожалуйста, можно такое осуществить? Сообщение отредактировано: 18192123 - 25.12.2008 5:02 |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Лучше записывать результаты в vector, тогда твоя задача сведется к тому, чтобы сгенерировать случайное число в интервале от 0 до количества элементов в векторе:
std::srand(std::time(0)); |
Гость |
![]()
Сообщение
#7
|
Гость ![]() |
Лучше записывать результаты в vector, тогда твоя задача сведется к тому, чтобы сгенерировать случайное число в интервале от 0 до количества элементов в векторе: std::srand(std::time(0)); а если результаты, которые нужно будет записывать в vector, не являются непрерывным набором... т.е например, такой набор - 1,3,18,19...ноль вообще никогда не появится в моём наборе... Тогда использование vector мне поможет? |
18192123 |
![]()
Сообщение
#8
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
А какая разница, что у тебя хранится в векторе, непрерывны ли данные или нет? Ты записала допустимые значения в вектор? Записала. Любое значение из записанных в векторе может быть выбрано? Вот и выбираешь: получаешь случайный индекс элемента, хранящего информацию...
Цитата ноль вообще никогда не появится в моём наборе Зато вектор всегда начинается с нулевого элемента ![]() |
18192123 |
![]()
Сообщение
#10
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Лучше записывать результаты в vector, тогда твоя задача сведется к тому, чтобы сгенерировать случайное число в интервале от 0 до количества элементов в векторе: std::srand(std::time(0)); Не поняла, как этот вектор заполнять... Вот массив y будет содержать те значения, которые мне нужны для последующего выбора..
Объясните пожалуйста, КАК именно в этот вектор записать? И ещё, Builder ругается на строки
Сообщение отредактировано: 18192123 - 25.12.2008 21:39 |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Цитата Builder ругается на строки #include <vector> присутствует? (это по поводу второй строки, насчет первой - вообще непонятно, srand описан в stdlib.h, он подключается в любом случае к проекту. Попробуй убрать std: ![]() Цитата Не поняла, как этот вектор заполнять... Еще проще, чем массив:IBQuery2->Open(); |
18192123 |
![]()
Сообщение
#12
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
А нужно ли очищать этот вектор, а то у меня в нём всё время остаётся одни и тот же набор...а так быть не должно..
|
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Цитата А нужно ли очищать этот вектор Если тебе больше не нужны значения, хранящиеся в векторе - вызывайmyVector.clear(); // это удалит из вектора все элементы, и сделает его длину = 0 , потом можешь начинать заполнять заново... |
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 8:51 |