Re[2]: Как получить ID новой строки
От: Pseudomax  
Дата: 16.10.02 10:53
Оценка: -2
Здравствуйте Flamer, Вы писали:

F>Здравствуйте Pseudomax, Вы писали:


P>>В таблице SQL Server есть столбец ID, с автоинкрементом.

P>>Каким образом получить содержимое этого этого столбца для новой записи?

F>[skipped]


F>Вы часом, не издеваетесь? Совсем недавно эта тема обсуждалась... Да и поиск по форумам теперь работает нормально...


Я не издеваюсь. Не было времени искать в форуме, так что извиняйте.
Как получить ID новой строки
От: Pseudomax  
Дата: 16.10.02 10:26
Оценка:
В таблице SQL Server есть столбец ID, с автоинкрементом.
Каким образом получить содержимое этого этого столбца для новой записи?

Строка добавляется, используя ADO, следующим образом:


RecordsetPtr recordSet=NULL;
recordSet.CreateInstance(__uuidof(Recordset)); 
recordSet->Open("INSERT table1 (field1,field2) VALUES (\'value1\',\'value2\')",
        "DRIVER {SQL SERVER};SERVER=SRV1;UID=user1;PWD=pwd1;BASE=base1",
         adOpenKeyset,adLockOptimistic,adCmdText);
recordSet->Close();
Re: Как получить ID новой строки
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 16.10.02 10:48
Оценка:
Здравствуйте Pseudomax, Вы писали:

P>В таблице SQL Server есть столбец ID, с автоинкрементом.

P>Каким образом получить содержимое этого этого столбца для новой записи?

[skipped]

Вы часом, не издеваетесь? Совсем недавно эта тема обсуждалась... Да и поиск по форумам теперь работает нормально...
Re[3]: Как получить ID новой строки
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 16.10.02 10:56
Оценка:
Здравствуйте Pseudomax, Вы писали:

[]

F>>Вы часом, не издеваетесь? Совсем недавно эта тема обсуждалась... Да и поиск по форумам теперь работает нормально...


P>Я не издеваюсь. Не было времени искать в форуме, так что извиняйте.


По-вашему, у других время есть за вас искать? Однако... Ладно, вот вам:

http://www.rsdn.ru/forum/Message.aspx?mid=113669
Автор: .smoke
Дата: 14.10.02
Re[4]: Как получить ID новой строки
От: Pseudomax  
Дата: 17.10.02 08:40
Оценка:
Здравствуйте Flamer, Вы писали:

F>Здравствуйте Pseudomax, Вы писали:


F>[]


F>>>Вы часом, не издеваетесь? Совсем недавно эта тема обсуждалась... Да и поиск по форумам теперь работает нормально...


P>>Я не издеваюсь. Не было времени искать в форуме, так что извиняйте.


F>По-вашему, у других время есть за вас искать? Однако... Ладно, вот вам:


F>http://www.rsdn.ru/forum/Message.aspx?mid=113669
Автор: .smoke
Дата: 14.10.02


Все делаю по рекомендациям, однако результат нулевой в смысле кол-во записей.


_RecordsetPtr recordSet=NULL;    //recordset object
_ConnectionPtr connection=NULL;
connection.CreateInstance(__uuidof(Connection) );
recordSet.CreateInstance(__uuidof(Recordset)); 
connection->CursorLocation = adUseServer;
connection->Open(
       "DRIVER {SQL SERVER};SERVER=SRV1;UID=user1;PWD=pwd1;BASE=base1",
       L"", L"", adConnectUnspecified );
recordSet=connection->Execute(
       "INSERT table1 (fld1) VALUES ('val1') select @@IDENTITY",
       NULL,adCmdText);


Этот же запрос в Query Analyzer проходит на ура.
Re[5]: Как получить ID новой строки
От: StanislavK Великобритания  
Дата: 17.10.02 08:58
Оценка:
P>
P>_RecordsetPtr recordSet=NULL;    //recordset object
P>_ConnectionPtr connection=NULL;
P>connection.CreateInstance(__uuidof(Connection) );
P>recordSet.CreateInstance(__uuidof(Recordset)); 
connection->>CursorLocation = adUseServer;
connection->>Open(
P>       "DRIVER {SQL SERVER};SERVER=SRV1;UID=user1;PWD=pwd1;BASE=base1",
P>       L"", L"", adConnectUnspecified );
recordSet=connection->>Execute(
P>       "INSERT table1 (fld1) VALUES ('val1') select @@IDENTITY",
P>       NULL,adCmdText);
P>


P>Этот же запрос в Query Analyzer проходит на ура.

Поробуй нечто подобное:

// isert new row to Lists table
ADO::_RecordsetPtr rsetPtr;
TESTHR( rsetPtr.CreateInstance(__uuidof(ADO::Recordset)) );
TESTHR( rsetPtr->Open(L"Lists", 
        _variant_t((IDispatch *)m_adoConnPtr,true), 
        ADO::adOpenStatic, 
        ADO::adLockOptimistic, 
        ADO::adCmdTable) );    // open recordset for table
