Прямой SQL
Модераторы: m0p3e, edward_K, Модераторы
Re: Прямой SQL
Нет, это не очень хорошее решение .Мне кажется проблема кроется в схемах. Пробовал katmc - всё нормально отрабатывает... Вот как обойти эти схемы?
-
- Местный житель
- Сообщения: 222
- Зарегистрирован: 04 июн 2008, 14:35
- Откуда: Стерлитамак
- Контактная информация:
Re: Прямой SQL
А с правами там все в порядке?
Re: Прямой SQL
А что может быть с правами не в порядке?
Re: Прямой SQL
Запрос SELECT id,name, mckod, ed,ware, month_plan, plan_from_month_begin, fact_from_month_begin, difference from gal810.pp_tmp_table в SQlDeveloper выполняется(я так понимаю какие никакие права уж на просмотр точно есть), а випе такого плана не работает таблица plans пуста.
Неужели нельзя обойти данную ситуация не создавая постоянную таблицу в каталоге суппорта?
Код: Выделить всё
stmt := sqlAllocStmt;
sqlExecStmt(stmt, 'SELECT id,name, mckod, ed,ware, month_plan, plan_from_month_begin, fact_from_month_begin, difference from gal810.pp_tmp_table');
Message('Код sqlExecStmt: ' + string(sqlErrorCode(stmt)));
sqlFetchInto(stmt, #plans);
sqlFreeStmt(stmt);
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Прямой SQL
В папке запуска Галы ,если с ошибками собрана конструкция по синтаксису, или не хватает прав, например, на таблы, то мессаги об этом пишутся в лог туда. В случае mssql это ms70drv.log ,в оракле чей какой нить там ORAdrv.log формируется...
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Прямой SQL
На скуле в БД tempdb создал табл kat и запихал в нее инфу.
Далее ,описал процедуру :
CREATE PROCEDURE dbo.S$testorg AS
begin
--select f$name from t$katorg
select org from tempdb..kat
end
GO
И вызываю ее из вип :
....
sqlExecStmt(stmt,'testorg');
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);
logstrtofile('c:\debug\org.txt',s);
}
while (sqlNavigateMT( mt, ffGetNext, rec ) = tsOk);
Возвращается содержимое tempdb..kat корректно
Далее ,описал процедуру :
CREATE PROCEDURE dbo.S$testorg AS
begin
--select f$name from t$katorg
select org from tempdb..kat
end
GO
И вызываю ее из вип :
....
sqlExecStmt(stmt,'testorg');
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);
logstrtofile('c:\debug\org.txt',s);
}
while (sqlNavigateMT( mt, ffGetNext, rec ) = tsOk);
Возвращается содержимое tempdb..kat корректно
Re: Прямой SQL
процедура в Oracle
вызов процедуры
Идёт улёт в RunTimeError. Den, Может select...into в процедуре? И что за (s$*)? Почему пишется testorg при вызове, а не dbo.S$testorg?
Код: Выделить всё
create or replace
PROCEDURE "biblises.s$map"
AS
myvar int;
BEGIN
SELECT id,name, mckod, ed,ware, month_plan, plan_from_month_begin, fact_from_month_begin, difference from biblises.pp_tmp_table;
END;
Код: Выделить всё
sqlExecStmt(stmt,'map');
Message('Код sqlExecStmt: ' + string(sqlErrorCode(stmt)));
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[i]);
Message(s);
// message(mt.name);
}
while (sqlNavigateMT( mt, ffGetNext, rec ) = tsOk);
sqlFreeStmt(stmt)
sqlFreeMT(mt)
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Прямой SQL
Где то на форумах такое кто то писал что с таким префиксом должна процедура обзываться..или в доке ..не помню сейчас, блин (BlazeBio писал(а): И что за (s$*)? Почему пишется testorg при вызове, а не dbo.S$testorg?
Но так работает вот .По крайней мере на скуле. Хотя по идее на Оракле тож должно пахать.
Re: Прямой SQL
Подскажите как этот запрос
заставить видеть мою таблицу созданную так
и описанную в фейсе с запросом так
я так думаю проблема в том что это не физическая таблица, есть ли способ всеже использовать данные из нее в запросе?
Код: Выделить всё
SQLAddStr(strHandle, 'select cmc, cpodr, cparty, dsaldo, kol FROM (SELECT max(dSaldo) over (PARTITION BY cmc, cpodr, cparty) max_dsaldo, cmc, cpodr, cparty, dsaldo, kol')
SQLAddStr(strHandle, 'FROM SaldoMc where cpodr in (SELECT ttt.nrec FROM ttt) cParty <> comp(0)and dsaldo < ?) where max_dsaldo = dsaldo and kol > 0 order by cmc, cpodr')
Код: Выделить всё
table struct ChooseSklad
(
NREC : comp
)
With index (ind01=nrec);
Код: Выделить всё
create view ttt as select nrec from ChooseSklad;
Re: Прямой SQL
Подскажите должен ли данный запрос работать в прямом SQL
что то у меня не отрабатывает(, если его нельзя заставить работать, то можно ли както по другому использовать результаты множественного выбора в прямом SQL?
Код: Выделить всё
SELECT Pick.cRec FROM Pick WHERE Pick.wList = 1
-
- Посетитель
- Сообщения: 43
- Зарегистрирован: 18 ноя 2009, 02:56
- Откуда: Гомель, Республика Беларусь
Re: Прямой SQL
Доброго времени суток.
Имеется кусочек кода
В SQL запрос должны подаваться 2 переменные, сожержащие даты, по которым и должна быть произведена выборка.
Подскажите пожалуйста как подать parDateB и parDateE в эапрос. Интересует синтаксис.
И примет ли сервер эту подстановку? Ведь я полагаю, что именно он выполняет запрос в данном случае.
Имеется кусочек кода
Код: Выделить всё
Parameters parDateB,
parDateE,
parWhat,
parDelit,
parStroka,
parWhat2;
Screen Real;
Fields
parDateB : NoProtect;
parDateE : NoProtect;
parWhat : NoProtect;
parWhat1 : NoProtect;
parWhat2 : [ list '0', '1', '2', '3'], NoProtect;
Buttons
cmOK,default; cmCancel;
<<
Дата начала .@@@@@@@@@
Дата окончания .@@@@@@@@@
(.) Суммы отгрузок` (.) млн.руб.`
(.) Суммы оплат ` (.) тыс.руб.`
Знаков после запятой .@@@@@
<. OK .> <. Отмена .>
>>
End;
datastream TestStream
(
table FRTable
(
[Name] KatName;
[Summa] Summa;
);
)
end;
handleEvent
!cmInit: {}
cmOK:{
Message(parDateB);
var stmt : longInt;
stmt := sqlAllocStmt;
sqlBindCol(stmt, 1, KatName);
sqlBindCol(stmt, 2, Summa);
sqlExecStmt(stmt, 'SELECT Name, SUM(Summa) FROM (SELECT Katorg.Name AS Name, Katsopr.Summa AS Summa FROM Katsopr INNER JOIN Katorg ON Katsopr.Corg = Katorg.Nrec WHERE Katsopr.Dopr BETWEEN ДАТА1 and ДАТА2 ) AS NN GROUP BY Name ORDER BY Name');
sqlFetchInto(stmt, tnFRTable);
RunFReport(TestStream, '', true);
Подскажите пожалуйста как подать parDateB и parDateE в эапрос. Интересует синтаксис.
И примет ли сервер эту подстановку? Ведь я полагаю, что именно он выполняет запрос в данном случае.
-
- Местный житель
- Сообщения: 1089
- Зарегистрирован: 04 сен 2008, 11:27
- Откуда: Москва
- Контактная информация:
Re: Прямой SQL
Код: Выделить всё
sqlBindParam(stmt, 1, date(01,01,2011));
Код: Выделить всё
sqlAddStr(stmt_str,'where ? <> katsopr.dto');
Время ведет!
-
- Посетитель
- Сообщения: 43
- Зарегистрирован: 18 ноя 2009, 02:56
- Откуда: Гомель, Республика Беларусь
Re: Прямой SQL
Спасибо большое
Re: Прямой SQL
Здравствуйте, есть небольшая проблема: не получается передать строковую переменную (параметр №1) в запрос.
Что не так?
Что не так?
Код: Выделить всё
var stmt,str_handle: longint;
stmt := sqlAllocStmt;
sqlBindParam(stmt, 1, 'user'); //параметр №1
sqlBindParam(stmt, 2, 5599);
sqlAddStr(str_handle, 'select UserDeskRep.ownname ');
sqlAddStr(str_handle, 'from ');
sqlAddStr(str_handle, 'UserDeskRep ');
sqlAddStr(str_handle, 'where ');
sqlAddStr(str_handle, ' ? = UserDeskRep.ownname ');
sqlAddStr(str_handle, ' and ? = UserDeskRep.nrep ');
sqlPrepare(stmt, str_handle);
sqlExecute(stmt);
sqlFetchInto(stmt, #tmp);
-
- Местный житель
- Сообщения: 370
- Зарегистрирован: 28 сен 2006, 15:43
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Прямой SQL
Если у вас параметр №1 константа, сделайте так:
Код: Выделить всё
sqlAddStr(str_handle, '''user'' = UserDeskRep.ownname ');