|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.05.2009, 03:35 | #1 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 32
|
Проблемы с выполнением ХП в Delphi 2009
Здравствуйте,
у меня возникла проблема с выполнением хранимой процедуры(MS SQL Server 2005) в Delphi 2009. Подключаюсь к ХП через ADOCommand, прописываю параметры, после запуска программы во временной таблице SQL результат появляется, но ХП процедура отрабатывает не до конца. ХП должна показать состав изделия. Например, у конкретного изделия 511 составляющих, в таблице же появляется 14 составляющих. При каждом следующем запуске программы появляются ещё 14 и так далее. Попросила проверить работу процедуры в Visual Basic 6 - все работает отлично, в Visual Basic 2008 - при каждом запуске программы появляется по 11 изделий, в Delphi 7 тоже всё работает правильно. У меня Delphi 2009. Важно делать именно в 2009 Delphi. В чем может быть проблема, может кто-нибудь уже сталкивался? |
21.05.2009, 02:50 | #2 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 32
|
Ребята, ну может у кого-нибудь есть предположения почему так происходит? очень нужна помощь.
|
21.05.2009, 11:42 | #3 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
а без ХП из вашей базы не получится селектом выбрать что-нить подходящее?
раз ваша ХП недоступна для разбора, то сложно чем-то помочь единственное что стоит проверить - это запустить вашу ХП из-под какого-нибудь GUI - да хоть из SQLExplorer-а (ну или что у вас там доступно) и проверить - появится ли такой косяк при таком доступе? если косяка нет, то копать настройки адо-шных компонентов или пробовать через тот же 2009-й дельфи получить данные из ХП через другие компоненты (опять таки в целях понять - это косит ХП или все-таки АДО) Последний раз редактировалось soleil@mmc; 21.05.2009 в 11:46. |
26.05.2009, 03:43 | #4 | |
Пользователь
Регистрация: 20.03.2009
Сообщений: 32
|
Цитата:
Пишу запрос: Код:
(т.е. изделие состоит из деталей, которые в свою очередь тоже состоят из каких-нибудь деталей). Теперь чтобы получить составляющие деталей, попавших в таблицу Разузл пишу следущий запрос: Код:
Пробовала использовать вложенный подзапрос,т.е. вместо Разузл.Что писала: Код:
Помоги, пожалуйста, справиться с этим запросом. Последний раз редактировалось MargoNik; 26.05.2009 в 03:55. Причина: Недописала до конца сообщение |
|
26.05.2009, 06:30 | #5 |
Форумчанин
Регистрация: 15.06.2008
Сообщений: 271
|
Попробуйте так:
Код:
|
26.05.2009, 12:37 | #6 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 32
|
Спасибо вам, всё заработало. Вы просто спаситель, очень помогли мне!
Ещё хочу озадачить вас одним вопросом: а как реализовать цикл, что если значение Что из таблицы Разузл равно значению Куда из КБД1, то ещё раз делать выборку и записывать новые значения в таблицу Разузл. Другими словами делать проверку на наличие ещё подъуровней и если надо разузловывать их? |
26.05.2009, 18:46 | #7 | |
Форумчанин
Регистрация: 15.06.2008
Сообщений: 271
|
Цитата:
Не зная структуры вашей таблицы и как хранятся данные, а также основываясь исключительно на предположениях - приведу следующее решение: Код:
|
|
28.05.2009, 04:39 | #8 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 32
|
engy, спасибо вам, хороший пример, вы всё правильно поняли.
А я вот все думаю, нельзя ли как-нибудь в цикле делать что-то наподобии изначального запроса, т.е. обойтись без создания хранимой процедуры? |
28.05.2009, 08:27 | #9 |
Форумчанин
Регистрация: 15.06.2008
Сообщений: 271
|
MargoNik, а чем вас смущают хранимые процедуры?
Мне кажется, что в данном случае как раз будет лучше и практичнее один раз вызвать хранимку, чем в цикле несколько раз вызывать один и тот же запрос. |
01.06.2009, 03:44 | #10 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 32
|
Была в кратковременном отпуске, временно забыв о всех рабочих проблемах
Честно говоря, никогда их сама не создавала.. Извините меня, я наверно уже достала вас своими вопросами, но так уж получается.. Пишу вроде простой цикл для того, чтобы получить состав всех изделий из Form2.ADOQuery1, но получаю лишь состав первого изделия(т.е. значения первой записи из ADOQuery) <CODE> repeat Form3.ADOQuery1.Close; Form3.ADOQuery1.SQL.CLEAR; Form3.ADOQuery1.SQL.ADD('SELECT КБД1.Что,КБД1.Куда,КБД1.Кол_во,SPRA V1.Пр_техн3 FROM SPRAV1 INNER JOIN КБД1 ON SPRAV1.Decim=КБД1.Что WHERE (([Что]<>[Куда]) AND КБД1.Куда="'+Form2.ADOQuery1Децимал ь_изд.AsString+'")'); Form2.ADOQuery1.Next; until Form2.ADOQuery1.Eof; Form3.ADOQuery1.Open; </CODE> Поможете разобраться с проблемой в цикле? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
WaitForSingleObject в Delphi 2009 | Хамяг | Win Api | 11 | 03.12.2009 09:06 |
ActiveX в Delphi 2009 | euronymous | Общие вопросы Delphi | 2 | 10.05.2009 15:11 |
Delphi 2009 и ADO | Хитрец | БД в Delphi | 2 | 07.02.2009 12:12 |