TESTHR( rsetPtr->AddNew() );            // add new row
rsetPtr->Fields->Item[L"list_type_id"]->Value = listType;// set value for 'list_type_id' field
TESTHR( rsetPtr->Update() );            // update dtabase

_variant_t variant = rsetPtr->Fields->Item[L"list_guid"]->Value;    // get GUID of new List
Re[6]: Как получить ID новой строки
От: Andrey_N  
Дата: 17.10.02 21:43
Оценка:
Здравствуйте StanislavK, Вы писали:

SK>
SK>// isert new row to Lists table
SK>ADO::_RecordsetPtr rsetPtr;
SK>TESTHR( rsetPtr.CreateInstance(__uuidof(ADO::Recordset)) );
SK>TESTHR( rsetPtr->Open(L"Lists", 
SK>        _variant_t((IDispatch *)m_adoConnPtr,true), 
SK>        ADO::adOpenStatic, 
SK>        ADO::adLockOptimistic, 
SK>        ADO::adCmdTable) );    // open recordset for table
SK>TESTHR( rsetPtr->AddNew() );            // add new row
rsetPtr->>Fields->Item[L"list_type_id"]->Value = listType;// set value for 'list_type_id' field
SK>TESTHR( rsetPtr->Update() );            // update dtabase

SK>_variant_t variant = rsetPtr->Fields->Item[L"list_guid"]->Value;    // get GUID of new List
SK>


После Update() сделайте Resync(), который поднимет обратно в рекордсет все обновленные поля.
Re[7]: Как получить ID новой строки
От: StanislavK Великобритания  
Дата: 18.10.02 07:43
Оценка:
Здравствуйте Andrey_N, Вы писали:

AN>Здравствуйте StanislavK, Вы писали:


SK>>
SK>>// isert new row to Lists table
SK>>ADO::_RecordsetPtr rsetPtr;
SK>>TESTHR( rsetPtr.CreateInstance(__uuidof(ADO::Recordset)) );
SK>>TESTHR( rsetPtr->Open(L"Lists", 
SK>>        _variant_t((IDispatch *)m_adoConnPtr,true), 
SK>>        ADO::adOpenStatic, 
SK>>        ADO::adLockOptimistic, 
SK>>        ADO::adCmdTable) );    // open recordset for table
SK>>TESTHR( rsetPtr->AddNew() );            // add new row
rsetPtr->>>Fields->Item[L"list_type_id"]->Value = listType;// set value for 'list_type_id' field
SK>>TESTHR( rsetPtr->Update() );            // update dtabase

SK>>_variant_t variant = rsetPtr->Fields->Item[L"list_guid"]->Value;    // get GUID of new List
SK>>


AN>После Update() сделайте Resync(), который поднимет обратно в рекордсет все обновленные поля.

Он и так все нормально "поднимает". Всмысле этот код вполне работает и значение генерируемого поля возвращается. Или ты имел в виду, что-то другое?
Re[8]: Как получить ID новой строки
От: Andrey_N  
Дата: 21.10.02 18:14
Оценка:
Здравствуйте StanislavK, Вы писали:

SK>Здравствуйте Andrey_N, Вы писали:


AN>>Здравствуйте StanislavK, Вы писали:


SK>>>
SK>>>// isert new row to Lists table
SK>>>ADO::_RecordsetPtr rsetPtr;
SK>>>TESTHR( rsetPtr.CreateInstance(__uuidof(ADO::Recordset)) );
SK>>>TESTHR( rsetPtr->Open(L"Lists", 
SK>>>        _variant_t((IDispatch *)m_adoConnPtr,true), 
SK>>>        ADO::adOpenStatic, 
SK>>>        ADO::adLockOptimistic, 
SK>>>        ADO::adCmdTable) );    // open recordset for table
SK>>>TESTHR( rsetPtr->AddNew() );            // add new row
rsetPtr->>>>Fields->Item[L"list_type_id"]->Value = listType;// set value for 'list_type_id' field
SK>>>TESTHR( rsetPtr->Update() );            // update dtabase

SK>>>_variant_t variant = rsetPtr->Fields->Item[L"list_guid"]->Value;    // get GUID of new List
SK>>>


AN>>После Update() сделайте Resync(), который поднимет обратно в рекордсет все обновленные поля.

SK>Он и так все нормально "поднимает". Всмысле этот код вполне работает и значение генерируемого поля возвращается. Или ты имел в виду, что-то другое?

Простите, я невнимательно прочитал условия курсора. Я использовал Static, _Client_, _LockPessimistic_ и, насколько я помню, без Resync() данные не обновлялись. Видимо вариант курсора Static, _Server_, _LockOptimistic_ этого не требует. Ни описание Update(), ни Resync() не содержат замечаний про тип курсора.

Андрей
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.