请选择 进入手机版 | 继续访问电脑版

LibreOffice中文社区

 找回密码
 马上加入

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
开启左侧

[未确认] firebird数据库引擎导入数据出错

[复制链接]
grassvalley 发表于 2019-4-18 12:05:30 | 显示全部楼层 |阅读模式
问题描述:
在Base中创建的firebird引擎数据库,使用粘贴方式导入数据库时出错。
重现步骤:1、使用base新建一个firebird引擎的数据库。
2、建立一个表,包含一个自动序列字段,一个文本字段,一个浮点字段。
3、打开calc,创建一个列表,对应数据库表的三个列,其中字段序列字段可以不输入内容,随便输入几行内容。
4、使用复制、粘贴功能,将calc中的数据导入到base中。忽略自动序列字段。

当前的行为和结果:
这时出现错误警告:Incorrect type for setString。选择 否,会终止导入,直接导致导入失败。选择 是,结果不正确(根据多次测试,可能会无法导入数据,也可能导入的数据不正确)。

期望的行为和结果:
正确导入数据,无错误警告

操作系统和软件版本:
ubuntu 18.04,18.10,19.04 多个版本,64位版。
LIbreOffice 6.1.x, 6.2.x 多个版本,64位版

用于测试的附件(非必须):



错误提示图片
截图-190418-120008.png
 楼主| grassvalley 发表于 2019-7-22 12:54:55 | 显示全部楼层
在最新的6.2.5版本里,经过测试,发现这个问题依然存在。
但是,记录没有丢失。以前出现这种问题时,记录会丢失。经过初步测试,我认为这个错误和数字类型(Decimal/Numeric)的转换有关系。
在Calc中输入的数字,导入到Base表格中的Decimal列时,会被除以10000。我原本输入的2125.2125,变成了0.2125(设置的保留四位小数)。
另外测试了 文本、整数、浮点、日期、时间、逻辑等五种类型,未发现错误。

希望有人能帮忙提交给开发组

 楼主| grassvalley 发表于 2019-7-25 09:20:45 | 显示全部楼层
再次补充:
1、数字类型的列在导入时,会无视小数点位数。假如源数字为10000,目标类型为deciaml(15,4),那么后面的四个0会作为小数,导入后源数字变成1。如果目标类型为decimal(15,1),则把最后的0作为小数。如果源数字本身已经包含了小数,在导入过程会舍弃小数部分,并按前面的规则继续转换。
2、decimal类型不能设定小数为0位,至少为1位。在实际应用上小数为0就是整数,这个没什么问题,但是还是略感怪异
3、逻辑类型的列,只要列内有值,不管是1或者0,或者calc内置的false常量,导入后都成 真。如果没有值,则为NULL。不能导入 假。

希望有人能帮忙提交给开发组
高原之狼 发表于 2019-7-25 10:21:23 | 显示全部楼层
最近官方 bug 报告系统里有很多关于 Firebird 数据库引擎处理浮点数相关的声音,我因为并不用 Base,都没有点进去看。你英语如果足够好,可以去看一下。

如果你方便下载并测试刚刚发行的 6.3.0 RC2 版本,能否看一下这个问题是否还存在?如果不方便测试,我本周末会试着重现一下此问题。
高原之狼 发表于 2019-7-26 21:11:35 | 显示全部楼层
重现步骤:
1、使用base新建一个firebird引擎的数据库。
2、建立一个表,包含一个自动序列字段,一个文本字段,一个浮点字段。
3、打开calc,创建一个列表,对应数据库表的三个列,其中字段序列字段可以不输入内容,随便输入几行内容。
4、使用复制、粘贴功能,将calc中的数据导入到base中。忽略自动序列字段。

这个步骤写得过于含糊,无法重现。

我在 Base 里创建了 Firebird 引擎的数据库,建立了一个新表,三个字段分别是 Integer, Text[VarChar], Float 格式。然后在 Calc 里三个单元格分别输入了整数、英文文字、和浮点数。

然后根本不知道怎么用复制粘贴功能导入到数据库。同时选中三个单元格复制的话,在数据库里打开表后并不能对整个记录粘贴,点击文本格式字段后,粘贴出来的是“1Text5.123”这样三个单元格内容连在一起的结果;如果只选中浮点数那个单元格复制的话,粘贴到浮点格式的字段没有任何问题。
 楼主| grassvalley 发表于 2019-7-31 08:56:37 | 显示全部楼层
从libreOffice Calc中复制表数据到LibreOffice Base是这样操作的:首先保证Calc中的数据列数和类型到Base中可以正常转换。然后在Calc中复制数据,到Base中的“表”列表视图,右击要复制过去的目标表(注意不是打开目标表!),出现选单复制。点击复制后,会出现向导式对话框,包括复制的数据是纯数据还是带有列标题,对关键字怎么处理,然后有列对照和类型转换,最后点击完成。
从base中复制数据到calc就简单多了,右击弹出菜单,选复制,到calc中选粘贴即可。表、视图、查询都可以这样。

另外在6.2.5版本中,是Decimal类型和逻辑类型出错,其他类型不再出错。具体可看2楼,3楼叙述。
本人英语阅读可以勉强应付,描述问题就做不到了
 楼主| grassvalley 发表于 2019-7-31 09:06:09 | 显示全部楼层
在bug list搜了一下,竟然是一个从2012年就提交的问题

https://bugs.documentfoundation.org/show_bug.cgi?id=53027

东拉西扯,没有结果
高原之狼 发表于 2019-7-31 14:26:23 | 显示全部楼层
grassvalley 发表于 2019-7-31 09:06
在bug list搜了一下,竟然是一个从2012年就提交的问题

https://bugs.documentfoundation.org/show_bug.cgi ...

Bugzilla 的搜索默认只找没修复的 bug,所以你只看到一个老 bug,其实未必和你遇到的是同一个问题。

我上面说的是看到最近修复了不少和 Firebird 相关的 bug,比如:
https://bugs.documentfoundation.org/show_bug.cgi?id=70425
https://bugs.documentfoundation.org/show_bug.cgi?id=105101
https://bugs.documentfoundation.org/show_bug.cgi?id=126268


你的问题更大可能是这个:

https://bugs.documentfoundation.org/show_bug.cgi?id=123591


您需要登录后才可以回帖 登录 | 马上加入

本版积分规则

Archiver|手机版|小黑屋|LibreOffice中文社区 ( 粤ICP备13080851号-4 )

GMT+8, 2019-11-21 19:31 , Processed in 0.099509 second(s), 35 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表