Страница 1 из 1
воспользоваться представлением в MS SQL
Добавлено: 08 окт 2009, 16:08
Darikon
возможно ли воспользоваться через Галактический интерфейс вьюшкой, созданной в MS SQL? например, через прямой SQL?
пробовал так:
представление vw_table
код
Код: Выделить всё
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
мда..
профайлер показывает, что запрос идет
т.е. к названию вьюшки добавляется префикс "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
в протекте можно задать права на хранимые процедуры
только добавить туда возможно только через запрос видимо.
пока не понял как.