AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.08.2004, 06:08   #1  
mne2001 is offline
mne2001
Участник
 
29 / 10 (1) +
Регистрация: 10.08.2004
программно создать таблицу
как программно создать таблицу на основе query (имена полей и записи из него взять) ? Она должна появиться на SQL servere. Потом ее надо удалить
Старый 11.08.2004, 11:20   #2  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
а на фига так все усложнять?
Старый 11.08.2004, 11:41   #3  
bucken is offline
bucken
Участник
Аватар для bucken
 
259 / 12 (1) ++
Регистрация: 04.09.2003
Адрес: Москва
Если я вас правильно понял - вам нужна временая таблица.
В Axapta есть такой механизм, ничего программировать не нужно.
1) Создаете таблицу в AOT - через дизайнер. и в свойство temporary указываете.
2) Пишете, читайте в нее как в обучную таблицу.
3) После исполения кода (выхода из метода или класса), данные и она сама автоматически удаляться системой.
__________________
Уточните значение слов и вы избавите человечество от половины его заблуждений. (Рене Декарт) / Axapta 2.5
Старый 11.08.2004, 11:45   #4  
mne2001 is offline
mne2001
Участник
 
29 / 10 (1) +
Регистрация: 10.08.2004
но запрос то все время будет разным, я не знаю какие в нем будут поля. И потом эту таблицу мне надо использовать извне, не axaptой, поэтому она должна реально существовать
Старый 11.08.2004, 11:54   #5  
BorDark is offline
BorDark
Участник
Аватар для BorDark
 
24 / 10 (1) +
Регистрация: 09.08.2004
Адрес: планета Земля
? А точнее задание?
Не могли бы Вы в таком случае обрисовать задачу подробнее - что именно надо сделать, кто к таблице должен обращаться, ...
Старый 11.08.2004, 12:15   #6  
mne2001 is offline
mne2001
Участник
 
29 / 10 (1) +
Регистрация: 10.08.2004
проблема в том, что мы не хотим для создания отчетов использовать отчеты axaptы, наши отчеты в crystal reportе, crystal report берет данные из ado, которое напрямую подключается к sql server 2000 на котором и стоит база данных axaptы. Все фильтры, наложенные пользователем известны axapte, мне надо передать запрос ado. Сначала я хотела как нибудь выдрать строку запроса в формате sql servera, но не нашла как и вроде мне сказали. что возникнет куча других проблем и дпли совет слить данные из запроса в таблицу, а потом ado без проблем обратится к этой таблице. Проблема главная в том, что все должно быть универсально, есть же стандартные средства формирования запроса, получаю QueryRun или Query причем неизвестно на каких таблицах он основан и из этого Query надо слить данные.
Старый 11.08.2004, 12:29   #7  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
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  
bucken is offline
bucken
Участник
Аватар для bucken
 
259 / 12 (1) ++
Регистрация: 04.09.2003
Адрес: Москва
Для вытаскивание там все есть. Надо ковырять методы квери :
типа такого:
PHP код:
query().dataSourceTable(tableNum(CustTable)).toString()) 
там и по датасорсам пробежаться можно и по полям, незная и до исполнения их названий и типов.
__________________
Уточните значение слов и вы избавите человечество от половины его заблуждений. (Рене Декарт) / Axapta 2.5
Старый 11.08.2004, 12:55   #9  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
Ну короче там все в общем-то несложно но муторно типа такого

<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  
mne2001 is offline
mne2001
Участник
 
29 / 10 (1) +
Регистрация: 10.08.2004
я вот что нарыла для создания таблицы:

sqldatadictionary dictT=new sqldatadictionary();
DictT.tableCreate(0,tableID);

но тут проблема в том, что если tableID задать существующей таблицы, то он создает нормальный запрос к sql серверу (create ... и т.д) и имя уже существующей таблицы, естественно отработать он не может, возвращает ошибку, что такая таблица уже есть. Получается, что надо не занятый TableID указывать. Где его взять?
Старый 11.08.2004, 13:34   #11  
bucken is offline
bucken
Участник
Аватар для bucken
 
259 / 12 (1) ++
Регистрация: 04.09.2003
Адрес: Москва

