【问题标题】:SQLite Datatypes for use in MS Access用于 MS Access 的 SQLite 数据类型
【发布时间】:2023-03-09 23:29:01
【问题描述】:

我正在尝试将许多相当大的访问数据库 [8 个数据库中的大约 2000 万条记录] 重新创建到单个 SQLite 数据库中,然后链接到我的主 MS 访问数据库中的该数据 [充满用户输入的数据并链接到所有大桌子和东西]

我可以在 SQLite 中创建大表就好了,Access 可以链接到它,调出表,但是所有的字段类型都是作为备忘录来的,当然不能加入到

SQLIte 中的大多数字段都是文本字段

有什么方法可以避免它们链接为备注字段?

所以,大多数字段都是字母数字,我将它们全部作为文本,因为它们主要作为我要链接的 ID 字段,它们都是直接从 Salesforce 中提取的 CSV,下面是最小的,这些都是通常作为文本字段导入访问,在 SQLite 中它们作为文本字段导入,但从 SQLite 链接到访问,它们作为备忘录出现

样本数据是

"Id","CreatedById","CreatedDate","End_Date__c","Future_Sale_Cycle__c","IsDeleted","LastModifiedById","LastModifiedDate","LastReferencedDate","LastViewedDate","Name","OwnerId","Start_Date__c","SystemModstamp"
"a4N900000004PXrEAM","005900000041XdPAAU","2015-05-29T06:20:07.000Z","2016-02-13","a4N6F000000L34HUAS","false","00590000003cQMIAA2","2016-02-12T00:22:23.000Z","2016-02-14T23:02:02.000Z","2016-02-14T23:02:02.000Z","YPSEL2-36","00590000003cQMIAA2","2015-02-23","2016-04-22T11:07:45.000Z"

我加入的文本字段是 9、12、15 或 18 位字母数字,总是,它们总是 ID 字段,字母和数字的混合

【问题讨论】:

  • 您的 SQLite 字段的文本大小是多少?如果 > 255,它们将被解释为备忘录。 // 加入文本字段(而不是数字)会引起我的警觉,但如果必须,这些文本字段应该是 small
  • 所以,大多数字段都是字母数字的,我把它们全部作为文本,因为它们主要作为我要链接的 ID 字段,它们都是直接从 Salesforce 中提取的 CSV,下面是最小的,这些通常都会作为文本字段导入访问,在 SQLite 中它们作为文本字段导入,但是从 SQLite 链接到访问,它们作为备忘录出现示例数据是 CreatedById,CreatedDate,End_Date__c 005900000041XdPAAU,2015-05-29T06:20 :07.000Z,13/02/2016
  • 请添加与该示例数据匹配的 SQLite 表定义。该表的 MS Access 表定义也会有所帮助。然后我可以看到对应的列定义是什么。
  • @RyanVincent 写的——这也是我要问的。 :) 问题不在于字段中实际存储了多少数据,而在于定义了多大。
  • 请将您的解决方案作为答案发布,以便对我们有所帮助。说真的,我不知道你是怎么做到的,我真的很想知道。或者至少解释一下wasn't setting the text size, 的真正含义。

标签: sqlite ms-access-2010


【解决方案1】:

我有一个 MS-Access 2010 数据库与链接 SQL 表的组合 - 并体验到与您相同的效果。

我能够绕过它的唯一方法是为我想要加入的每个表创建查询。对于每个固定长度的文本字段,我使用Left$ 函数创建一个新字段。

然后,不要直接加入您的 SQLITE 表,而是使用这些查询将链接字段与您的常规 Access 表连接起来。

因此,对于上面的示例,您可以将这些字段添加到您的查询中

LinkID: Left$([ID], 18)
LinkCreatedByID: Left$([CreatedById], 18)
LinkOwnerId: Left$([OwnerId], 18)
LinkName: Left$([Name], 9)

希望有帮助

【讨论】:

    【解决方案2】:

    这有点令人困惑。

    根据Whats the best SQLite data type for a long string,SQLite 只有一种文本数据类型(TEXT),没有长度限制。

    但是当我在一个新的 SQLite 数据库中创建一个表时

    sqlite> create table t1 (id integer primary key, txt varchar(20));
    

    并通过ODBC 将该表链接到Access,txt 列的数据类型为Text(20)。我可以加入该列。
    另一方面,TEXT 列链接为 Memo

    所以:由于您自己创建 SQLite 数据库,我建议将文本字段创建为 varchar(255) 或更小。


    但请注意:在我的示例表中,我可以愉快地插入大于 20 个字符的字符串:

    sqlite> insert into t1 values (7, 'dings');
    sqlite> insert into t1 values (8, 'dingsaaaaabbbbbccccc');
    sqlite> insert into t1 values (9, 'dingsaaaaabbbbbcccccddddd');
    sqlite> select * from t1;
    7|dings
    8|dingsaaaaabbbbbccccc
    9|dingsaaaaabbbbbcccccddddd
    

    但在 Access 中我只得到 20 个字符:

    id  txt
    7   dings
    8   dingsaaaaabbbbbccccc
    9   dingsaaaaabbbbbccccc
    

    因此我推荐varchar(255),即使你的字符串会小很多。

    【讨论】:

      猜你喜欢
      • 2013-11-02
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 2011-01-31
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多