Michael Van Canneyt wrote 29 lines
On Mon, 8 Mar 2021, Toru Takubo via fpc-pascal wrote:
> Hi,
>
> I am developing my app on Windows and building apps for other
> platforms by using cross compiler. Now I have a problem only
> occurred on Linux ARM.
>
> The problem is that it cannot write datetime field on sqlite3
> database. It can read/write other fields like int, varchar
> or blob, but always write zero in datetime (maybe float as well)
> field.
>
> Does anyone have an idea about this issue? I am not sure it is
> fpc issue, but better to report bug?
It sounds like a floating point problem. As you probably know, a TDateTime
type is actually a double type. Did you try with a float value ?
The DB explorer tools probably just use strings to read/write from the
database, so they will not be bothere by such things, but FPC stores dataset
values in 'native' formats in memory.
I don't know what to advise to further investigate the issue, One thing to
try would be to test whether normal float arithmetic or date arithmetic works.
If not, then the compiler people will need to give more advice.
I created a simple test code, and ran on linux-i386 and linux-arm. Test on linux-i386 is OK but on linux-arm, I got unexpected values "30-12-99" as datetime and "2.12199579096527E-314" as float, which are different from values previously set. (except INT and VARCHAR fields)
---linux-i386-------------------------------------------- INT, VARCHAR, DATETIME, DOUBLE 0, 9-3-21 08:50:23, 9-3-21 08:50:23, 0
1, 9-3-21 12:16:06, 9-3-21 12:16:06, 0.142857142857143 2, 9-3-21 15:41:49, 9-3-21 15:41:49, 0.285714285714286 3, 9-3-21 19:07:32, 9-3-21 19:07:32, 0.428571428571429 4, 9-3-21 22:33:15, 9-3-21 22:33:15, 0.571428571428571 5, 10-3-21 01:58:58, 10-3-21 01:58:58, 0.714285714285714 6, 10-3-21 05:24:40, 10-3-21 05:24:40, 0.857142857142857 7, 10-3-21 08:50:23, 10-3-21 08:50:23, 1
8, 10-3-21 12:16:06, 10-3-21 12:16:06, 1.14285714285714 9, 10-3-21 15:41:49, 10-3-21 15:41:49, 1.28571428571429
---linux-arm--------------------------------------------- INT, VARCHAR, DATETIME, DOUBLE 0, 9-3-21 08:55:53, 30-12-99, 2.12199579096527E-314 1, 9-3-21 12:21:36, 30-12-99, 2.12199579096527E-314 2, 9-3-21 15:47:18, 30-12-99, 2.12199579096527E-314 3, 9-3-21 19:13:01, 30-12-99, 2.12199579096527E-314 4, 9-3-21 22:38:44, 30-12-99, 2.12199579096527E-314 5, 10-3-21 02:04:27, 30-12-99, 2.12199579096527E-314 6, 10-3-21 05:30:10, 30-12-99, 2.12199579096527E-314 7, 10-3-21 08:55:53, 30-12-99, 2.12199579096527E-314 8, 10-3-21 12:21:36, 30-12-99, 2.12199579096527E-314 9, 10-3-21 15:47:19, 30-12-99, 2.12199579096527E-314
I used a shared library libsqlite3.so included in the "DB Browser for SQLite", so it should work. What can cause such a problem only in the specific field on the specific platform?
Thank you in advance for any advice.
Toru