Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 MS SQL Server 2005  [new]
Galadriel75
Member

Откуда:
Сообщений: 1383
Доброе время суток!
Кто-нибудь может подсказать: Необходимо отслеживать дату обновления таблиц: Сервер - MS SQL Server Express Edition, клиент: Delphi 7 ADO.
Для такой ситуации есть запрос:

 SELECT OBJECT_NAME(OBJECT_ID) AS TableName, last_user_update,* 
                   FROM sys.dm_db_index_usage_stats 
                   WHERE database_id = DB_ID( dbo.WORK) 
                   AND OBJECT_ID=OBJECT_ID(MP01502)


Запрос превосходно отрабатывает, если его открыть в SQL Server Management Studio Express, но, если его пришлет клиент на сервак, сервак возвратит вместо нужного имени таблицы null - так как клиент не имеет прав на просмотр метаданных... Вопрос - что нужно делать, чтобы из простейшего приложения на Delphi получить данные запросом со всеми правами - нужно для синхронизации данных между двумя платформами чтобы сравнивать даты и принимать решение об обновлении.
Вот как делается в делфи:
     q.SQL.Text := ' SELECT OBJECT_NAME(OBJECT_ID) AS TableName, last_user_update,* '+
                   ' FROM sys.dm_db_index_usage_stats '+
                   ' --WHERE database_id = DB_ID( N''dbo.WORK'') '+
                   ' --AND OBJECT_ID=OBJECT_ID(N''MP01502'')';
    q.Open;


Заранее спасибо за наводку куда копать.... Гугл ни в чем не признался...
11 апр 12, 12:48    [12398602]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Galadriel75
клиент не имеет прав на просмотр метаданных
1. И? Разве можно как-то подругому?
Т.е. клиент хочет обновить таблицы, на которые у него нет прав? Но при этом вас смущает только, что эти таблы не высвечиваются в списке для обновления.
2. А вы так все запросы храните в клиенте, и если надо чёта подправить вы перекомпилируете клиент?
3. В процедуре можно указать EXECUTE AS OWNER (запускать процедуру от имени владельца процедуры->схемы->базы)
4. Есть стандартные средства синхронизации данных (и не одно). Квадратный ласапед?
11 апр 12, 13:17    [12398892]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Galadriel75, запрос поместить в процедуру, назначить права процедуре.
11 апр 12, 13:17    [12398893]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Galadriel75
Member

Откуда:
Сообщений: 1383
Ну, возможно изобретаю велосипед....
Обновлять таблицы я могу и из клиента (UPDATE...) - на обновление права есть
Но мне надо просто получить данные из статистической таблицы SQL сервера... там где имя таблицы - там сервак пишет null...

А по поводу разных платформ - это слишком высоко сказано - просто все еще вращаются на одном из минских предприятий DOS приложения, которые гоняют по сети DBF файлы, и вот в данном случае было неплохо тянуть из дбф инфу после того, как ее обновит досовское приложение, при этом проще всего это сделать банальным сравнением дат обновления....
А по поводу синхронизаторов - тут не тот случай - в DBF туча инфы, которая может быть противоречива и избыточна, в одном символьном поле может хранится два значения (через запятую) - типа это два числа в одном поле... могут быть дубликаты, которые надо отсеять.... в общем тут помимо синхронизации, таблицы приводятся к норомальной форме, подчищаются, убираются противоречия и избыточность - на серваке оседает уже то, что может легко обработаться SQL запросом...
11 апр 12, 14:29    [12399638]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Galadriel75
Member

Откуда:
Сообщений: 1383
Mnior
Galadriel75
клиент не имеет прав на просмотр метаданных
1. И? Разве можно как-то подругому?
Т.е. клиент хочет обновить таблицы, на которые у него нет прав? Но при этом вас смущает только, что эти таблы не высвечиваются в списке для обновления.
2. А вы так все запросы храните в клиенте, и если надо чёта подправить вы перекомпилируете клиент?
3. В процедуре можно указать EXECUTE AS OWNER (запускать процедуру от имени владельца процедуры->схемы->базы)
4. Есть стандартные средства синхронизации данных (и не одно). Квадратный ласапед?


на обновление таблиц права есть - нет прав на просмотр метаданных...

