Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
привет всем кто решил сюда заглянуть и заранее большое спасибо проблема заключается в определении id послежней занесенной записи в таблицу функция @@identity почему то возвращает NULL для реплицируемых таблиц возможно еще так DBCC CHECKIDENT ( 'table_name' [, { NORESEED | {RESEED [, new_reseed_value]} }] ) это работает например из QueryAnalizer но если попробовать это вытащить из VisualBasic следующим образом то ничего не возвращается dim cmd as new ADODB.Command dim rs as new ADODB.Recordset With cmd .CommandType = adCmdStoredProc .CommandText = "sp_def_identity" 'это хранимая процедура в которой "dbcc checkident" Set .ActiveConnection = cn Set rs = .Execute End With Может кто сталкивался с такой проблемой? Может быть есть другой вариант? С уважением Юрий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2001, 13:23 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
А в реплицируемых таблицах вообще имеется поле с Idetity? Если нет, то понятно, почему NULL, правда тогда и DBCC CHECKIDENT должен ругаться. А если есть, тогда не понятно, почему не работает @@Identity... По поводу DBCC - инофрмация возвращается аналогично оператору Print, а не в Recordset. Потому из VB ты его достать и не можешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2001, 12:49 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
ну конечно же поле identity там есть и dbcc checkident его возвращает только вот проблема как эту информацию использовать можно если она в никуда возвращается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2001, 18:52 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
Где-то (не помню где) я видел некое упоминание о том, что информацию, возвращаемую с помощью Print, все-таки как-то выцепить можно. Вроде бы она помещается в отдельный Recordset, который можно добыть с помощью метода ADOCommand.NextRecordset. Сам не пробовал, посему побожиться не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2001, 21:57 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
Насчет информации от принта. Когда-то давно я что-то подобное пытался сделать, но из Delphi мне это сделать не получилось. <%@SCRIPT LANGUAGE="VBSCRIPT"%> <html><head><title> Err</title> <% Set con=Server.CreateObject("ADODB.Connection") con.Open "DSN=SQL_Server_Name; UID=user_name; PWD=password" set rs=con.Execute("print '33' print '44' ") %> <BODY> ErrCount=<%=con.Errors.Count%> <br> <h3> 1</h3> Description= <%=con.Errors(0).Description %><br> Number= <%=con.Errors(0).Number %><br> Source= <%=con.Errors(0).Source %><br> SQLState = <%=con.Errors(0).SQLState %><br> NativeError= <%=con.Errors(0).NativeError %><br> <h3> 2</h3> Description= <%=con.Errors(1).Description %><br> Number= <%=con.Errors(1).Number %><br> Source= <%=con.Errors(1).Source %><br> SQLState = <%=con.Errors(1).SQLState %><br> NativeError= <%=con.Errors(1).NativeError %><br> <% For Each errLoop In con.Errors %> <br> <%=errLoop.Description %> <% next %> </BODY></HTML> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2001, 09:33 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
Все error/warnings/messages при работе с ADO помещаются в Connection->Errors. То, что выводится print, туда прекрасно попадает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2001, 09:35 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
Дополнение: Сообщение от DBCC CHECKIDENT - Msg.No.7998 Severity - 0, равно, как и PRINT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2001, 12:19 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
ну в connection.error точно ничего не возвращается я проверил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2001, 23:15 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
и что бы это значило Сообщение от DBCC CHECKIDENT - Msg.No.7998 Severity - 0, равно, как и PRINT. как его конкретно вытащить в какую-либо переменную ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2001, 23:52 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
2 Yuriy Connection.Errors - это коллекция (или массив, кому как удобно понимать) объектов Error. Когда ты делал эксперимент, надо полагать, ты пробежался в цикле по этой коллекции (по числу элементов коллекции) и вывел код и описание КАЖДОЙ ошибки. По второму вопросу - информация берется из свойств ОДНОГО объекта коллекции Errors, а именно объекта Error. См. свойства Description, Number, SQLState, NativeError и др. (см хелп). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2001, 11:23 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
ну вот текст процедуры которая все это делает Private Sub Command1_Click() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim cmd As New ADODB.Command Dim i As Integer cn.CursorLocation = adUseClient If cn.State = adStateOpen Then cn.Close cn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sd;PWD=sd;Initial Catalog=CIS;Data Source=svecha" cn.Open With cmd .CommandType = adCmdStoredProc .CommandText = "sp_dbcc" Set .ActiveConnection = cn Set rs = .Execute End With For i = 1 To cn.Errors.Count Debug.Print cn.Errors(i).Description Debug.Print cn.Errors(i).Number Debug.Print cn.Errors(i).SQLState Debug.Print cn.Errors(i).NativeError Next i End Sub так вот cn.Errors.Count=0 т.е. не возвращает никаких ошибок можете сами проверить а sp_dbcc это CREATE PROCEDURE sp_dbcc AS dbcc checkident ('firms',noreseed) ну не возвращаются никакие ошибки может я еще чего-то не понимаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2001, 13:23 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
В твоем скрипте есть пара странных мест: 1. Dim rs As New ADODB.Recordset - Тут New совершенно ни к чему. Метод Execute объекта Cmd сам создает новый рекордсет. 2. If cn.State = adStateOpen Then cn.Close - С какой стати cn вдруг окажется открытым, если ты его только что создал? Но это так, к слову, и это не главное. А главное то, что я не поленился и провел эксперимент. Ни с помощью Errors, ни с помощью NextRecordset добраться до Print-сообщения не удалось. Все мозги сломал, вспоминая, где же я видел информацию на эту тему - никак вспомнить не могу. Возможно, просто наложилось то, что на MAUG когда-то сам советовал. Если кроме набора записей из SP нужно вернуть некоторую информацию, ее можно вернуть с помощью второго набора записей (то есть, вместо одного SELECT поместить в хранимую процедуру два или более). Второй (и все последующие) наборы записей добываются таким способом set Rst2 = Rst1.NextRecordset Насчет того, как добраться до информации, возвращаемой Print, ничего более сообщить не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2001, 18:55 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
Аналогично Garya провёл эксперименты. Через ADO инф-цию получить не удалось. Хотя cn.Errors.Count и равен 1, но до Item добраться не удалось. Item. Через OLEDB сообщение получается, если независимо от рез-та выполнения запроса выполнить обработчик ошибок. Проще всего эта информация получается через DBLIB. Обработчик сообщений msg_handler работает на пару с обработчиком ошибок и м.б. настроен на любой уровень. Не уверен, как реализовано теперь, но в ODS 6.0 srv_sendmessage мог посылать сообщения 2-х типов: SRV_MSG_INFO or SRV_MSG_ERROR независимо от severity и других параметров, т.о. они (сообщения) попадали к соответствующему обработчику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2001, 21:09 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
Чтобы через ADO нормально получать все, что сыпется (errors/warnings/messages), нужно сразу после открытия коннекта выполнить set nocount on. Уж не знаю, почему это влияет на получение всех данных в connection->errors, но это ВЛИЯЕТ. Попробуйте. У меня были сходные проблемы - на insert повешено 2 триггера. Так вот, если 1-й выполняется нормально, а 2-й нет, то ошибка приходит в connection->errors, отлавливается try...catch. Если в 1-м произошла ошибка, то откат происходит МОЛЧА. На ADO'шном клиенте не вываливается exception, errors->count = 0 и все такое. Жуть просто! После выполнения set nocount on при открытии коннекта такая ситуация вылечилась - ошибка теперь приходит в любом случае, да еще и стали приходить все сообщения с низкой severity. В том числе и от print. Кстати, если кто знает, каким образом set nocount on влияет на поведение ADO, напишите. Интересно все-таки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2001, 16:49 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
Я, может, и не въехал в тему, но у меня тоже была проблема с определением identity, и никакими DBCC и @@identity она не решалась, а решалась опросом фунции Ident_Current - она для отдельной таблицы и возвращает текущий идентити ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2001, 18:11 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
2 Alexandr: все бы замечательно, только функция Ident_Current в SQL2К появилась... А народ на предыдущих версиях писал и еще долго писать будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2001, 18:16 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
2 Fompro: через OLEDB вообще все рулит замечательно! Там и извращаться с set nocount не надо. Ну так что вы хотите - ADO это вообще довольно уродская надстройка над OLEDB. Для скриптописателей. А если нет необходимости ковыряться с вижуал басиком, то OLEDB - лучший выход. А DBLibrary MS постепенно вычеркивает из обращения. Во всяком случае, в MSDN написано, что DB-Library API не обновлялся со времен SQL 6.5 и все приложения, работающие через dblibrary могут работать только с уровнем совместимости 6.5. Не стоит для новых приложений закладываться на умирающую технологию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2001, 18:30 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
Точно - довольно уродская надстройка. Только вот угораздило меня 2.5 года назад строить проект над ADO (тоже пакость редкостная, но крупное предприятие обслуживает ). Так вот: из проекта A2K собираю пример чтобы ловить мессагу от print. Использую CurrentProject.Connection. Не работает (все в точности как у Fompro). Создаю новый коннект (cn.Open "Provider=sqloledb;Data Source=BillGates;Initial Catalog=Store;User Id=sa;Password=;") - текст print'а приходит без всякого No Count!!! Т.е. родной коннект-то изначально кривой! И что еще озадачило - а что за ублюдский 'родной' connectionstring: "Provider=MSDataShape.1;Persist Security Info=False;Data Source=BILLGATES;User ID=sa;Initial Catalog=Store;Data Provider=SQLOLEDB.1" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2001, 21:10 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
Болтовня ... 2 GreenSunrise. Ну люблю я его ... В добавок PB7.0 умеет работать через OLEDB, но: Уж больно г...ый интерфейс разработчика они в нём сотворили, и руки не поднимаются с ним работать. Все возможности работы, к-ые присутствовали при работе через DBLIB не реализованы ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2001, 23:53 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
yuriy! Посмотри в тригер Insert и убери оттуда все Insert для Всех таблиц (даже для тех у которых нет столбца Identity). Оббычно из-за последних и возникает NULL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2001, 02:00 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
Есть способ формировать id самому, для этого все лишь нужно знать последний существующий id. Есть два способа: 1) делать это за 2 транзакции Query1: select max(id) from table C++ : idValue = id+1 Query2: insert into table (id,name) values (idValue,nameValue) Т.е. ты уже заранее знаешь id последней вставленной записи Надо убрать Identity с поля id таблицы table 2) делать за одну транзакцию и возвращать каким-нибудь образом id этот вариант обсуждался выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2001, 12:01 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
2 Vasya И Вы рискнули бы использовать первый вариант?? select max(id) from table - это shared lock, а теперь предположите, что одновременно такой селект выполняет несколько юзеров, как думаете, какие айдишки они получат? А вобще у меня была как то задача получения своего ID, решение правда придумал не я, точнее сказать, что когда возникла необходимость решение уже было Если кому интересно могу показать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2001, 12:17 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
Забыл добавить: Vasya, как вы думаете если в таблице ну хотя бы 100000 записей - select max(id) from table сколько будет выполняться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2001, 12:20 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
2 Павел: а в чем проявляется "ублюдочность" родного connection string'а ? Ну разбей его по свойствам - provider, userid, password и т.д., если не нравится подход "все в одном" ? 2 Fompro: подход "люблю - не люблю" - это, конечно, очень профессионально Насчет интерфейса можно было бы поспорить... Вот только неохота целую дискуссию затевать - все равно пустой треп получится, как это обычно бывает в подобных случаях. Ну да, прикрыли они кое-что из dblib, не без того. Но, по-моему, отказ MS от его дальнейшей поддержки - это весомый аргумент в пользу того, чтобы не начинать писать на нем новые приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2001, 14:21 |
|
||
|
вопрос об определении последнего id
|
|||
|---|---|---|---|
|
#18+
2 GreenSunrise: Дело в том, что Currentproject.Connection строит сам А2K, и исзменить ее невозможно. Можно в коде использовать собственные коннекты, но это только в коде. Источники данных форм(таблицы, зпросы, представления, процедуры) используют CurrentProject.Connection. Хотя все вполне решаемо, если в качестве источника записей использовать классы. Вот только во многих случаях при работе с классами коннект, который нормально ловит print, глючит, а 'родной' - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2001, 15:29 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32005547&tid=1826750]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
| others: | 257ms |
| total: | 409ms |

| 0 / 0 |
