Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.045 c
1-41563
killer
2003-10-27 13:18
2003.11.13
Второй запуск программы


1-41483
Deedlit
2003-10-28 18:04
2003.11.13
Где я? StringGrid


3-41021
Vadim S
2003-10-15 17:58
2003.11.13
Ошибка при выполнении запроса MS SQL


14-41946
Марсианин
2003-10-20 01:17
2003.11.13
Открытое радио


1-41450
незнайка
2003-10-29 10:39
2003.11.13
Tthread





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский