Страница 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
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); //а тут пусто
}
Пытаюсь найти группу договоров.