а начиная с 10000000 не подойдет? (таких пойму больших нету в аксапте)
__________________
Уточните значение слов и вы избавите человечество от половины его заблуждений. (Рене Декарт) / Axapta 2.5
Старый 11.08.2004, 13:39   #12  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
Не знаю...не советовал бы идти этим путем...это вообще по-моему из другой оперы
хотите создавать таблицу - парьтесь вручную типа такого:

Connection Con = new Connection();
Statement Stmt = Con.createStatement();
Stmt.executeupdate('create table Table222 (field1 int, field2 varchar(2))');
Старый 11.08.2004, 13:42   #13  
mne2001 is offline
mne2001
Участник
 
29 / 10 (1) +
Регистрация: 10.08.2004
Если задать несуществующий tableID, то ничего не происходит... Видимо не тот объект выбран и так не получится
Старый 11.08.2004, 14:52   #14  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Как я понял, задача следующая. В Axapta имеем query с пользовательскими фильтрами. Необходимо на основе выборки данных по этому запросу построить отчет внешним генератором отчетов(CrystalReports).
Предложены варианты:
1) Парсить query и передавать SQL-запрос (или ряд параметров) в CR. А из CR - напрямую стучаться к БД.
2) Выгрузить данные в XML, файл или промежуточную таблицу и на их основе строить отчет.

Вариант с промежуточной таблицей - наименее жизнеспособен. Если создавать таблицу через Connection, то в AOT она будет не видна. Т.е. остается проблема как передать в неё данные выбранные query. Опять же ручками через Connection... Это тормоза и геморой.

По-моему наиболее оптимален первый вариант, если не озадачиваться security или универсальностью подхода для разных СУБД.

p.s. Хотя вариант с XML тоже интересен.
Старый 11.08.2004, 15:18   #15  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
1) очень геморройно
2) более интересно.
Вообще надо проанализировать с какими вообще источниками работает CR, например, возможно, простой CSV в данном случае будет идеальным вариантом.
Старый 12.08.2004, 07:44   #16  
mne2001 is offline
mne2001
Участник
 
29 / 10 (1) +
Регистрация: 10.08.2004
Как взять значение поля из запроса?

такая конструкция не проходит, синтаксическая ошибка возникает
anytypeA = (queryRun.get(tableId)).(fieldId);
если написать так, то ошибка во время выполнения
anytypeA = queryRun.get(tableId).(fieldId);

если присваивать по частям, типа
t = queryRun.get(tableId), то каков должен быть тип данных t?
Старый 12.08.2004, 09:13   #17  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
т.е. Вы даже не знаете, к какой таблице в данный момент обращаетесь? Хм. попробойте common. Но советую все-таки прислушаться мнения предыдущих ораторов.

С Уважением,
Георгий.
Старый 12.08.2004, 10:03   #18  
mne2001 is offline
mne2001
Участник
 
29 / 10 (1) +
Регистрация: 10.08.2004
Ну TableID я знаю, значит и имя таблицы могу вытащить, а через common я пробовала, возвращает ошибку, что нет поля с таким идентификатором.
Таблица у меня с полями уже формируется, как сделать все придумалось, осталось только значения полей вытащить и все заработает
Старый 12.08.2004, 10:08   #19  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
А много таблиц перебираете?

Если не много, может, создать несколько переменных по типу таблиц, и присваивать им значение текущей таблицы?
Старый 12.08.2004, 10:19   #20  
mne2001 is offline
mne2001
Участник
 
29 / 10 (1) +
Регистрация: 10.08.2004
Может оказаться любая таблица axaptы . Я же не могу все таблицы объявлять
Теги
crystal reports, ax2.5, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
как программно создать документ в DocuView алька DAX: Программирование 5 03.04.2007 18:44
Как программно создать платежное поручение? AK9 DAX: Программирование 3 13.09.2006 09:37
создать и передать временную таблицу kitty DAX: Программирование 11 13.07.2006 14:40
Создать программно складскую проводку с количеством = 0. vasiliy DAX: Программирование 5 26.12.2005 16:46
Невозможно создать таблицу chel DAX: Программирование 0 21.04.2004 21:02

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:50.