【问题标题】:Unknown error in sqldf packagesqldf 包中的未知错误
【发布时间】:2018-07-02 11:33:49
【问题描述】:

这个错误是什么意思?

Closing open result set, pending rowsError in result_create(conn@ptr, statement) : near "(": syntax error

当我想运行代码时会出现这个

    ```{r}
    library(sqldf)
    first <- dbConnect(SQLite(), dbname= "DATA.sqlite")

    dbSendQuery(conn =  first,
                "CREATE TABLE COMPANY_MASTER
                ( 
    CompId INTEGER,
    CompName TEXT,
    Address TEXT,
    DirectorName TEXT,
    EmployeeNo INTEGER,
    PRIMARY KEY(CompName)
                )")
    dbSendQuery(conn = first, "INSERT INTO COMPANY_MASTER
                VALUES(1001,'Infosys','ABC1927','Dr.Sandeep',128)")
    dbSendQuery(conn = first, "INSERT INTO COMPANY_MASTER
                VALUES(1002,'Cognizant','ERT654','Michael',156)")
    dbSendQuery(conn = first, "INSERT INTO COMPANY_MASTER
                VALUES(1003,'Tata','PCD531','Sancheti',113)")
    *

dbSendQuery(conn =  first,
                "CREATE TABLE INCOME
                ( 
    CompName TEXT,
    In(2016) INTEGER,
    In(2017) INTEGER,
    In(2018) INTEGER,
    FOREIGN KEY(CompName)

*
                )")
    dbSendQuery(conn = first, "INSERT INTO INCOME
                VALUES('518361','528464','538646')")
    dbSendQuery(conn = first, "INSERT INTO INCOME
                VALUES('218434','205314','225815')")
    dbSendQuery(conn = first, "INSERT INTO INCOME
                VALUES('1038434','1184344','128434')")
    CompMAst <- dbGetQuery(conn = first, "SELECT * FROM COMPANY_MASTER")
    Income <- dbGetQuery(conn = first, "SELECT * FROM INCOME")
    ```

同时在

中给出上述错误
dbSendQuery(conn =  first,
            "CREATE TABLE INCOME
            ( 
CompName TEXT,
In(2016) INTEGER,
In(2017) INTEGER,
In(2018) INTEGER,
FOREIGN KEY(CompName)
            )")

代码区域。这个错误是什么意思?是某种特定的格式错误吗?或者我错过了一些在执行之前必须提到的块。或者是否涉及其他一些包请帮助。

【问题讨论】:

  • 在 result_create(conn@ptr, statement) 中给出错误错误:“)”附近:语法错误
  • dbSendQuery(conn = first, "CREATE TABLE INCOME ( CompName TEXT, In_2016 INTEGER, In_2017 INTEGER, In_2018 INTEGER )")
  • 但是为什么外键会报错呢?在这里不适用吗?如果我以后想使用连接或其他查询怎么办? @SatZ
  • 这段代码只使用了 RSQLite 包中的函数,没有使用 sqldf 本身的函数。

标签: r sqldf rsqlite


【解决方案1】:

根据@SatZ 和您给出四列并输入三个值的错误,您的理想代码应该是

```{r}
library(sqldf)
first <- dbConnect(SQLite(), dbname= "DATA.sqlite")

dbSendQuery(conn =  first,
            "CREATE TABLE COMPANY_MASTER
            ( 
CompId INTEGER,
CompName TEXT,
Address TEXT,
DirectorName TEXT,
EmployeeNo INTEGER,
PRIMARY KEY(CompName)
            )")
dbSendQuery(conn = first, "INSERT INTO COMPANY_MASTER
            VALUES(1001,'Infosys','ABC1927','Dr.Sandeep',128)")
dbSendQuery(conn = first, "INSERT INTO COMPANY_MASTER
            VALUES(1002,'Cognizant','ERT654','Michael',156)")
dbSendQuery(conn = first, "INSERT INTO COMPANY_MASTER
            VALUES(1003,'Tata','PCD531','Sancheti',113)")
dbSendQuery(conn =  first,
            "CREATE TABLE INCOME
            ( 
CompName TEXT,
IN_2016 TEXT,
IN_2017 TEXT,
IN_2018 TEXT)")
dbSendQuery(conn = first, "INSERT INTO INCOME
            VALUES('Infosys','5183.61','5284.64','5386.46')")
dbSendQuery(conn = first, "INSERT INTO INCOME
            VALUES('Cognizant','2184.34','2053.14','2258.15')")
dbSendQuery(conn = first, "INSERT INTO INCOME
            VALUES('Tata','10384.34','11843.44','1284.34')")
CompMAst <- dbGetQuery(conn = first, "SELECT * FROM COMPANY_MASTER")
Income <- dbGetQuery(conn = first, "SELECT * FROM INCOME")
```

【讨论】:

  • 为什么删除外键有助于解决问题。并感谢列和数据输入错误。
【解决方案2】:

dbSendQuery() 方法返回一个"DBIResult" 对象,调用者有责任用dbClearResult() 清除它。对于不返回结果集的查询,请使用dbExecute() 而不是dbSendQuery() 以避免出现警告。 (对于不返回结果集的查询,dbExecute() 等效于 dbGetQuery()。)

请参阅dbBind() 的帮助以了解更长形式的用例dbSendQuery() + dbFetch() + dbClearResult()

【讨论】:

    猜你喜欢
    • 2018-12-08
    • 2019-01-13
    • 2017-05-05
    • 1970-01-01
    • 2017-11-22
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    相关资源
    最近更新 更多