Форум: "Базы";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизПри запуске UDF разрывается коннект с базой...?! Найти похожие ветки
← →
KIR (2003-10-16 11:03) [0]UDF элементарная - делает из даты год с месяцем:
function DateToYM(Dat: TDate): Extended;
var
Y,M,D: Word;
begin
DecodeDate(Dat,Y,M,D);
Result := Y+D/100;
end;
Вот и все... а IB почему-то коннект с базой рвет.
← →
Fiend (2003-10-16 11:35) [1]потому что выполнение твоей функции вызывает исключение.
формат даты которая поступает на вход твоей функции не совместим с дельфовым TDate.
и хотелось бы посмотреть на скрипт регистрации твоей функции
← →
KIR (2003-10-16 11:54) [2]Скрипт регистрации:
DECLARE EXTERNAL FUNCTION DATETOYM DATE
RETURNS NUMERIC(4,2)
ENTRY_POINT "DateToYM" MODULE_NAME "myudf.dll"
← →
mOOx_ (2003-10-16 12:17) [3]А код DateToYM?
← →
KIR (2003-10-16 12:18) [4]>mOOx_ © (16.10.03 12:17) [3]
А первое сообщение?
← →
Johnmen (2003-10-16 12:33) [5]>KIR ©
1. library + F1 и далее по ссылкам с примерами
2. Какова смысловая нагрузка Y+D/100 ? И причем тут месяц ???
← →
Danilka (2003-10-16 12:40) [6][5] Johnmen © (16.10.03 12:33)
видимо все это потом будет преобразовываться в строку, типа: 2003.10, то-есть октябрь 2003-го года. Правда, непонятно, к чему весь этот изврат. :))
← →
Fiend (2003-10-16 12:45) [7]во первых в регистрации ошибки:
возвращается из функции значение, а не указатель, поэтому в регистрации набыло написать numeric(4, 2) by value.
во вторых возвращаете exnended(а это 10 байт), а сервер ожидает
numeric(4, 2) (а это помоему 4 байта).
и прочти про разницу форматов даты Firebird и Delphi
← →
KIR (2003-10-16 12:57) [8]>Danilka © (16.10.03 12:40) [6]
Если тебе, такому продвинутому программеру, не понятно, к чему весь этот изврат, то посиди и подумай, поприкидывай, потом напиши сюда еще пару предположений, что во что будет преобразовываться...
Есть таблица с зарплатой, там поля месяц и год типа Integer. Есть другая таблица, отражающая присутствие персонала на рабочих местах там поле дата типа Date, чтобы взять из таплицы присутствия персонала все записи за определенные месяцы определенного года (лет) мне пришло в голову Date перевести в Extended тогда можно будет выбрать все записи, например, в диапозоне 2002.01 <-> 2003.05
← →
Danilka (2003-10-16 13:02) [9][8] KIR © (16.10.03 12:57)
сколько ни думал - так и не думается, нафига для вот-этого: "тогда можно будет выбрать все записи, например, в диапозоне 2002.01 <-> 2003.05" пользоваться извратом, когда есть штатные средства для такой выборки, причем, если пользоваться именно штатными средствами и есть индекс по полю с датой, то этот индекс будет использоваться, а если извратом, то тормоза обеспечены.
← →
Fiend (2003-10-16 13:05) [10]То KIR:
Не груби, ибо сам ты глубоко неправ, если для такой тривиальной вещи собрался делать ЮДФ. К тому же не зная как делать и придя на форум за советом, хотя бы читал внимательно ответы.
да и еще у тебя одна ошибка в регистрации и прототипе функции.
параметры передаются в ЮДФ как указатели или по ссылке
← →
KIR (2003-10-16 13:13) [11]>Danilka © (16.10.03 13:02) [9]
Пожалуйста, объясни, как штатными средствами выбрать из таблицы, имеющей поля типа Date все записи начиная, например, с мая 2002 года по август 2003 включительно?
← →
Danilka (2003-10-16 13:21) [12][11] KIR © (16.10.03 13:13)
вообще-то на это есть справка по SQL, ну да ладно, это делается, например, вот-так:
SELECT * FROM table_name
WHERE field_date BETWEEN "01.05.2003" AND "31.08.2003"
← →
KIR (2003-10-16 13:31) [13]А что если пользователь хочет выбирать из выпадающего списка название месяца, а не дату? Как узнать 30 дней или 31? А может год весокосный, что тогда?
← →
Danilka (2003-10-16 13:35) [14][13] KIR © (16.10.03 13:31)
Ну да, тогда снимаю шляпу, конечно отказ от использования индексов намного эффективнее, чем в дельфях рассчитать начало или конец месяца выбранного в комбобоксе.
← →
Johnmen (2003-10-16 13:40) [15]>KIR © (16.10.03 13:31)
М-дя...
А на что тогда функции и процедуры работы с датами ?
← →
KIR (2003-10-16 13:43) [16]Убедили...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.035 c