25.11.2010, 12:35 | #1 |
Участник
|
запрос к базе Oracle
Все добрый день!
Есть задача с под АХ добраться к ораклу и получить некоторые данные. Все вроде получается, но как мне в запрос передать переменную? "SELECT m,i_pr,k_pr from nsi_kr where k_pr=:k_pr order by m " Вот полный код: PHP код:
|
|
25.11.2010, 12:47 | #2 |
Ищущий знания...
|
формируйте запрос с помощью strFmt().
т.е. в выше случае должно быть так: X++: strsql = strFmt("SELECT m,i_pr,k_pr from nsi_kr where k_pr=%1 order by m", );
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: Ilyaae (1). |
25.11.2010, 13:01 | #3 |
Участник
|
В приведенном коде есть создание параметра, но нет добавления этого параметра в объект ADODB.Command (точнее в коллекцию Parameters этого объекта). На VBA это выглядело примерно так:
Код: cmd.Parameters.Append param |
|
25.11.2010, 13:03 | #4 |
Участник
|
Это была попытка реализвать через Parameters. Спасибо, попробую разобраться.
|
|
26.11.2010, 00:24 | #5 |
Moderator
|
Цитата:
формируйте запрос с помощью strFmt().
А вообще, если по теме - то это обсуждали здесь. |
|
26.11.2010, 09:01 | #6 |
Ищущий знания...
|
Цитата:
Сообщение от Андре
Это не одно и тоже. В оригинальном сообщении использовались связанные переменные, которые в вашем запросе пропали.
А вообще, если по теме - то это обсуждали здесь. человеку нужно было составить запрос (в строковом виде) и подставить туда какой то свой критерий, только и всего чем Вам strFmt() для этого не угодил? З.Ы, точнее понял о чем вы, но как мне показалось, топикстартера не интересовали связанные переменные, а интересовала возможность построения запроса
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем Последний раз редактировалось lev; 26.11.2010 в 09:09. |
|
26.11.2010, 09:13 | #7 |
Moderator
|
Цитата:
не понял о чем вы?
Должны ли они остаться в предложенном решении мне судить сложно, но я исхожу из того, что раз человек их использует, то он как минимум знает что это такое и для чего они нужны, а значит не случайно привел их в своем сообщении. Про критическое влияние связанных переменных на производительность СУБД очень хорошо описано у Тома Кайта. Мнение о том, что в случае с Аксаптой все не столь однозначно я привел по ссылке. |
|
26.11.2010, 13:47 | #8 |
Участник
|
Вот еще способ. Для NET. Работает на Ax2009 (для Ax4 тоже наверное заработает).
На клиенте (или сервере в зависимости от того где запускается), естественно, должен быть установлен oracle клиент (NET драйвер устанавливается по умолчанию). Ну и, конечно, в References Axapt - ы должен быть прописан "System.Data.OracleClient" X++: static void Job32(Args _args) { str connectionstring; System.Data.OracleClient.OracleConnection oraDb; System.Data.OracleClient.OracleCommand cmd; System.Data.OracleClient.OracleDataReader orard; System.Data.OracleClient.OracleParameterCollection parameters; ; connectionstring = "Data Source = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.10)(PORT = 1521)))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = ax.domain.ru)));"; connectionstring += "User Id = vasya_pupkin; Password = topsecret;"; oraDb = new System.Data.OracleClient.OracleConnection(connectionstring); oraDb.Open(); cmd = new System.Data.OracleClient.OracleCommand("select title from ax.empltable where emplId = :emplId", oraDb); parameters = cmd.get_Parameters(); parameters.Add("emplId", "123"); cmd.set_CommandTimeout(6000); orard = cmd.ExecuteReader(); while(orard.Read()) { info(orard.GetString(0)); } orard.Close(); oraDb.Close(); } Последний раз редактировалось someOne; 26.11.2010 в 13:50. |
|
|
За это сообщение автора поблагодарили: Ilyaae (1). |