Неизвестная ошибка в пакете sqldf

Что означает эта ошибка?

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)
            )")

регион кода. Что означает эта ошибка? Это какая-то конкретная ошибка формата? Или я пропустил какой-то фрагмент, который нужно было упомянуть перед выполнением. Или задействован какой-то другой пакет. Пожалуйста, помогите.


person rahul yadav    schedule 02.07.2018    source источник
comment
выдает ошибку Ошибка в result_create(conn@ptr, инструкция) : рядом ): синтаксическая ошибка   -  person rahul yadav    schedule 02.07.2018
comment
Но почему внешний ключ выдает ошибку? Здесь не применимо? Что, если я захочу использовать соединения или другие запросы позже? @СатЗ   -  person rahul yadav    schedule 02.07.2018
comment
Этот код использует только функции из пакета RSQLite, ничего из самого sqldf.   -  person G. Grothendieck    schedule 02.07.2018


Ответы (2)


В соответствии с @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")
```
person mrigank shekhar    schedule 02.07.2018
comment
Почему удаление внешнего ключа помогает решить проблему. И спасибо за колонку и ошибку ввода данных. - person rahul yadav; 02.07.2018

Метод dbSendQuery() возвращает объект "DBIResult", и вызывающая сторона обязана очистить его с помощью dbClearResult(). Для запросов, которые не возвращают набор результатов, используйте dbExecute() вместо dbSendQuery(), чтобы избежать предупреждения. (dbExecute() эквивалентен dbGetQuery() для запросов, которые не возвращают набор результатов.)

См. справку к dbBind() для вариантов использования более длинной формы dbSendQuery() + dbFetch() + dbClearResult().

person krlmlr    schedule 02.07.2018