![]() | ![]() Products ![]() ![]() ![]() ![]() |
Home » Technical Support » ElevateDB Technical Support » Support Forums » ElevateDB General » View Thread |
Messages 1 to 4 of 4 total |
![]() |
Fri, Sep 12 2008 7:12 AM | Permanent Link |
I wrote an external module to use dateutils.pas functions in database
procedures. All seems to work fine, but functions returning a date or datetime value (DATE and TIMESTAMP in server side), always return NULL. Input DATE parameters arrive ok to the DLL, but returning DATE values always fail. See sample: if SameText(RoutineName,'StartOfTheMonth') then // Params.FindParam('Result').AsDate := DateUtils.StartOfTheMonth(Params.FindParam('aDate').AsDate) Params.FindParam('Result').AsDate := EncodeDate(2009,09,01) else .... Funcion is declared as: EXECUTE IMMEDIATE 'CREATE FUNCTION "StartOfTheMonth" (IN aDate DATE) RETURNS DATE EXTERNAL NAME "M01DateUtils";'; This function: EXECUTE IMMEDIATE 'CREATE FUNCTION "DaysInMonth" (IN aDate DATE) RETURNS SMALLINT EXTERNAL NAME "M01DateUtils" DESCRIPTION ''Returns days in aDate current month'';'; works fine, due IN date arrives ok, and SMALLINT result is posted ok to database: if SameText(RoutineName,'DaysInMonth') then Params.FindParam('Result').AsInteger := DateUtils.DaysInMonth(Params.FindParam('aDate').AsDate) It's a bug? What's wrong? I guess Params.FindParam('Result') is declared implicit, it's ok the name "Result"? Tiago Ameller tiago put_an-a-_in_a_circle sistemasc.net Sistema, S.C. | |
Fri, Sep 12 2008 7:41 AM | Permanent Link |
Tim Young [Elevate Software] Elevate Software, Inc. ![]() | Tiago,
<< I wrote an external module to use dateutils.pas functions in database procedures. All seems to work fine, but functions returning a date or datetime value (DATE and TIMESTAMP in server side), always return NULL. >> They seem to be working fine here B5. You might be running into this issue in B4 and earlier: http://www.elevatesoft.com/incident?action=viewrep&category=edb&release=2.01&type=f&incident=2751 Due to the fact that we squash load exceptions currently, the end result is that the return values are all NULL. Are you testing this in the EDB Manager ? -- Tim Young Elevate Software www.elevatesoft.com |
Fri, Sep 12 2008 8:00 AM | Permanent Link |
Tim,
>They seem to be working fine here B5. You might be running into this issue >in B4 and earlier: > >http://www.elevatesoft.com/incident?action=viewrep&category=edb&release=2.01&type=f&incident=2751 Ok, I'll make a copy of m01dateutils.dll with other name and define first used function with one module and second used function with other. >Are you testing this in the EDB Manager ? Yes. Another related question. Trying to avoid using EntOfMonth function: -- DECLARE wkDate DATE DEFAULT StartOfTheMonth(aDate); -- returns NULL -- DECLARE wkEndMonth DATE DEFAULT EndOfTheMonth(aDate); -- returns NULL DECLARE iDays INTEGER DEFAULT DaysInMonth(aDate); -- works ok DECLARE wkDate DATE DEFAULT aDate; -- lets asume first day in month as input DECLARE wkEndMonth DATE DEFAULT aDate + INTERVAL iDays DAY; -- calculate last day in month -- FAILS -- But INTERVAL iDays DAY fails (expected a constant not a vale). How can I do this? Tiago Ameller tiago put_an-a-_in_a_circle sistemasc.net Sistema, S.C. | |
Fri, Sep 12 2008 9:20 PM | Permanent Link |
Tim Young [Elevate Software] Elevate Software, Inc. ![]() | Tiago,
<< But INTERVAL iDays DAY fails (expected a constant not a vale). How can I do this? >> You've got the syntax wrong - you can't use an INTERVAL constant expression with a variable. You need to use this instead: DECLARE wkEndMonth DATE DEFAULT aDate + CAST(iDays AS INTERVAL DAY); However, note that B4 has a bug with respect to casting INTEGER values to INTERVALs: http://www.elevatesoft.com/incident?action=viewrep&category=edb&release=2.01&type=f&incident=2756 -- Tim Young Elevate Software www.elevatesoft.com |
This web page was last updated on Wednesday, July 9, 2025 at 04:58 PM | Privacy Policy![]() © 2025 Elevate Software, Inc. All Rights Reserved Questions or comments ? ![]() |