Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6   вперед  Ctrl      все
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
cr@nk
Member

Откуда: Челябинск
Сообщений: 118
А хотя чего тут долго думать )))
Пока идея такая: можно ли заменить запрос
Update analysis set Templ_ID=9

добавить WHERE id=max(id)
как-то так мне это видится
12 ноя 15, 17:51    [18407962]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
сейчас трабла ушла
Guest
cr@nk
Winnipuh
не выражайтесь загадками, конкретнее

Почему-то после сбоя ОС (нужны некие подробности глюков ОС ?) в программе по учёту анализовов появился глюк с:
1. С датой (его сейчас помогли устранить)
2. С присвоением всей колонке Templ_ID значения последнего выбранного анализа. Т.е. выбрали пациента, создаём для него анализ по выбранному шаблону и у всех пациентов в списке проставляется ID этого шаблона. Как-то так

языковые (или как они называются) настройки пользователя: формат дат, денег и пр
12 ноя 15, 17:53    [18407985]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
o-o
Guest
Winnipuh,
а можно человеческом языком рассказать, что за SET NO_BROWSETABLE ON
и что поменялось на 2008-ом?
вот какое-то описание:
link
SET NO_BROWSETABLE ON is an undocumented option performed for Remote Data Service (RDS) ActiveX Data Connector (ADC) connections to SQL Server.
Enabling this option makes every SELECT statement act as though FOR BROWSE had been appended to the statement,
but bypasses the temporary table that FOR BROWSE normally pipes the results through.
The net effect is to add keys and timestamps to the query as hidden output columns so the client can update specific rows
(updateable cursors) without separate trips to the server

to pick up the meta-data and munging the query to get the appropriate columns.

NO_BROWSETABLE - what the heck is that?

но я не совсем понимаю, можно было не дописывать условия на обновляемые строки
но какие-то скрытые ключи и таймстампы передавались, т.е. апдэйтилось выборочно?
а в 2008 сию недокументированность искоренили?
12 ноя 15, 17:54    [18407995]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
Glory
Member

Откуда:
Сообщений: 104751
cr@nk
Пока идея такая: можно ли заменить запрос
Update analysis set Templ_ID=9

добавить WHERE id=max(id)
как-то так мне это видится

Заменить запрос на стороне сервера нельзя.
Можно триггер создать для Update analysis.
12 ноя 15, 17:54    [18407996]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
o-o
Guest
cr@nk
Да база то по идее простая в понимании.
Логику триггера (теоретического) я смутно представляю, т.к. нужно знать значения, выбранные в программе

я же и предлагаю instead of update.
в самом триггере в вашем распоряжении inserted/deleted,
так что выбранные в программе значения у вас есть
12 ноя 15, 18:08    [18408099]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
o-o
cr@nk
Да база то по идее простая в понимании.
Логику триггера (теоретического) я смутно представляю, т.к. нужно знать значения, выбранные в программе

я же и предлагаю instead of update.
в самом триггере в вашем распоряжении inserted/deleted,
так что выбранные в программе значения у вас есть


Это да, другой вопрос: если приложение до того работало и всех устраивала логика типа

Update analysis set Templ_ID=9


по всей таблице, значит писатели этого продукта о чем-то думали?
а заменив это в триггере ТС может влезть и нарушить хрупкое хитросплетение клолебанй извилин девелоперов
12 ноя 15, 18:20    [18408158]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
cr@nk
Member

Откуда: Челябинск
Сообщений: 118
Ну я надеюсь, что я эти хитросплетающиеся извилины выпрямлю просто.
Сейчас буду курить триггеры в SQL Server

Раньше только один раз использовал триггеры и то в Postgresql :)
12 ноя 15, 18:24    [18408186]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
o-o
Guest
Winnipuh
по всей таблице, значит писатели этого продукта о чем-то думали?

если верить ТС, то ранее этот же самый код апгрэйдил выборочно.
я не верю, что ехе повредился, затерев условие where.
но я вижу загадочного зверя no_browsetable,
про к-ого пишут, он какие-то скрытые колонки позволял передавать.
это правда или нет?
а то может, раньше передавал, а теперь на 2008 это молча уволили
12 ноя 15, 18:31    [18408228]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
Glory
Member

Откуда:
Сообщений: 104751
o-o
а то может, раньше передавал, а теперь на 2008 это молча уволили

Сервер не передает себе команды
А вот какой нибудь ADO - запросто
12 ноя 15, 18:35    [18408244]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
o-o
Guest
Glory
o-o
а то может, раньше передавал, а теперь на 2008 это молча уволили