Часть запросов висит в клиенте, часть снаружи - тут как настроение... в принципе все пишется на скорую руку - не до оптимизации.... а по поводу перекомпиляции - проги все равно дописываются без конца - начальство сказало надо, значит пишем...
а потом кидаем на сервак. Где-то в сети кто-то запустил у себя прогу - она первым делом сравнилась с версией на серваке и если увидела, что на серваке более свежая - тут же сама себя и обновляет.... а поскольку проги всеравно без конца дописываются, пишутся разными программерами, которые по разному видят что и как, то хранить запросы вне клиента - как то неохота со всеми это решать - не та зарплата - пишут так, чтоб просто стабильно проги работали, давали инфу правильную.... больше ничего и не надо никому...
11 апр 12, 14:42    [12399767]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
skorpk
Member

Откуда: Волгоград
Сообщений: 276
Galadriel75,
Дайте права на VIEW SERVER STATE
11 апр 12, 23:03    [12402732]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Galadriel75
Member

Откуда:
Сообщений: 1383
skorpk
Galadriel75,
Дайте права на VIEW SERVER STATE


Ок! Спасибо! Буду пробовать! Потом отпишусь - может еще кому пригодится!
12 апр 12, 09:38    [12403578]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Galadriel75
на обновление таблиц права есть - нет прав на просмотр метаданных...
Не верю. (С)

OBJECT_NAME (Transact-SQL)
Разрешения
Необходимо разрешение ANY на данный объект. Чтобы указать идентификатор базы данных, также требуется разрешение CONNECT на базу данных или необходимо включить гостевую учетную запись.

skorpk
Дайте права на VIEW SERVER STATE
А не жирно?
Хотя Galadriel75 пофиг на бехопастность, точнее там нечего скрывать.
13 апр 12, 09:59    [12409997]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Galadriel75
Member

Откуда:
Сообщений: 1383
Mnior
Galadriel75
на обновление таблиц права есть - нет прав на просмотр метаданных...
Не верю. (С)

OBJECT_NAME (Transact-SQL)
Разрешения
Необходимо разрешение ANY на данный объект. Чтобы указать идентификатор базы данных, также требуется разрешение CONNECT на базу данных или необходимо включить гостевую учетную запись.

skorpk
Дайте права на VIEW SERVER STATE
А не жирно?
Хотя Galadriel75 пофиг на бехопастность, точнее там нечего скрывать.


Доброе время суток!

Все, что мне надо, это всего лишь получить ту же инфу, выполнив
    q.SQL.Text := ' SELECT OBJECT_NAME(OBJECT_ID) AS TableName, last_user_update,* '+
                   ' FROM sys.dm_db_index_usage_stats '+
                   ' --WHERE database_id = DB_ID( N''dbo.WORK'') '+
                   ' --AND OBJECT_ID=OBJECT_ID(N''MP01502'')';
    q.SQL.SaveToFile('Aps.sql');
    q.Open;
, которую выдаст точно такой же запрос, если его открыть в SQL Management Studio

Если делфи отправит запрос, то получит вместо имени таблицы null. Если в Management - то имя таблицы
Значит скорее всего дело в подключении из Delphi к серваку.... То есть возможно надо ковыряться или со строкой подключения или еще с чем..... Хотя вроде подключение из Delphi и при запуске Management Studio выдается один и тот же юзер и пароль.... Вроде права должны быть одинаковы.... Пока еще не копал.... Скоро к этому вернусь...

Кстати (это не по теме уже) - есть класс, самодельный) который позволяет изящно вклинить SQL запрос в исходник, при этом все будет легко читаемо и понятно, какой бы навороченности и сложности запрос бы ни был! Чутка позже выложу его...
13 апр 12, 14:54    [12412440]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
Galadriel75
Кстати (это не по теме уже) - есть класс, самодельный) который позволяет изящно вклинить SQL запрос в исходник, при этом все будет легко читаемо и понятно, какой бы навороченности и сложности запрос бы ни был! Чутка позже выложу его...

Нахуа ? Скрипт линкуется как ресурс.
13 апр 12, 14:57    [12412468]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Galadriel75
Member

Откуда:
Сообщений: 1383
Ken@t
Galadriel75
Кстати (это не по теме уже) - есть класс, самодельный) который позволяет изящно вклинить SQL запрос в исходник, при этом все будет легко читаемо и понятно, какой бы навороченности и сложности запрос бы ни был! Чутка позже выложу его...

Нахуа ? Скрипт линкуется как ресурс.



ну или так.... я тоже думаю в ресурс нафигачить скриптов...
13 апр 12, 15:18    [12412698]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Galadriel75
Member

