воспользоваться представлением в MS SQL

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Darikon
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 17 июн 2008, 17:07
Откуда: Москва
Контактная информация:

воспользоваться представлением в MS SQL

Сообщение Darikon »

возможно ли воспользоваться через Галактический интерфейс вьюшкой, созданной в MS SQL? например, через прямой SQL?
пробовал так:
представление vw_table

Код: Выделить всё

SELECT     dato, nomer
FROM         table1
код

Код: Выделить всё

    stmt := sqlAllocStmt;     //начало
    sqlBindCol(stmt, 1, jTable.nomer);
    sqlBindCol(stmt, 2, jTable.dato);
    sqlExecStmt(stmt, 'SELECT nomer,dato FROM vw_table');
    Message('Код sqlExecStmt: ' + string(sqlErrorCode(stmt)));

    while sqlFetch(stmt) = tsOk do
      {
Message('Код');
      }
    
    sqlFreeStmt(stmt); //конец
Сообщение "'Код sqlExecStmt" выводит "0",
сообщение "Код"не выводится...
Darikon
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 17 июн 2008, 17:07
Откуда: Москва
Контактная информация:

Сообщение Darikon »

видимо режется здесь по протекту:

Код: Выделить всё

Помимо вышеописанного способа Атлантис обеспечивает прямой доступ к SQL-серверам (DSQL). При этом текст запроса передается на SQL-сервер с минимальными изменениями:

текст запроса приводится в соответствие с особенностями реализации SQL на данном сервере;

учитываются настройки Protect-а, из SQL запроса отсекаются данные, доступ к которым запрещен.
как можно дать доступ к вьюхе?
ilshat
Местный житель
Сообщения: 222
Зарегистрирован: 04 июн 2008, 14:35
Откуда: Стерлитамак
Контактная информация:

Сообщение ilshat »

права проверили на вьюху саму? дайте на select права public-у
Darikon
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 17 июн 2008, 17:07
Откуда: Москва
Контактная информация:

Сообщение Darikon »

ilshat
не в этом дело.. права указаны. через MS SQL все замечательно работает, где то в дебрях протекта заморочка видимо..
mwoland

Сообщение mwoland »

Галактика корректирует названия таблиц в прямом sql'е. В запросе напишешь "from katmc", сервер получит "from t$katmc". Может тоже самое происходит с 'FROM vw_table'? Можно потрэйсить запросы на сервер - корректно ли текст передается... Правда sqlExecStmt возвращает 0, поэтому вероятность кривого запроса мала..
Алсо, можно попробовать создать вьюшку через тот же директ sql (vipprogr.chm -> ... -> операторы прямого sql -> оператор create view) и работать с ней
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Ну а чтобы быть уверенным, что дело в правах, можно под администратором попробовать выполнить. Если под ним не работает, то дело не в правах.
Darikon
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 17 июн 2008, 17:07
Откуда: Москва
Контактная информация:

Сообщение Darikon »

мда..
профайлер показывает, что запрос идет

Код: Выделить всё

SELECT NOMER, DATO FROM S$VW_TABLE
т.е. к названию вьюшки добавляется префикс "S$"
Darikon
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 17 июн 2008, 17:07
Откуда: Москва
Контактная информация:

Сообщение Darikon »

создал вьюху S$VW_TABLE - результат тот же.
все же думаю, дело в протекте. вьюшка собирает данные в том числе из таблицы, заведенной в MS SQL. Соответственно в словаре ее нет.
Darikon
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 17 июн 2008, 17:07
Откуда: Москва
Контактная информация:

Сообщение Darikon »

как интересно определяется,

Код: Выделить всё

учитываются настройки Protect-а, из SQL запроса отсекаются данные, доступ к которым запрещен.
доступ к каким данным запрещен...
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

где то писали уже пример вроде об этом.
Пробовал простой вариант :

1. создаешь sp на скуле $test :

CREATE PROCEDURE dbo.S$test AS
begin
select f$nrec,f$name from t$katorg
end
GO

2. На випе :

Interface testkatorg;
create view ;
var
stmt,stmt_str : LongInt;
li4 : integer;

HandleEvent
CmInit: {
stmt := sqlAllocStmt;
li4:= sqlExecStmt(stmt,'test');
Message('li4='+li4);

var mt : longInt;
sqlFetchIntoMT(stmt, mt);

var rec : array[1..1] of variant;
if (sqlNavigateMT(mt, ffGetFirst, rec) = tsOk)
do
{
var i : integer;
var s : string;
s := '';
for (i:=1; i<=Count(rec); i:=i+1)
s := s + ' ' + string(rec);
Message(s);
}
while (sqlNavigateMT( mt, ffGetNext, rec ) = tsOk);


sqlFreeStmt(stmt);

}

}
end;
end.

Вроде работает - т.е. в мессаг выводит нрек и название контр-та из вью.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

в протекте можно задать права на хранимые процедуры - может это не дает?
Darikon
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 17 июн 2008, 17:07
Откуда: Москва
Контактная информация:

Сообщение Darikon »

Den
на родных таблицах Галактики без проблем все работает

edward_K
Мысль! пробую..
Darikon
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 17 июн 2008, 17:07
Откуда: Москва
Контактная информация:

Сообщение Darikon »

edward_K
в протекте можно задать права на хранимые процедуры
только добавить туда возможно только через запрос видимо.
пока не понял как.
Ответить