Сервер не передает себе команды
А вот какой нибудь ADO - запросто

а где я говорю, что это сервер себе передает?
я говорю, супер-ПО передавало и передает апдэйт, обрамленный в недокументированный сет.
не могло ли так случиться, что в 2000-ом он что-то значил, а в 2008-ом молча игнорируется?
я не понимаю описание этого сета и какие еще там скрытые колонки
12 ноя 15, 18:45    [18408291]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
cr@nk
Member

Откуда: Челябинск
Сообщений: 118
o-o,

Вы забываете про тот момент, что сейчас на ПК с SQL Server 2000 сейчас тоже корректно не работает

Вопрос по триггеру:
CREATE TRIGGER trg_updTempl_ID  
   ON  dbo.Analysis 
   INSTEAD OF UPDATE
AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	Update analysis set Templ_ID=XXX
	WHERE id=Max(id)
	
    -- Insert statements for trigger here

END
GO


Что вместо xxx поставить?
12 ноя 15, 18:49    [18408323]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
Glory
Member

Откуда:
Сообщений: 104751
o-o
я говорю, супер-ПО передавало и передает апдэйт, обрамленный в недокументированный сет.
не могло ли так случиться, что в 2000-ом он что-то значил, а в 2008-ом молча игнорируется?
я не понимаю описание этого сета и какие еще там скрытые колонки

До UPDATE приложение выполняет еще кучу действий.
Нет никакой уверенности, что этот текст этого апдейта не формируется в зависимости от результатов предыдущих команд.
К тому же, как я понял, сервер то заапгрейдили, а драйвера клиентские новые использовать не стали/не смогли.
Для чего так сделали - совершенно непонятно
Драйвера старые, серверный функционал новый не используется, начались странности в работе программы - это все было целью апгрейда ?
12 ноя 15, 18:56    [18408374]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
o-o
Guest
Glory
как я понял, сервер то заапгрейдили, а драйвера клиентские новые использовать не стали/не смогли.
Для чего так сделали - совершенно непонятно
Драйвера старые, серверный функционал новый не используется, начались странности в работе программы - это все было целью апгрейда ?

нет, вы упустили начало темы.
там было сказано, что у них сервер *умер*, в смысле винды.
спасли файлы базы, на новый сервер 2008 перетащили (ну, может уже некуда 2000-ый ставить
или и сам 2000-ый найти не могут)
но теперь меня тоже сомнения пробирают,
как же это они потом программу снова запустили на умершей винде?
чтобы удостовериться, что соединение по пайпам шло?
короче, кто-то что-то не договаривает
12 ноя 15, 19:04    [18408421]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
cr@nk
Member

Откуда: Челябинск
Сообщений: 118
Я вроде писал (а может только хотел), что старый комп реанимировали, но его колбасит со страшной силой. Может профиль юзера перестать запускаться. Может отдельные EXE не запускать, а после перезагрузки работать корректно целых 10 минут

Сейчас проверил триггер - отрабатывает
ALTER TRIGGER [dbo].[trg_updTempl_ID]  
   ON  [dbo].[Analysis] 
   INSTEAD OF UPDATE
AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	Update analysis set Templ_ID='31'
	WHERE id=(SELECT max(id) FROM Analysis)
	
    -- Insert statements for trigger here

END


Осталось только 31 как-то изменить на передаваемое значение. Подскажите, как это сделать?
12 ноя 15, 19:16    [18408476]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
o-o
Glory
как я понял, сервер то заапгрейдили, а драйвера клиентские новые использовать не стали/не смогли.
Для чего так сделали - совершенно непонятно
Драйвера старые, серверный функционал новый не используется, начались странности в работе программы - это все было целью апгрейда ?

нет, вы упустили начало темы.
там было сказано, что у них сервер *умер*, в смысле винды.
спасли файлы базы, на новый сервер 2008 перетащили (ну, может уже некуда 2000-ый ставить
или и сам 2000-ый найти не могут)
но теперь меня тоже сомнения пробирают,
как же это они потом программу снова запустили на умершей винде?
чтобы удостовериться, что соединение по пайпам шло?
короче, кто-то что-то не договаривает


так он по утверждениям ТС живет по синусоиде, то воспрянет, то накроется снова, и ТС успевает там пускануть
12 ноя 15, 19:18    [18408487]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
cr@nk
Я вроде писал (а может только хотел), что старый комп реанимировали, но его колбасит со страшной силой. Может профиль юзера перестать запускаться. Может отдельные EXE не запускать, а после перезагрузки работать корректно целых 10 минут

