Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];

Вниз

Доступ к представлениям на MS SQL через ADO...   Найти похожие ветки 

 
MaXie   (2002-04-15 11:45) [0]

Тривиальный вопрос:
Есть ли возможность в Delphi получить доступ к представлениям на MS SQL сервере через ADO интерфейс?
... или как до них "достучаться"?!


 
Mike S   (2002-04-15 11:47) [1]

Так же как до таблиц.


 
MaXie   (2002-04-15 11:52) [2]

Да, но элемент класса TADOtable в своем поле TableName отображает только таблицы, находящиеся на SQL сервере.
При помощи элемента какого класса можно "увидеть" представления, находящиеся на SQL сервере?


 
Mike S   (2002-04-15 11:57) [3]

TADOQuery


 
MaXie   (2002-04-15 12:10) [4]

Я конечно мало что понимаю в Delphi, но как с помощью элемента ADOQuery, получить доступ к представлениям на MS SQL?
Насколько мне известно, в ADOQuery самостоятельно пишется текст SQL-запроса.
Вопрос же заключается в том, как связать элемент с запросом (представлением), которое уже написано и находится на SQL сервере?


 
wicked   (2002-04-15 12:15) [5]

2 MaXie ©
а чё, трудно написать select <поля> from <представление>?...
представление всё равно имеет вид таблицы и из него необходимо выбирать данные...


 
MaXie   (2002-04-15 12:23) [6]

ВСЕ С НАПИСАНИЕМ ПОНЯТНО - вопросов ни каких не возникает!
Вопрос ставится иначе: "Как получить доступ к представлениям, расположенным на MS SQL сервере, через ADO интерфейс?"

Зачем писать то, что уже написано!
Зачем давать доступ к базовой таблице (даже на просмотр SELECT), если для этого предусмотрены представления, граммотно ограничивающие доступ пользователей к данным?

Так есть в Delphi возможность связать элемент с представлением на MS SQL Server или все-таки нет?


 
wicked   (2002-04-15 12:27) [7]

2 MaXie ©
а что ты понимаешь под словом ADO-интерфейс?...
он весь и построен на sql-запросах... а ADOTable, кстати, не рекомендуется использовать, он оставлен для лёгкости перевода старых bde-шных приложений под ado... конечно, ado напрямую поддерживает вещи типа ADOTable, но и microsoft оставила его в сиротах...
видать не судьба... придётся тебе писать select"ы ручками... :)


 
MaXie   (2002-04-15 12:41) [8]

2wicked

Понимаешь, wicked, проблема то заключается не в "ручках", а в ограничении доступа к данным, хранящимся на SQL сервере. Есть набор представлений, через которые осуществляется ограниченный доступ к системным и базовым таблицам Базы Данных. Как в этом случае с клиента получить доступ к информации? Писать запрос к представлению? Я понимаю, что представления, фактически, те же самые таблицы, но вот как и при помощи чего их "увидеть" при написании клиента?

P.S. Да, есть способ "достучаться" через ODBC к представлениям, но в этом случае на каждой клиентской машине необходимо предварительно его настроить (прописать учетную запись доступа к БД).


 
Mike S   (2002-04-15 12:58) [9]

select *
from dbo.sysobjects o
where OBJECTPROPERTY(o.id, N"IsView") = 1

может это тебе поможет.


 
Delirium   (2002-04-15 13:01) [10]

> MaXie © (15.04.02 11:52)

> Да, но элемент класса TADOtable в своем поле TableName отображает только таблицы, находящиеся на SQL сервере.

Это не правда - TADOTable, применительно к MSSQL, передоставляет полный список таблиц и представлений, разрешённых для использования конкретным логином. Если вы чего-то не находите проверьте права доступа.


 
Mike S   (2002-04-15 13:19) [11]

Delirium © (15.04.02 13:01)
Это правда видно.


 
Delirium   (2002-04-15 13:33) [12]

> Mike S ©
Не будем спорить на словах - обратимся к исходникам, вот кусочек из ADODB.pas


procedure TADOConnection.GetTableNames(List: TStrings;
SystemTables: Boolean);
var
TypeField,
NameField: TField;
TableType: string;
DataSet: TADODataSet;
begin
CheckActive;
DataSet := TADODataSet.Create(nil);
try
OpenSchema(siTables, EmptyParam, EmptyParam, DataSet);
TypeField := DataSet.FieldByName("TABLE_TYPE"); { do not localize }
NameField := DataSet.FieldByName("TABLE_NAME"); { do not localize }
List.BeginUpdate;
try
List.Clear;
while not DataSet.EOF do
begin
TableType := TypeField.AsString; // Как видно ниже выбираются и таблицы и представления
if (TableType = "TABLE") or (TableType = "VIEW") or
(SystemTables and (TableType = "SYSTEM TABLE")) then
List.Add(NameField.AsString);
DataSet.Next;
end;
finally
List.EndUpdate;
end;
finally
DataSet.Free;
end;
end;


А что касается MSSQL, то он корректно возвращает тип объекта (table, view или system table) так что претензии MaXie к Borland-у необоснованы.


 
MaXie   (2002-04-15 14:21) [13]

>Delirium ©

На мой логин указывается явный доступ к представлению с возможностью просмотра (SELECT) и добавления (INSERT) данных.
В модуль данных добавляется элемент класса TADOTable. В свойстве Connection указывается имя элемента класса TADOConnection, который обеспечивает соединение клиента с БД. Заходим в список доступных таблиц TableName - имени представления, к которому на мой логин явно указан доступ, нет!
Что я делаю не так, что не позволяет мне "увидеть" представление?


 
Johnmen   (2002-04-15 14:27) [14]

И гранды на вью выданы, да ?


 
S_S_S   (2002-04-15 16:52) [15]

2 Johnmen
>На мой логин указывается явный доступ к представлению с возможностью просмотра (SELECT) и добавления (INSERT) данных.

А это что тогда?

>MaXie
попробуйте через ЕМ просмотреть вашу вьюху



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.005 c
1-26114
volph
2002-04-24 10:14
2002.05.09
Как узнать есть ли в узле дерева потомок?


7-26281
stx
2002-02-08 11:50
2002.05.09
usb 2.0


3-26026
Кэп
2002-04-16 15:26
2002.05.09
Как программно задать нужную кодировку таблицы?


14-26266
copyr25
2002-03-30 07:51
2002.05.09
Я редко спрашиваю, а тут припёрло:))


3-25996
Ser_Kham1
2002-04-15 17:39
2002.05.09
DOA и ADO





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский