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

Re: Прямой SQL

Добавлено: 29 сен 2011, 12:40
BlazeBio
Что-то я не вкуриваю, ораклейная функция вечно возвращает 0, хотя должна или 1, или 2, или 3 во всех иных случаях.

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

function SQL_F_SPREADY_PARTY(spsornrec : comp) : integer;
{
	var stmt     : LongInt;
	var stmt_str : LongInt;
	var messageErr : string;
	var nresult : integer;

	stmt := sqlAllocStmt;
	sqlBindParam( stmt, 1, spsornrec);
	sqlBindCol(stmt, 1, nresult);
	sqlAddStr(stmt_str, 'F_SPREADY_PARTY(?)');
	//f_add_spraw (param1, param2) - (код партии, наименование МЦ).
	sqlPrepare(stmt, stmt_str);
	sqlFreeStr(stmt_str);
	messageErr := sqlExecute(stmt);
	sqlFreeStmt(stmt);
	message(nresult);
//	SQL_F_SPREADY_PARTY := messageErr;
SQL_F_SPREADY_PARTY := nresult;
}

..............
	var checkparty : integer;
	checkparty := SQL_F_SPREADY_PARTY( katsopr.nrec);

Re: Прямой SQL

Добавлено: 29 сен 2011, 19:58
BlazeBio
Мб надо что-то вроде такого писать перед тем как в Oracle создавать функцию?

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

sql Function F_SPREAD_PARTY  (katsoprnrec :string ) :integer;
{
return 7;
}

Re: Прямой SQL

Добавлено: 30 сен 2011, 12:49
savov
А кто-то может сказать как работает DSQL в JS?
Есть такие ф-ии
function DSQL_RunQuery(liHandle, strQuery)
liHandle : longint - идентификатор, полученный в результате работы функции DSQL_CreateHandle()
strQuery : string - текст запроса

Функция индексации полей запроса из функции DSQL_RunQuery
function DSQL_BindCol(liHandle, wNumberCol, strType)
liHandle : longint - идентификатор, полученный в результате работы функции DSQL_CreateHandle
wNumberCol : word - номер поля в запросе из функции DSQL_RunQuery
strType : string - строковое наименование типа поля в запросе из функции DSQL_RunQuery

Функция получения записи из запроса
Возвращает код ошибки (0 - успешное выполнение).
function DSQL_GetRecord(liHandle)
liHandle : longint - идентификатор, полученный в результате работы функции DSQL_CreateHandle()

Функция для получения значения поля из записи, считанной в результате функции DSQL_GetRecord
Возвращает значение поля.
function DSQL_GetFieldValueByNum(wNumberCol)
wNumberCol : word - номер поля используемый в функции DSQL_BindCol


ВОПРОС: А КАК ОСУЩЕСТВИТЬ НАВИГАЦИЮ ПО ПОЛУЧЕННЫМ В ЗАПРОСЕ ЗАПИСЯМ??
Не понятно, как позиционироваться на первую запись и как определить максимальное их количество для выхода из цикла. Хелпа нет. Кто-то может подсказать?

Re: Прямой SQL

Добавлено: 03 окт 2011, 13:12
savov
Народ, так что,никто не знает как навигацию сделать??

Re: Прямой SQL

Добавлено: 03 окт 2011, 13:26
Vik
может быть, так:
..
DSQL_BindCol(lHandle, 1, 'string')
..
while (DSQL_GetRecord(lHandle) == 0)
{
col1 = DSQL_GetFieldValueByNum(1)
}

Сам не пробовал, лишь предполагаю по приведенному вами описанию.

Re: Прямой SQL

Добавлено: 03 окт 2011, 14:52
zna
Очень интересна данная тема в JS, но толком что-то сделать не получилось. Хотелось бы разработчиков услышать..

Re: Прямой SQL

Добавлено: 03 окт 2011, 15:16
LaaLaa
zna писал(а):Хотелось бы разработчиков услышать..
Попробуйте про JavaScript спросить на минском форуме https://forum.galaktika.ru/viewforum.php?f=6

