Страница: 1 | 2 |
Вопрос: помогите с хранимой процедурой!!пожалуйста!
Добавлено: 01.11.06 18:15
Автор вопроса: angelnl
Я никогда не писала хранимые процедуры, а теперь появилась необходимость. а я даже не знаю как.
Вобщем смысл такой.
В поле listbox На форме выбирается номер сотрудника. И надо проверить что если в таблице есть такая запись, что стоит же номер сотрудника, а другое поле completed еще не заполнено, то вывести сообщение. Как это сделать? Помогите пожалуйста!!
Ответы
Всего ответов: 17
Номер ответа: 1
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #1
Добавлено: 02.11.06 01:42
1. А при чем тут хранимые процедуры? Это можно проверить обычным SQL-запросом..
2. С SQL-запросом тоже вряд ли кто поможет не зная структуры таблиц, индексов и ключей. Увы, ясновидящих я тут еще не встречал..
3. Вопрос сформулирован крайне сумбурно, недостаточно входной информации..
Номер ответа: 2
Автор ответа:
angelnl
Вопросов: 17
Ответов: 33
Профиль | | #2
Добавлено: 02.11.06 02:00
Есть таблица Remount(id,sotr_id,...,completed)
id=primary key
в Listbox выбираем sotr_id.
Так вот, если completed для этого сотрудника =0, значит он еще занят и нам нужно выбрать другого сотрудника.
А как это сделать sql запросом?
Номер ответа: 3
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #3
Добавлено: 02.11.06 02:19
Если ID заранее известно, то выглядеть это будет примерно так:
Completed тебе уже известно, решаешь,что делать с этим сотрудником дальше..
Номер ответа: 4
Автор ответа:
angelnl
Вопросов: 17
Ответов: 33
Профиль | | #4
Добавлено: 02.11.06 03:01
Да, спасибо. пробовала сейчас, ругается.
remount.id здесь должно быть не важно. Я пробовала так
"select sotr_id
from remount
where completed=0 and sotr_id=@sotr_id"
сам запрос возвращает значения, а потом уже в коде написала, что
if query1<>0 then msgbox(""
И уже во время выподнения он начал ругаться
Номер ответа: 5
Автор ответа:
angelnl
Вопросов: 17
Ответов: 33
Профиль | | #5
Добавлено: 02.11.06 03:09
пишет
Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.
Номер ответа: 6
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #6
Добавлено: 02.11.06 18:05
проблема не на этом этапе - у тебя select - причём здесь constraint'ы?
смотри в дебаге, где ошибается и там разбирайся.
Номер ответа: 7
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #7
Добавлено: 02.11.06 19:03
И откуда у тебя нарисовался query1???
Если это реальный запрос, то как ты можешь его сравнивать с нулем? Или он у тебя возвращает скалярную величину?
Номер ответа: 8
Автор ответа:
angelnl
Вопросов: 17
Ответов: 33
Профиль | | #8
Добавлено: 02.11.06 20:05
он возвращает несколько sotr_order, т.е. не 0.
Номер ответа: 9
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #9
Добавлено: 02.11.06 21:27
Если я тебя правильно понял, то query1 возвращает набор записей, и соответственно не является скалярной величиной, и значит ты НЕ МОЖЕШЬ писать такое выражение query1<>0.. query1 не является числом...
Номер ответа: 10
Автор ответа:
angelnl
Вопросов: 17
Ответов: 33
Профиль | | #10
Добавлено: 03.11.06 19:37
да, наверное вы правы, точнее вы конечно же правы.. Как объясните, что в своем приложении я постоянно использую
if
adapter.fillby(dataset.таблица)=0 then
msgbox("Нет записей"
endif
и это работает).
Номер ответа: 11
Автор ответа:
angelnl
Вопросов: 17
Ответов: 33
Профиль | | #11
Добавлено: 03.11.06 19:38
и как в таком случае мне проверять "занятость" сотудника..? запросм не получилось, с хр. процедурами проблемы..((
Номер ответа: 12
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #12
Добавлено: 03.11.06 23:44
Вы знаете, я был крайне удивлен тем, что Ваш пример работает... Потому как это есть грубейшее нарушение, и никогда не следует так писать!
И вообще я бы очень рекомендовал самой первой строкой вставить инструкцию Option Strict On, что избавит Вас от многих ошибок при неявном приведении к типу ( что и является причиной работоспособности Вашего примера)
Теперь по существу вашего вопроса..
Если вам достаточно просто проверить количество возвращенных строк, то вы можете сделать следующее..
Номер ответа: 13
Автор ответа:
angelnl
Вопросов: 17
Ответов: 33
Профиль | | #13
Добавлено: 04.11.06 17:46
спасибо! странно, что работало. Только вот немного другое я хотела получить по поводу "нет записей". Мне же нужно чтобы не просто был подсчет строк в таблице, а подсчет строк в таблице, отвечающих определнному условию. Т.е. как бы сюда вставить запрос еще??
Номер ответа: 14
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #14
Добавлено: 04.11.06 19:37
Солнц, ну вот смотри.. твой запрос (query1) возвращает набор записей, так? Причем возвращает он тебе только те записи, которые удовлетворяют твоему условию, значит у тебя на руках есть объект, в котором представлены эти самые записи. Это либо DataSet либо DataTable , либо еще что-то (я просто не знаю структуру твоей БД и деталей реализации запроса).В каком виде query1 возвращает тебе записи? Он же должен КУДА-ТО возвращать записи.. не в пустое место же...
Номер ответа: 15
Автор ответа:
angelnl
Вопросов: 17
Ответов: 33
Профиль | | #15
Добавлено: 04.11.06 20:04
Да, в том-то и дело, что пока никуда. Возвращает, я имела в виду. что он может возвращать, т.е. когда я в QueryBuilder нажимаю ExecuteQuery, то он возвращает несколько значений по условию. Мне же не нужен в форме такой элемент, где это все будет храниться, мне просто хочется, чтобы осуществлялась проверка.Т.е. мне надо как-то может организовать что-то чтобы по очереди все эти значения проверялись..??