2013-09-23 2 views
0

Я пытаюсь вставить некоторый текст в базу данных sqlite.Как вставить строку в sQlite.sdb (FireDac)?

Я использую подключение FireDac и Query FireDac (FDQuery1) для подключения к базе данных sqlite. Вот код.

FDQuery1.SQL.Text := 'select * from Invoice where Name = :Name'; 
FDQuery1.ParamByName('Name').AsString := '123'; 
FDQuery1.Open; 
LinkListControlToField1.BindLink.FillList 

Похоже, что в базу данных добавлена ​​новая запись, но все поля равны нулю. В чем может быть проблема?

Теперь я использую

NEW_NAME:='dfddf'; 

    SQL :='INSERT INTO INVOICE (Name) VALUES (:NEW_NAME)'; 
    fdquery1.Close; 
    fdquery1.SQL.Text:= SQL; 
    FdQuery1.Open(); 
    FDQuery1.Insert; 
    //Fdquery1.ParamByName('New_Name').AsString := NEW_NAME; 
    //fdquery1.SQL.Text:='INSERT INTO INVOICE (Name) VALUES (:NEW_NAME)'; 
    fdquery1.FieldByName('Name').AsString := quotedstr(NEW_NAME); 
    //fdquery1.ExecSQL(); 
    fdquery1.Post; 

Я получаю eerror сообщение. FireDac, Phys, Sqlite - 308 Невозможно открыть/определить команду, которая не возвращает результирующие наборы. Подсказка использовать Execute? ExecSql metnod для команд без выбора.

Как вы можете видеть из прокомментированного кода, я пытаюсь выполнить ExecSql, но такую ​​же ошибку.

+3

'Выбрать' заявления ... выберите данные из базы данных. Они не вставляют * данные. –

+0

Посмотрите здесь, по-разному: http://stackoverflow.com/questions/18822687/best-way-to-insert-data-using-dephi-in-sql-server-2008 – bummi

+0

Код должен выглядеть так: это: 1. INSERT INTO .... 2. Post - совершить транзакцию. – Arkady

ответ

3

Хотя SELECT, операторы SQL не может вставить данные в таблицу, записи могут быть вставлены/добавляются через TDataset потомков, которые связаны к таблице через оператор SELECT sql.

Например:

FDQuery1.SQL.Text := 'select * from Invoice'; 
FDQuery1.Open; 

NEW_NAME:='dfddf'; 
FDQuery1.Append; // or FDQuery1.Insert; 
FDQuery1.FieldByName('Name').AsString := NEW_NAME; 
// set other column values as needed 
FDQuery1.Post; 

Если вы предпочитаете использовать INSERT:

FDQuery1.SQL.Text := 'INSERT INTO INVOICE (Name) VALUES (:NEW_NAME)'; 

NEW_NAME := 'dfddf'; 
FDQuery1.ParamByName('NEW_NAME').AsString := NEW_NAME; 
// you will have to define parameters for each column 
FDQuery1.ExecSQL; 
0

Заменить FDQuery1.Open на FDQuery1.ExecSQL;

Но вы Постулаты «Select * ...» Не Вставляйте любые записи в базе данных ...