Страница 1 из 1

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

Добавлено: 08 окт 2009, 16:08
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",
сообщение "Код"не выводится...

Добавлено: 08 окт 2009, 16:21
Darikon
видимо режется здесь по протекту:

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

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

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

учитываются настройки Protect-а, из SQL запроса отсекаются данные, доступ к которым запрещен.
как можно дать доступ к вьюхе?

Добавлено: 08 окт 2009, 16:39
ilshat
права проверили на вьюху саму? дайте на select права public-у

Добавлено: 08 окт 2009, 17:00
Darikon
ilshat
не в этом дело.. права указаны. через MS SQL все замечательно работает, где то в дебрях протекта заморочка видимо..

Добавлено: 09 окт 2009, 03:53
mwoland
Галактика корректирует названия таблиц в прямом sql'е. В запросе напишешь "from katmc", сервер получит "from t$katmc". Может тоже самое происходит с 'FROM vw_table'? Можно потрэйсить запросы на сервер - корректно ли текст передается... Правда sqlExecStmt возвращает 0, поэтому вероятность кривого запроса мала..
Алсо, можно попробовать создать вьюшку через тот же директ sql (vipprogr.chm -> ... -> операторы прямого sql -> оператор create view) и работать с ней

Добавлено: 09 окт 2009, 08:07
Nikos
Ну а чтобы быть уверенным, что дело в правах, можно под администратором попробовать выполнить. Если под ним не работает, то дело не в правах.

Добавлено: 09 окт 2009, 10:37
Darikon
мда..
профайлер показывает, что запрос идет

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

SELECT NOMER, DATO FROM S$VW_TABLE
т.е. к названию вьюшки добавляется префикс "S$"

Добавлено: 09 окт 2009, 10:51
Darikon
создал вьюху S$VW_TABLE - результат тот же.
все же думаю, дело в протекте. вьюшка собирает данные в том числе из таблицы, заведенной в MS SQL. Соответственно в словаре ее нет.

Добавлено: 09 окт 2009, 10:57
Darikon
как интересно определяется,

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

учитываются настройки Protect-а, из SQL запроса отсекаются данные, доступ к которым запрещен.
доступ к каким данным запрещен...

Добавлено: 09 окт 2009, 11:52
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.

Вроде работает - т.е. в мессаг выводит нрек и название контр-та из вью.

Добавлено: 09 окт 2009, 12:14
edward_K
в протекте можно задать права на хранимые процедуры - может это не дает?

Добавлено: 09 окт 2009, 12:24
Darikon
Den
на родных таблицах Галактики без проблем все работает

edward_K
Мысль! пробую..

Добавлено: 09 окт 2009, 13:03
Darikon
edward_K
в протекте можно задать права на хранимые процедуры
только добавить туда возможно только через запрос видимо.
пока не понял как.