Re: Прямой SQL

Добавлено: 03 окт 2011, 15:32
zna
Ок, спробую..

Re: Прямой SQL

Добавлено: 03 окт 2011, 15:40
zna
Тишина там, спрашивал ещё в июне: https://forum.galaktika.ru/viewtopic.ph ... c&start=15 :-?

Re: Прямой SQL

Добавлено: 04 окт 2011, 11:40
savov
Действительно, Vik был прав! Помогло, огромное спасибо!
Вот мой текст, все работает

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

iHandle = DSQL_CreateHandle();
sstr = "select persons.nrec from  persons, lschet where lschet.tperson=persons.nrec and lschet.datuv=0";
result = DSQL_RunQuery(iHandle, sstr);
DSQL_BindCol(iHandle, 1, 'comp');
while(DSQL_GetRecord(iHandle)==0)
{
 sss =DSQL_GetFieldValueByNum(1);
SPPlan.CreateSPPlan(CurPlan());
SPPlan.rewrite();
SPPlan.NrecObjstr  = sss;
SPPlan.rewrite();
SPPlan.SetCurSt(CurPlan(),0,sss);
SPPlan.TypeObjst = tp;
SPPlan.Sostst  = Ssost;
SPPlan.rewrite();
};

Re: Прямой SQL

Добавлено: 13 окт 2011, 17:51
savov
Еще вопросец в продолжение тематики DSQL+JS
Пишу код:

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

sstr1 = 'select persons.tabnmb from persons where persons.nrec = Comp(';
 nrecpersons = SPPlan.NrecObjstr;

 iHandle = DSQL_CreateHandle();

sstr1 = sstr1 + nrecpersons+')';
 result = DSQL_RunQuery(iHandle, sstr1);
 DSQL_BindCol(iHandle, 1, 'string');
 Message(sstr1,0); //вывожу строку запроса для поверки
 tabnum = DSQL_GetFieldValueByNum(1);
 Message(tabnum,0);   //  вывожу  табельный номер   


Результат получить не могу!!!!!!!
Пробовал без ф-ии Comp, без '', преобразовывал сам к 16 -ному и сравнивал строками, ничего не помогает! Причем сама переменная nrecpersons получает правильное значение!!!!! по нему в суппорте легко все находится.
Есть предложения у кого-то что можно предпринять?

Re: Прямой SQL

Добавлено: 14 окт 2011, 09:13
n0where
Функция для получения значения поля из записи, считанной в результате функции DSQL_GetRecord
function DSQL_GetFieldValueByNum(wNumberCol)

Re: Прямой SQL

Добавлено: 14 окт 2011, 10:59
Vik

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

sstr1 = 'select persons.tabnmb from persons where persons.nrec = #comp(' + nrecpersons + ')' ;

Re: Прямой SQL

Добавлено: 14 окт 2011, 11:45
savov
Спасибо n0Where! Слона я не приметил, причем в предыдущем же посте сам все правильно написал!

Re: Прямой SQL

Добавлено: 14 дек 2011, 18:46
sildae
Уважаемые, подскажите, что не так.
В JS алгоритме.

Dogovor1.setPosition(curDogovor());
if (Dogovor1.DMin == 0 & Dogovor1.Dmax == 0)
{
Message ('Нужно проставить предоплату или отстрочку платежа.');
iHandle = DSQL_CreateHandle();
sstr = "select groupsch.name from groupsch,dogovor,spgrsch where '+Dogovor1.Nrec1+'=dogovor.nrec and 1=spgrsch.wlist and '+Dogovor1.Nrec1+'=spgrsch.cbasedoc and spgrsch.cgroupsch=groupsch.nrec";
result = DSQL_RunQuery(iHandle, sstr);
Message (result); //тут печатается 0,
DSQL_BindCol(iHandle,1,'string');
aa = DSQL_GetRecord(iHandle);
Message (aa); //а тут 4, уже ошибка
gr = DSQL_GetFieldValueByNum(1);
Message (gr); //а тут пусто
}


Пытаюсь найти группу договоров.