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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.06.2011, 10:50   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,723 / 1208 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от uchenik Посмотреть сообщение
Есть прога, использующая SQL базу, необходимо в аксапте сформировать документ и поместить его в одну из таблиц базы, используемой данной прогой.
Документ состоит из заголовка и строк, хранящихся в разных таблицах.
Соответственно нужно при добавлении заголовка получить обратно какой-нибудь идентификатор (к слову сам идентификатор генерится в той базе автоматически), для правильного добавления строк.
У Вас неправильное представление о том, что есть ADO и ODBC. Это всего-лишь "переводчики". Т.е. они "переводят" команды от клиента к северу и возвращают результат выполнения этой команды клиенту.

Вставка записи - это команда INSERT. И вот что может вернуть подобная команда как результат своей работы? Ну, максимум, количество вставленных записей.

Идентификатор записи - не есть некая структурная характеристика базы данных. Т.е. что именно является идентификатором - это, скорее, логическая характеристика. Нет каких-либо однозначных критериев, по которым можно было бы сказать, что вот это есть идентификатор.

Ну, предположим, что идентификатор - это то, по чему построен Primary Index. Однако, как минимум, это может быть несколько полей! И какое из них предлагаете возвращать?

Так что, Ваше предположение о поиске записи после ее вставки по значению альтернативных ключей, в общем случае, единственно верное. Нет, конечно, есть еще варианты, если ключевое поле - это поле со свойством Identity. Но это уже частный случай.
Старый 29.06.2011, 12:10   #2  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
У Вставка записи - это команда INSERT. И вот что может вернуть подобная команда как результат своей работы? Ну, максимум, количество вставленных записей.
Здрасьте...
А как же
PHP код:
Insert into .. Returning .. 
?
__________________
Zhirenkov Vitaly
Старый 29.06.2011, 12:49   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,450 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от ZVV Посмотреть сообщение
Здрасьте...
А как же
PHP код:
Insert into .. Returning .. 
?
Так это же только для Oracle возможно
http://ru.wikipedia.org/wiki/Insert_(SQL)/Получение ключа

Последний раз редактировалось S.Kuskov; 29.06.2011 в 12:51.
Старый 29.06.2011, 14:07   #4  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Если у Вас MS SQL Server, то вот пример:
1) Создайте на MS SQL таблицу, в которой одно поле текстовое, второе поле со свойством identity.
2) Создайте на MS SQL хранимую процедуру с названием "spTestReturnRecordset", в теле которой напишите что-то наподобие
X++:
INSERT INTO MyTable (MyFieldName) Values ('Дядя Петя')
SELECT @@identity
3) Напишите в Аксапте джоб
В результате работы этого джоба в инфологе Аксапты будет отображен идентификатор добавленой записи.
X++:
static void DD_StoredProcReturnRecordsetTest(Args _args) 
{ 
    str     serverName      = "Server"; 
    str     baseName        = "Database"; 
    str     userId          = "UserId"; 
    str     userPassword    = "Password"; 
    CCADOConnection         cn; 
    COM                     comCN; 
    COM                     cmd; 
    CCADORecordset          rs; 
    int                     i; 
    ; 

    cn = new CCADOConnection(); 
    cn.open( 
        "Provider=SQLOLEDB;"+ 
        "Data Source="      + serverName    +   ";" + 
        "Initial Catalog="  + baseName      +   ";" + 
        "uid="              + userId        +   ";" + 
        "pwd="              + userPassword); 

    comCN = cn.connection(); 

    cmd     = new COM("ADODB.Command"); 
    cmd.activeConnection(comCN); 
    cmd.commandType(4);  //adCmdStoredProc, see ObjectBrowser in VBA   
    cmd.CommandText("spTestReturnRecordset"); 
    rs = new CCADORecordset(cmd.Execute()); 
    while (!rs.eof()) 
    { 
        info(strfmt("%1", rs.fields().itemIdx(0).value())); 
        rs.movenext(); 
    } 

    cn.close(); 
}
ЗЫ: уже опередили

Последний раз редактировалось Ace of Database; 29.06.2011 в 14:09.
Теги
ado, insert, odbc, ключ

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Axapta 3.0 Добавление записей во врем. таблицу vagon DAX: Функционал 1 14.02.2011 13:56
Массовое удаление записей через CCADOConnection Shirmin Oleg DAX: Программирование 68 04.05.2010 15:49
добавление поля в таблицу с огромным количеством записей rpr DAX: Программирование 22 24.04.2009 14:13
Задвоение RecId при вставке записей через COM коннектор db DAX: Программирование 1 23.04.2009 15:12
К чему приводит добавление поля в таблицу. si DAX: Программирование 6 21.05.2002 11:54

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

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

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