Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

При запуске UDF разрывается коннект с базой...?!


KIR ©   (2003-10-16 11:03:00) 

UDF элементарная - делает из даты год с месяцем:

function DateToYM(Dat: TDate): Extended;
var
Y,M,D: Word;
begin
DecodeDate(Dat,Y,M,D);
Result := Y+D/100;
end;

Вот и все... а IB почему-то коннект с базой рвет.


KIR   (2003-10-16 13:43:00) [1]

Убедили...


Johnmen   (2003-10-16 13:40:00) [2]

>KIR © (16.10.03 13:31)

М-дя...
А на что тогда функции и процедуры работы с датами ?


Danilka   (2003-10-16 13:35:00) [3]

[13] KIR © (16.10.03 13:31)
Ну да, тогда снимаю шляпу, конечно отказ от использования индексов намного эффективнее, чем в дельфях рассчитать начало или конец месяца выбранного в комбобоксе.


KIR   (2003-10-16 13:31:00) [4]

А что если пользователь хочет выбирать из выпадающего списка название месяца, а не дату? Как узнать 30 дней или 31? А может год весокосный, что тогда?


Danilka   (2003-10-16 13:21:00) [5]

[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:13:00) [6]

>Danilka © (16.10.03 13:02) [9]
Пожалуйста, объясни, как штатными средствами выбрать из таблицы, имеющей поля типа Date все записи начиная, например, с мая 2002 года по август 2003 включительно?


Fiend   (2003-10-16 13:05:00) [7]

То KIR:
Не груби, ибо сам ты глубоко неправ, если для такой тривиальной вещи собрался делать ЮДФ. К тому же не зная как делать и придя на форум за советом, хотя бы читал внимательно ответы.

да и еще у тебя одна ошибка в регистрации и прототипе функции.
параметры передаются в ЮДФ как указатели или по ссылке


Danilka   (2003-10-16 13:02:00) [8]

[8] KIR © (16.10.03 12:57)
сколько ни думал - так и не думается, нафига для вот-этого: "тогда можно будет выбрать все записи, например, в диапозоне 2002.01 <-> 2003.05" пользоваться извратом, когда есть штатные средства для такой выборки, причем, если пользоваться именно штатными средствами и есть индекс по полю с датой, то этот индекс будет использоваться, а если извратом, то тормоза обеспечены.


KIR   (2003-10-16 12:57:00) [9]

>Danilka © (16.10.03 12:40) [6]
Если тебе, такому продвинутому программеру, не понятно, к чему весь этот изврат, то посиди и подумай, поприкидывай, потом напиши сюда еще пару предположений, что во что будет преобразовываться...

Есть таблица с зарплатой, там поля месяц и год типа Integer. Есть другая таблица, отражающая присутствие персонала на рабочих местах там поле дата типа Date, чтобы взять из таплицы присутствия персонала все записи за определенные месяцы определенного года (лет) мне пришло в голову Date перевести в Extended тогда можно будет выбрать все записи, например, в диапозоне 2002.01 <-> 2003.05


Fiend   (2003-10-16 12:45:00) [10]

во первых в регистрации ошибки:
возвращается из функции значение, а не указатель, поэтому в регистрации набыло написать numeric(4, 2) by value.
во вторых возвращаете exnended(а это 10 байт), а сервер ожидает
numeric(4, 2) (а это помоему 4 байта).

и прочти про разницу форматов даты Firebird и Delphi


Danilka   (2003-10-16 12:40:00) [11]

[5] Johnmen © (16.10.03 12:33)
видимо все это потом будет преобразовываться в строку, типа: 2003.10, то-есть октябрь 2003-го года. Правда, непонятно, к чему весь этот изврат. :))


Johnmen   (2003-10-16 12:33:00) [12]

>KIR ©

1. library + F1 и далее по ссылкам с примерами
2. Какова смысловая нагрузка Y+D/100 ? И причем тут месяц ???


KIR   (2003-10-16 12:18:00) [13]

>mOOx_ © (16.10.03 12:17) [3]
А первое сообщение?


mOOx_   (2003-10-16 12:17:00) [14]

А код DateToYM?


KIR   (2003-10-16 11:54:00) [15]

Скрипт регистрации:

DECLARE EXTERNAL FUNCTION DATETOYM DATE
RETURNS NUMERIC(4,2)
ENTRY_POINT "DateToYM" MODULE_NAME "myudf.dll"


Fiend   (2003-10-16 11:35:00) [16]

потому что выполнение твоей функции вызывает исключение.
формат даты которая поступает на вход твоей функции не совместим с дельфовым TDate.
и хотелось бы посмотреть на скрипт регистрации твоей функции


Наверх

Титульная страница Поиск, карта сайта Написать письмо