Страница 2 из 19

Re: Прямой SQL

Добавлено: 15 сен 2010, 16:53
BlazeBio
Нет, это не очень хорошее решение :( .Мне кажется проблема кроется в схемах. Пробовал katmc - всё нормально отрабатывает... Вот как обойти эти схемы?

Re: Прямой SQL

Добавлено: 15 сен 2010, 16:56
ilshat
А с правами там все в порядке?

Re: Прямой SQL

Добавлено: 15 сен 2010, 17:13
BlazeBio
А что может быть с правами не в порядке?

Re: Прямой SQL

Добавлено: 16 сен 2010, 13:09
BlazeBio
Запрос 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);
Неужели нельзя обойти данную ситуация не создавая постоянную таблицу в каталоге суппорта? :?:

Re: Прямой SQL

Добавлено: 16 сен 2010, 14:52
Den
В папке запуска Галы ,если с ошибками собрана конструкция по синтаксису, или не хватает прав, например, на таблы, то мессаги об этом пишутся в лог туда. В случае mssql это ms70drv.log ,в оракле чей какой нить там ORAdrv.log формируется...

Re: Прямой SQL

Добавлено: 16 сен 2010, 15:33
Den
На скуле в БД 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

Добавлено: 16 сен 2010, 17:23
BlazeBio
процедура в Oracle

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

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)
Идёт улёт в RunTimeError. Den, Может select...into в процедуре? И что за (s$*)? Почему пишется testorg при вызове, а не dbo.S$testorg?

Re: Прямой SQL

Добавлено: 17 сен 2010, 11:01
Den
BlazeBio писал(а): И что за (s$*)? Почему пишется testorg при вызове, а не dbo.S$testorg?
Где то на форумах такое кто то писал что с таким префиксом должна процедура обзываться..или в доке ..не помню сейчас, блин (
Но так работает вот .По крайней мере на скуле. Хотя по идее на Оракле тож должно пахать.

Re: Прямой SQL

Добавлено: 17 сен 2010, 15:03
Alex_R
Подскажите как этот запрос

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

  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

Добавлено: 12 окт 2010, 12:18
Alex_R
Подскажите должен ли данный запрос работать в прямом SQL

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

SELECT Pick.cRec FROM Pick WHERE Pick.wList = 1
что то у меня не отрабатывает(, если его нельзя заставить работать, то можно ли както по другому использовать результаты множественного выбора в прямом SQL?

Re: Прямой SQL

Добавлено: 25 фев 2011, 18:55
Yuri
Доброго времени суток.
Имеется кусочек кода

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

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);
В SQL запрос должны подаваться 2 переменные, сожержащие даты, по которым и должна быть произведена выборка.
Подскажите пожалуйста как подать parDateB и parDateE в эапрос. Интересует синтаксис.
И примет ли сервер эту подстановку? Ведь я полагаю, что именно он выполняет запрос в данном случае.

Re: Прямой SQL

Добавлено: 25 фев 2011, 19:41
Masygreen

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

sqlBindParam(stmt, 1, date(01,01,2011));
в запросе вопросик, номера по очереди

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

sqlAddStr(stmt_str,'where  ? <> katsopr.dto');

Re: Прямой SQL

Добавлено: 28 фев 2011, 11:46
Yuri
Спасибо большое :cool:

Re: Прямой SQL

Добавлено: 02 мар 2011, 11:39
win
Здравствуйте, есть небольшая проблема: не получается передать строковую переменную (параметр №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);

Re: Прямой SQL

Добавлено: 02 мар 2011, 12:13
Vik
Если у вас параметр №1 константа, сделайте так:

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

sqlAddStr(str_handle, '''user'' = UserDeskRep.ownname ');