|
23.12.2007, 15:51 | #1 |
1C
|
Еще вопрос по AxaptaCOMConnector
Вот рабочий кусок кода:
Код: AxaptaQuery = Axapta.CreateObject("Query"); AxaptaDataSource = AxaptaQuery.Call("AddDataSource", 77); AxaptaQueryRun = Axapta.CreateObject("QueryRun", AxaptaQuery); Пока AxaptaQueryRun.Call("Next") Цикл Buffer = AxaptaQueryRun.Call("GetNo", 1); Сообщить("1 -- " + Buffer.field("RecID") + "::" + Buffer.field("Name")); КонецЦикла; а вот этот: Код: axaptaCustTable = Axapta.CreateRecord("CustTable"); axaptaCustTable.ExecuteStmt("select * CustTable"); Пока axaptaCustTable.found() Цикл Сообщить("0 -- " + axaptaCustTable.field("RecID") + "::" + axaptaCustTable.field("Name")); КонецЦикла; почему так есть и как это решить? |
|
23.12.2007, 16:12 | #2 |
1C
|
в таком варианте:
X++: axaptaCustTable.ExecuteStmt("select * from %1 where %1.Name == 'CustTable'"); |
|
23.12.2007, 16:39 | #3 |
Member
|
А есть клиент, у которого название "CustTable"?
__________________
С уважением, glibs® |
|
23.12.2007, 16:46 | #4 |
1C
|
|
|
23.12.2007, 16:48 | #5 |
1C
|
вот, посматриваю в сторону SQLBuilderSelectExpression - только никак понять не могу, как он работает :-)
|
|
23.12.2007, 16:56 | #6 |
1C
|
да, glibs, я ступил с параметрами
а как из нескольких таблиц выбрать? и еще, метод Found не переводит на следующую запись выборки... а примеров как сделать не нашел... |
|
23.12.2007, 17:00 | #7 |
1C
|
О!
X++: axaptaCustTable = Axapta.CreateRecord("CustTable"); axaptaCustTable.ExecuteStmt("select * from %1"); //axaptaCustTable.ExecuteStmt("select *"); axaptaCustTable.found() (); ("0 -- " + axaptaCustTable.field("RecID") + "::" + axaptaCustTable.field("Name")); axaptaCustTable.next(); ; только вот теперь разобраться как из нескольких таблиц вытянуть данные, соединив их... |
|
23.12.2007, 19:04 | #8 |
Member
|
У меня не получилось . Я пробовал рыть примерно в таком направлении. Дальше рыть нет времени...
axaptaCustTable = Axapta.CreateRecord("CustTable"); axaptaCustTrans = Axapta.CreateRecord("CustTrans"); axaptaCustTable.ExecuteStmt("select * from %1 join %2 where %1.SalesId == %2.SalesId"), axaptaCustTable, axaptaCustTrans; Если хочешь — можешь поискать информацию в google. Авось повезет.
__________________
С уважением, glibs® |
|
23.12.2007, 20:12 | #9 |
1C
|
Цитата:
Сообщение от glibs
У меня не получилось . Я пробовал рыть примерно в таком направлении. Дальше рыть нет времени...
axaptaCustTable = Axapta.CreateRecord("CustTable"); axaptaCustTrans = Axapta.CreateRecord("CustTrans"); axaptaCustTable.ExecuteStmt("select * from %1 join %2 where %1.SalesId == %2.SalesId"), axaptaCustTable, axaptaCustTrans; Если хочешь — можешь поискать информацию в google. Авось повезет. в гугле, как и в прочих поисковиках, пусто |
|
23.12.2007, 19:23 | #10 |
Member
|
Вот еще взгляни. Может поможет.
The statement must be an Axapta X++ statement. A valid a statement could be: select * from %1 where %2.Name == ‘Axapta’. This statement requires two Axapta records, one for %1 (record1) and one for %2 (record2). The %-signs are automatically substituted with the corresponding record names. На сегодня я точно пасс. А написать класс, который будет возвращать необходимые данные, нет никакой возможности?
__________________
С уважением, glibs® |
|
23.12.2007, 20:14 | #11 |
1C
|
Цитата:
Сообщение от glibs
The statement must be an Axapta X++ statement. A valid a statement could be: select * from %1 where %2.Name == ‘Axapta’. This statement requires two Axapta records, one for %1 (record1) and one for %2 (record2). The %-signs are automatically substituted with the corresponding record names.
Цитата:
СПАСИБО |
|
23.12.2007, 20:41 | #12 |
Member
|
Вот так сработало. Вроде.
Sub testBatch() On Error GoTo testBatch_error Dim axapta As AxaptaCOMConnector.axapta Dim cac As COMAdminCatalog Dim axR1 As IAxaptaRecord Dim axR2 As IAxaptaRecord Dim res As Object Dim i As Integer Set axapta = New AxaptaCOMConnector.axapta axapta.Logon "glibs", "", "", "AxGleb-30-ru" Set axR1 = axapta.CreateRecord("CustTable") Set axR2 = axapta.CreateRecord("CustGroup") axapta.ExecuteStmt "SELECT * FROM %1 JOIN %2 WHERE %1.CustGroup == %2.CustGroup && %2.CustGroup == 'ХХХ'", axR1, axR2 While axR1.Found MsgBox CStr(axR1.Field("Name")) axR1.Next Wend Set cac = New COMAdminCatalog cac.ShutdownApplication ("Navision Axapta Business Connector") Set cac = Nothing Set axapta = Nothing testBatch_exit: Exit Sub testBatch_error: MsgBox Err.Description GoTo testBatch_exit End Sub
__________________
С уважением, glibs® |
|
25.11.2009, 14:38 | #13 |
Участник
|
Пробую
X++: axaptaCustInvoiceJour.ExecuteStmt("select firstonly %1 where %1.InvoiceDate == %2",axaptaCustInvoiceJour,transdate); Ошибка времени выполнения: Метод был вызван с недопустимым числом параметров. Как в аксапте работать с такой конструкцией? |
|
25.11.2009, 15:07 | #14 |
MCTS
|
Попробуйте так:
X++: recId = "38182"; CustInvoiceJour = ax.CreateRecord("CustInvoiceJour"); CustInvoiceJour.ExecuteStmt( "select firstonly %1 where %1.RecId == "+recId); все параметры внесите в строку
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
25.11.2009, 15:42 | #15 |
Участник
|
Для строковых типов все понятно это сработает, но у меня тип данных - дата. Мне приходится его переделывать в строковый но тогда мой запрос ничего не возвращает из за того что параметр должен быть типом дата а не строка. Как можно передать дату в запрос через коннектор? |
|
25.11.2009, 15:43 | #16 |
Участник
|
Цитата:
dd\mm\yyyy |
|
25.11.2009, 15:31 | #17 |
Участник
|
В справке по методу ExecuteStmt() сказано, что параметром может быть только и исключительно Record (до 6 штук). Константы (значения) параметрами быть не могут. Они должны явно прописываться в выполняемой строке как и предложил Russland
|
|
25.11.2009, 15:46 | #18 |
Участник
|
Альтернативно, можно включить в выражение функцию, аля:
string.Format("%1.MyDate == str2date('{0}/{1}/{2}', 123) ", dateTime.Day, dateTime.Month, dateTime.Year); |
|
25.11.2009, 16:28 | #19 |
MCTS
|
Странно
X++: CustInvoiceJour.ExecuteStmt(
"select firstonly %1 where %1.DueDate == 24\10\2005"); Ну да ладно можно воспользоваться date2StrXpp() класса Global которая проконвертит дату в string X++: ax.CallStaticClassMethod("Global", "date2StrXpp", myDate );
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню Последний раз редактировалось Russland; 25.11.2009 в 16:32. |
|
Теги |
com connector |
|
Похожие темы | ||||
Тема | Ответов | |||
Проблемы с AxaptaCOMConnector | 1 | |||
Вопрос по Проектам | 35 | |||
AxaptaCOMConnector | 3 | |||
AxaptaComConnector для новичка | 8 | |||
Вопрос по AxaptaCOMConnector | 5 |
|