Откуда:
Сообщений: 1383
Ну вот я вернулся к теме.... попробовал еще раз дорваться к статистике из Delphi - не пускает
погуглил, кое-что нарыл.... оказалось чтобы дорваться до статистики сервака, надо не помню что уже - тоже что-то такое прописать на серваке. Так оказалось это что-то со стороны Delphi тоже не прописывается - опять нету прав.

Вот вопрос - если при одних и тех же правах из SQL Management можно инфу увидеть, а из Delphi (ADO) нельзя
значит, скорее всего, как-то можно и из Delphi, не меняя настроек Сервера???
31 май 12, 11:00    [12641847]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Galadriel75
Member

Откуда:
Сообщений: 1383
Есть может какие идеи?
31 май 12, 11:01    [12641863]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Glory
Member

Откуда:
Сообщений: 104751
Galadriel75
Вот вопрос - если при одних и тех же правах из SQL Management можно инфу увидеть, а из Delphi (ADO) нельзя
значит, скорее всего, как-то можно и из Delphi, не меняя настроек Сервера???

Для этого надо из Delphi выполнять такой же запрос, что и SQL Management Studio
31 май 12, 11:03    [12641878]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Galadriel75
Member

Откуда:
Сообщений: 1383
Glory
Galadriel75
Вот вопрос - если при одних и тех же правах из SQL Management можно инфу увидеть, а из Delphi (ADO) нельзя
значит, скорее всего, как-то можно и из Delphi, не меняя настроек Сервера???

Для этого надо из Delphi выполнять такой же запрос, что и SQL Management Studio


именно это я и делал - так вот там где имя таблицы - получаю null а в SQL Management Studio - все ок!
31 май 12, 11:12    [12641949]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Galadriel75
Member

Откуда:
Сообщений: 1383
вот запрос:

SELECT OBJECT_NAME(OBJECT_ID) AS TableName, last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( dbo.WORK)
AND OBJECT_ID=OBJECT_ID(MP01502)
31 май 12, 11:12    [12641953]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Galadriel75
Member

Откуда:
Сообщений: 1383
как-то неохота триггерами ловить моменты апдейтов таблиц
31 май 12, 11:14    [12641967]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Glory
Member

Откуда:
Сообщений: 104751
Galadriel75
вот запрос:

Это тот запрос, что отправляет серверу SQL Management Studio ?
31 май 12, 11:14    [12641968]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Galadriel75
Member

Откуда:
Сообщений: 1383
Glory
Galadriel75
вот запрос:

Это тот запрос, что отправляет серверу SQL Management Studio ?

да-да
31 май 12, 11:14    [12641974]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Glory
Member

Откуда:
Сообщений: 104751
Galadriel75
Glory
пропущено...

Это тот запрос, что отправляет серверу SQL Management Studio ?

да-да

И где вы его увидели ?
31 май 12, 11:14    [12641976]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Galadriel75
Member

Откуда:
Сообщений: 1383
Glory
Galadriel75
пропущено...

да-да

И где вы его увидели ?

увидел запрос?
31 май 12, 11:15    [12641982]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Glory
Member

Откуда:
Сообщений: 104751
Galadriel75
Glory
пропущено...

И где вы его увидели ?

увидел запрос?

Ну да - где и как вы увидели запрос, который отправляет серверу SQL Management Studio
31 май 12, 11:16    [12641993]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Galadriel75
Member

Откуда:
Сообщений: 1383
нагуглил где-то так уже не помню и что-то я его открываю - а он не отрабатывает - сейчас исправлю и выложу все как надо
31 май 12, 11:20    [12642030]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Glory
Member

Откуда:
Сообщений: 104751
Galadriel75
нагуглил где-то так уже не помню и что-то я его открываю

Вы заданный вам вопрос вообще понимаете ?
Причем тут ваше нагуглил ?

Как вы проверяете, что из SQL Management Studio и из Delphi
- выполняются одинаковые запросы
- под одинаковым логином/пользователем
31 май 12, 11:23    [12642063]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005  [new]
Galadriel75
Member

Откуда:
Сообщений: 1383
SELECT OBJECT_NAME(OBJECT_ID) AS TableName, last_user_update,* 
                   FROM sys.dm_db_index_usage_stats 


че-то не совсем понимаю что происходит, но уже и в Studio вместо имен таблиц null появился....
31 май 12, 11:25    [12642090]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить