15 / 8 / 1
Регистрация: 19.07.2012
Сообщений: 70
|
||||||
1 | ||||||
MySql Ado StoredPocedure return @parametr06.11.2012, 17:16. Показов 3169. Ответов 13
Метки нет (Все метки)
Работаю с mysql через ADO, необходимо вызывать хранимую процедуру которая бы возвращала один параметр. Запросы с помощью ADOQuery1.Connection.Execute выполняются без проблем, не получается вытащить параметр [MENTION=91323]res[/MENTION]. Если делать через ADOQuery1.SQL.ADD то все получается но 10500 записей обрабатываются порядка 5 минут, что нереально долго(ощущение, что происходят разрывы). Как можно заставить работать это или сделать с ADOQuery1.SQL.ADD и ADOQuery1.FieldValues[ [MENTION=91323]res[/MENTION]'] чтобы работало побыстрее. Компонент хранимой процедуры не стал использовать т.к. он показался тут сверх излишним. Заранее спасибо.
0
|
06.11.2012, 17:16 | |
Ответы с готовыми решениями:
13
Return в mysql есть? ADO+MySQL ADO,MySQL BCB6, ADO, MySQL |
64 / 64 / 10
Регистрация: 19.10.2009
Сообщений: 234
|
|
06.11.2012, 17:59 | 2 |
Во первых хотелось бы взглянуть на текст процедуры, во вторых совсем не понятно зачем вы снова делаете запрос после выполнения процедуры
просто делайте Adoquery1.sql.add(Qry); adoquery1.open; и всё можно читать реультат процедуры в самой процедуре в конце обязательно должна быть строка select @res чтоб она что то вернула и почему компонет хранимой процедуры вам показался сверх излишним тоже непонятно
1
|
15 / 8 / 1
Регистрация: 19.07.2012
Сообщений: 70
|
|
07.11.2012, 09:17 [ТС] | 3 |
Спасибо. Хорошо, поставил в саму процедуру select @res, а как теперь получить в Делфи то что мы в процедуре выбрали?
0
|
64 / 64 / 10
Регистрация: 19.10.2009
Сообщений: 234
|
|
07.11.2012, 10:20 | 4 |
например так, после
adoquery1.open; if adoquery1.active and (adoquery1.RecordCount > 0) then переменная := adoquery1.Fields[0].Value;
1
|
15 / 8 / 1
Регистрация: 19.07.2012
Сообщений: 70
|
|||||||||||
07.11.2012, 11:22 [ТС] | 5 | ||||||||||
В Делфи в режиме отладки "adoquery1.RecordCount" = 1 и adoquery1.active=True, но adoquery1.Fields=(). В итоге res тоже пусто.
0
|
64 / 64 / 10
Регистрация: 19.10.2009
Сообщений: 234
|
|
07.11.2012, 13:10 | 6 |
Скинь весь текст хранимой процедуры
1
|
15 / 8 / 1
Регистрация: 19.07.2012
Сообщений: 70
|
||||||
07.11.2012, 13:35 [ТС] | 7 | |||||
0
|
64 / 64 / 10
Регистрация: 19.10.2009
Сообщений: 234
|
|
07.11.2012, 14:33 | 8 |
вообщем убирай промежуточные записи типа select @Goods_ID просто результат выводится на разных вкладках или как это объяснить. вообщем как тут прочитать не первое значение я не в курсе никогда не приходилось, можешь заменить свои выводы на одну строку типа select @val1, @val2, @val3 и т.д. тогда сможешь получить результат всех переменных
1
|
15 / 8 / 1
Регистрация: 19.07.2012
Сообщений: 70
|
||||||
07.11.2012, 15:03 [ТС] | 9 | |||||
Попробовал еще сделать через StoredProcedure, выдает исключение при запуске "неправильно определен объект Parameter предоставлены несогласованные или неполные сведения"
0
|
64 / 64 / 10
Регистрация: 19.10.2009
Сообщений: 234
|
|||||||||||
07.11.2012, 15:48 | 10 | ||||||||||
Добавлено через 12 минут зачем ты всё пытаешься как то усложнить, определись что должна тебе вернуть процедура напиши в самомо конце процедуры select @val1 as myvalue1, @val2 as myvalue2, @val3 as myvalue3, ... затем
1
|
15 / 8 / 1
Регистрация: 19.07.2012
Сообщений: 70
|
||||||
07.11.2012, 16:23 [ТС] | 11 | |||||
Благодарю за терпение. Но пока у меня проблема с входными параметрами, при вызове ADOStoredProc1.Open вылазит исключение "IN or INOUT argument 23 for routine for AddGoods is not variable or New Pseudo-variable in BEFORE triger"
0
|
15 / 8 / 1
Регистрация: 19.07.2012
Сообщений: 70
|
|
08.11.2012, 16:52 [ТС] | 12 |
Сделал все в точности так, в mysql убрал другие select, теперь только result = 100 в менеджере выдает, однако тут при вызове res := ADOStoredProc1.FieldByName('result').Value.AsString; после Open исключение Field 'result' not found. В чем еще мб причина? Может еще что-то попробовать.
0
|
15 / 8 / 1
Регистрация: 19.07.2012
Сообщений: 70
|
|
15.11.2012, 14:34 [ТС] | 13 |
Спасибо, разобрался!
Сейчас не могу понять почему с русской кодировкой проблемы в базе. ADOStoredProc1.Parameters[1].Value:= 'Проверка'; В отладчике значение ADOStoredProc1.Parameters[1].Value = ''@>25@:0'" в базе отображается уже как ???????? Пробовал менять в базе кодировку на utf и на ascii. Что-то можно с этим сделать?
0
|
15 / 8 / 1
Регистрация: 19.07.2012
Сообщений: 70
|
|
19.11.2012, 09:22 [ТС] | 14 |
Решил проблему использованием ODBC Connector версии 3.51.
0
|
19.11.2012, 09:22 | |
19.11.2012, 09:22 | |
Помогаю со студенческими работами здесь
14
Delphi7 - ADO - MySQL ADO и подключение к MySQL ADO data driver и mysql Что это isOk(int s),setAge(int g){if(isOk(g){age=g;return true;}else{.;return false;}}.getName(){return name;}? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |