11.08.2004, 06:08 | #1 |
Участник
|
программно создать таблицу
как программно создать таблицу на основе query (имена полей и записи из него взять) ? Она должна появиться на SQL servere. Потом ее надо удалить
|
|
11.08.2004, 11:20 | #2 |
Участник
|
а на фига так все усложнять?
|
|
11.08.2004, 11:41 | #3 |
Участник
|
Если я вас правильно понял - вам нужна временая таблица.
В Axapta есть такой механизм, ничего программировать не нужно. 1) Создаете таблицу в AOT - через дизайнер. и в свойство temporary указываете. 2) Пишете, читайте в нее как в обучную таблицу. 3) После исполения кода (выхода из метода или класса), данные и она сама автоматически удаляться системой.
__________________
Уточните значение слов и вы избавите человечество от половины его заблуждений. (Рене Декарт) / Axapta 2.5 |
|
11.08.2004, 11:45 | #4 |
Участник
|
но запрос то все время будет разным, я не знаю какие в нем будут поля. И потом эту таблицу мне надо использовать извне, не axaptой, поэтому она должна реально существовать
|
|
11.08.2004, 11:54 | #5 |
Участник
|
А точнее задание?
Не могли бы Вы в таком случае обрисовать задачу подробнее - что именно надо сделать, кто к таблице должен обращаться, ...
|
|
11.08.2004, 12:15 | #6 |
Участник
|
проблема в том, что мы не хотим для создания отчетов использовать отчеты axaptы, наши отчеты в crystal reportе, crystal report берет данные из ado, которое напрямую подключается к sql server 2000 на котором и стоит база данных axaptы. Все фильтры, наложенные пользователем известны axapte, мне надо передать запрос ado. Сначала я хотела как нибудь выдрать строку запроса в формате sql servera, но не нашла как и вроде мне сказали. что возникнет куча других проблем и дпли совет слить данные из запроса в таблицу, а потом ado без проблем обратится к этой таблице. Проблема главная в том, что все должно быть универсально, есть же стандартные средства формирования запроса, получаю QueryRun или Query причем неизвестно на каких таблицах он основан и из этого Query надо слить данные.
|
|
11.08.2004, 12:29 | #7 |
Administrator
|
A XML вам не подойдет?
С помощью Менеджера публикаций можно выгружать данные любых запросов Axapta в XML.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
11.08.2004, 12:33 | #8 |
Участник
|
Для вытаскивание там все есть. Надо ковырять методы квери :
типа такого: PHP код:
__________________
Уточните значение слов и вы избавите человечество от половины его заблуждений. (Рене Декарт) / Axapta 2.5 |
|
11.08.2004, 12:55 | #9 |
Участник
|
Ну короче там все в общем-то несложно но муторно типа такого
<b> for (i=1; i <= query.DatasourceCount(); i++) { queryBuildDataSource = query.dataSourceNo(i); tableId = queryBuildDataSource.table(); dictTable = new DictTable(tableId); queryBuildFieldList = queryBuildDataSource.field(); for(j=1; j <= queryBuildFieldList.fieldCount(); j++) { fieldId = queryBuildFieldList..field(j); dictField = new DictField(tableId, fieldId); // отсюда можно вытащить тип поля потом // теперь у нас есть fieldId, tableId - можем создавать таблицу // как создавать - вопрос отдельный // а теперь значение поля anytypeA = (queryRun.get(tableId)).(fieldId); } } </b> ну вот тут полный сумбур, работать не будет, все надо переписывать нормально, но идея по крайней мере должна быть понятна |
|
11.08.2004, 13:29 | #10 |
Участник
|
я вот что нарыла для создания таблицы:
sqldatadictionary dictT=new sqldatadictionary(); DictT.tableCreate(0,tableID); но тут проблема в том, что если tableID задать существующей таблицы, то он создает нормальный запрос к sql серверу (create ... и т.д) и имя уже существующей таблицы, естественно отработать он не может, возвращает ошибку, что такая таблица уже есть. Получается, что надо не занятый TableID указывать. Где его взять? |
|
11.08.2004, 13:34 | #11 |
Участник
|
а начиная с 10000000 не подойдет? (таких пойму больших нету в аксапте)
__________________
Уточните значение слов и вы избавите человечество от половины его заблуждений. (Рене Декарт) / Axapta 2.5 |
|
11.08.2004, 13:39 | #12 |
Участник
|
Не знаю...не советовал бы идти этим путем...это вообще по-моему из другой оперы
хотите создавать таблицу - парьтесь вручную типа такого: Connection Con = new Connection(); Statement Stmt = Con.createStatement(); Stmt.executeupdate('create table Table222 (field1 int, field2 varchar(2))'); |
|
11.08.2004, 13:42 | #13 |
Участник
|
Если задать несуществующий tableID, то ничего не происходит... Видимо не тот объект выбран и так не получится
|
|
11.08.2004, 14:52 | #14 |
Участник
|
Как я понял, задача следующая. В Axapta имеем query с пользовательскими фильтрами. Необходимо на основе выборки данных по этому запросу построить отчет внешним генератором отчетов(CrystalReports).
Предложены варианты: 1) Парсить query и передавать SQL-запрос (или ряд параметров) в CR. А из CR - напрямую стучаться к БД. 2) Выгрузить данные в XML, файл или промежуточную таблицу и на их основе строить отчет. Вариант с промежуточной таблицей - наименее жизнеспособен. Если создавать таблицу через Connection, то в AOT она будет не видна. Т.е. остается проблема как передать в неё данные выбранные query. Опять же ручками через Connection... Это тормоза и геморой. По-моему наиболее оптимален первый вариант, если не озадачиваться security или универсальностью подхода для разных СУБД. p.s. Хотя вариант с XML тоже интересен. |
|
11.08.2004, 15:18 | #15 |
Участник
|
1) очень геморройно
2) более интересно. Вообще надо проанализировать с какими вообще источниками работает CR, например, возможно, простой CSV в данном случае будет идеальным вариантом. |
|
12.08.2004, 07:44 | #16 |
Участник
|
Как взять значение поля из запроса?
такая конструкция не проходит, синтаксическая ошибка возникает anytypeA = (queryRun.get(tableId)).(fieldId); если написать так, то ошибка во время выполнения anytypeA = queryRun.get(tableId).(fieldId); если присваивать по частям, типа t = queryRun.get(tableId), то каков должен быть тип данных t? |
|
12.08.2004, 09:13 | #17 |
Модератор
|
т.е. Вы даже не знаете, к какой таблице в данный момент обращаетесь? Хм. попробойте common. Но советую все-таки прислушаться мнения предыдущих ораторов.
С Уважением, Георгий. |
|
12.08.2004, 10:03 | #18 |
Участник
|
Ну TableID я знаю, значит и имя таблицы могу вытащить, а через common я пробовала, возвращает ошибку, что нет поля с таким идентификатором.
Таблица у меня с полями уже формируется, как сделать все придумалось, осталось только значения полей вытащить и все заработает |
|
12.08.2004, 10:08 | #19 |
Модератор
|
А много таблиц перебираете?
Если не много, может, создать несколько переменных по типу таблиц, и присваивать им значение текущей таблицы? |
|
12.08.2004, 10:19 | #20 |
Участник
|
Может оказаться любая таблица axaptы . Я же не могу все таблицы объявлять
|
|