|  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ы . Я же не могу все таблицы объявлять
		 | 
|  |