Сейчас проверил триггер - отрабатывает
ALTER TRIGGER [dbo].[trg_updTempl_ID]  
   ON  [dbo].[Analysis] 
   INSTEAD OF UPDATE
AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	Update analysis set Templ_ID='31'
	WHERE id=(SELECT max(id) FROM Analysis)
	
    -- Insert statements for trigger here

END


Осталось только 31 как-то изменить на передаваемое значение. Подскажите, как это сделать?



этот триггер - типичная диверсия :-)

Откуда и что передается?
12 ноя 15, 19:21    [18408506]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
cr@nk
Member

Откуда: Челябинск
Сообщений: 118
Как вместо
 set Templ_ID='31'
подставить передаваемое из программы значение Templ_ID ?
12 ноя 15, 19:25    [18408531]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
из программы значение
Guest
cr@nk
Как вместо
 set Templ_ID='31'
подставить передаваемое из программы значение Templ_ID ?

если это все что есть в триггере, то нужно удалить этот триггер
и будет то что передали из программы
12 ноя 15, 19:37    [18408597]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
cr@nk
Member

Откуда: Челябинск
Сообщений: 118
Вроде проблема решена, использованием inserted. Посмотрим, что скажут завтра люди, плотно работающие с программой.
Всем ещё раз спасибо за советы!
ALTER TRIGGER [dbo].[trg_updTempl_ID]  
   ON  [dbo].[Analysis] 
   INSTEAD OF UPDATE
AS
DECLARE @TID int 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	SELECT @TID=Templ_ID
	FROM inserted
	Update analysis set Templ_ID=@TID
	WHERE id=(SELECT max(id) FROM Analysis)
	
    -- Insert statements for trigger here

END
12 ноя 15, 19:37    [18408599]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
cr@nk
Вроде проблема решена, использованием inserted. Посмотрим, что скажут завтра люди, плотно работающие с программой.
Всем ещё раз спасибо за советы!
ALTER TRIGGER [dbo].[trg_updTempl_ID]  
   ON  [dbo].[Analysis] 
   INSTEAD OF UPDATE
AS
DECLARE @TID int 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	SELECT @TID=Templ_ID
	FROM inserted
	Update analysis set Templ_ID=@TID
	WHERE id=(SELECT max(id) FROM Analysis)
	
    -- Insert statements for trigger here

END


Заходи чуть что
До скорых встреч
12 ноя 15, 19:48    [18408643]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
cr@nk
Member

Откуда: Челябинск
Сообщений: 118
Winnipuh
Заходи чуть что
До скорых встреч

Сплюнь :)
12 ноя 15, 19:55    [18408687]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
cr@nk
Winnipuh
Заходи чуть что
До скорых встреч

Сплюнь :)


да я бы сплюнул, но глядя на триггер думаю это не поможет.
Ты же отдаешь себе отчет в том, что в общем случае при апдейте нескоьких записей у тебя вылетит по ошибке здесь?

SELECT @TID=Templ_ID
	FROM inserted ------------------<----------Эта таблица содержит от 0 до N записей
	Update analysis set Templ_ID=@TID
	WHERE id=(SELECT max(id) FROM Analysis)
12 ноя 15, 20:08    [18408773]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
то есть я к тому, что надо сделать как-то так и проверить, что там в переменной

SELECT top 1 @TID=Templ_ID
FROM inserted
Update analysis set Templ_ID=@TID
WHERE id=(SELECT max(id) FROM Analysis)


Человеческим языком это звучит так: взять значение поля Templ_ID из любой, х.з. какой из множества измененных записей
и пробить это значение по всей таблице analysis
12 ноя 15, 20:12    [18408797]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
cr@nk
Member

Откуда: Челябинск
Сообщений: 118
Спасибо. В данной таблице изменяется только одна запись. Но принял к сведению и сейчас поправлю триггер
12 ноя 15, 20:16    [18408830]     Ответить | Цитировать Сообщить модератору
 Re: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
cr@nk
Спасибо. В данной таблице изменяется только одна запись. Но принял к сведению и сейчас поправлю триггер


И еще: почитай внимательно про instead of update триггер, чтобы не упустил важные моменты

https://technet.microsoft.com/ru-ru/library/ms188601(v=sql.105).aspx
12 ноя 15, 20:22    [18408872]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить