0

我已经将 SQLite3 与我的 Am1808 处理器连接起来。我将数据存储在 SD 卡中。

它工作得很好。我插入了一个包含 38 个字段的表格。现在我想在同一个表中添加一列。所以我更改了表字段参数,并在相关文件中进行了相应的更改。我的代码成功编译,但是当我执行应用程序时,它给了我以下错误:

错误:“39 个值的 38 列”

这是我通过修改创建的表:

const char *SQL_CREATE_ABCTABLE   = "CREATE TABLE IF NOT EXISTS MilkCollection   \
                (  MilkCollectionId        INTEGER,  \
                   CollectionDate          DATE,  \
                   CollectionShift         UNSIGNED TINYINT,  \
                   MemberId                INTEGER REFERENCES Member(MemberId) ON UPDATE RESTRICT ON DELETE RESTRICT,  \
                   SocietyId               INTEGER REFERENCES Society(SocietyId) ON UPDATE RESTRICT ON DELETE RESTRICT,  \
                   SampleNo                UNSIGNED INTEGER,  \
                   MilkType                UNSIGNED TINYINT,  \
                   Qty                     FLOAT, \
                   ActualQty               FLOAT, \
                   QtyType                 UNSIGNED TINYINT,  \
                   Fat                     FLOAT, \
                   ActualFat               FLOAT, \
                   LRCLR                   FLOAT, \
                   ActualLRCLR             FLOAT, \
                   SNF                     FLOAT, \
                   ActualSNF               FLOAT, \
                   Solid                   FLOAT, \
                   ActualSolid             FLOAT, \
                   Water               FLOAT, \ // I have inserted this field   
                   FatKG                   FLOAT, \
                   ActualFatKG             FLOAT, \
                   SNFKG                   FLOAT, \
                   ActualSNFKG             FLOAT, \
                   Rate                    FLOAT, \
                   Amount                  FLOAT, \
                   ActualAmount            FLOAT, \
                   CanNumber               UNSIGNED INTEGER, \
                   MemberCodeAuto          UNSIGNED TINYINT, \
                   WeightAuto              UNSIGNED TINYINT, \
                   FatAuto                 UNSIGNED TINYINT, \
                   LRCLRAuto               UNSIGNED TINYINT, \
                   SNFAuto                 UNSIGNED TINYINT, \
                   EntryMode               UNSIGNED TINYINT, \
                   CreatedBy               INTEGER REFERENCES UserMaster(UsermasterId) ON UPDATE RESTRICT ON DELETE RESTRICT, \
                   CreatedOn               DATE, \
                   UpdatedBy               INTEGER REFERENCES UserMaster(UsermasterId) ON UPDATE RESTRICT ON DELETE RESTRICT, \
                   UpdatedOn               DATE, \
                   FlagGSM                 UNSIGNED TINYINT, \
                   FlagUSB                 UNSIGNED TINYINT, \
                   PRIMARY KEY (MilkCollectionId) )";

创建此表后,我删除了旧的数据库文件。

我仍然收到此错误。

4

3 回答 3

0

在您的INSERT命令中,您有 39 个列名,但只有 38 个NULL/?值。

于 2012-10-06T07:48:53.423 回答
0

很高兴知道您将 SQLlite 与 AM1808 处理器集成。目前我正在做同样的事情。请让我知道如何获取 SQLlite 的源代码,如何为我们的处理器和示例应用程序从 c 编译它以创建、插入表等。

于 2014-01-18T12:47:32.573 回答
0

CREATE TABLEIF NOT EXISTS

您更改了 SQL DDL 命令来创建表,但新命令从未运行,因为该表已经存在。

您需要检查架构是否正确,导出数据,删除或重命名表,使用新的正确列列表创建表,并导入旧数据(为新列提供适当的值)。

于 2013-06-03T13:58:12.123 回答