Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удалить запись через TQuery? Как правильно составить SQL-запрос 
V
    Опции темы
Alca
Дата 31.8.2007, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 1
Всего: 50



Код

void __fastcall TfrmMain::btnDeleteClientClick(TObject *Sender) {
    Query1->Close();
    Query1->SQL->Clear();
    Query1->SQL->Text =
        "DELETE FROM  \
            Clients.db \
        WHERE  \
            COMPANY =:COMPANY and ADDRESS =: ADDRESS and CONTACT_PERSON =: CONTACT_PERSON and TELEPHONE =: TELEPHONE";

    Query1->ExecSQL();

    //восстановить запрос
    Query1->Close();
    Query1->SQL->Clear();
    Query1->SQL->Add("SELECT * FROM CLIENTS");
    Query1->Open();
}


Invalid use of keyword. Token: ADDRESS. Line Number: 1


--------------------
PM WWW ICQ Skype Jabber   Вверх
Anark1
Дата 31.8.2007, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 3
Всего: 11



Не понимаю зачем символ "\".


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
Alca
Дата 31.8.2007, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 1
Всего: 50



Чтоб строку можно было перенести

Код

DELETE FROM  
    Clients.db 
WHERE  
    COMPANY =:COMPANY and ADDRESS =: ADDRESS and CONTACT_PERSON =: CONTACT_PERSON and TELEPHONE =: TELEPHONE


Это сообщение отредактировал(а) Alca - 31.8.2007, 18:03


--------------------
PM WWW ICQ Skype Jabber   Вверх
Anark1
Дата 31.8.2007, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 3
Всего: 11



Clients.db - это имя таблицы ? Если да, то переименуй без точки в имени. Потому что через точку происходит обращение к полю таблицы.


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
Alca
Дата 31.8.2007, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 1
Всего: 50



QUERY1: Field 'COMPANY' is of an unknown type
Код

DELETE FROM 
    CLIENTS 
WHERE 
    COMPANY=:COMPANY and ADDRESS=:ADDRESS and CONTACT_PERSON=:CONTACT_PERSON and TELEPHONE=:TELEPHONE



--------------------
PM WWW ICQ Skype Jabber   Вверх
jonie
Дата 31.8.2007, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 4
Всего: 118



ну да.. а собсна в чем проблемы?)
Цитата

Код

...
 COMPANY=:COMPANY and ADDRESS=:ADDRESS and CONTACT_PERSON=:CONTACT_PERSON and TELEPHONE=:TELEPHONE

вот выделенное это че SQL новый такой чтоли?....
может стоит подставить переменные в запрос (точнее их значения) типа
Код

delete from tab WHERE company='company1' and address='adress1';

хотя удаление компании по таким условиям кажется мне кощюнством (этож оптимизации НИКАКОЙ не получится....)
есть же наверняка в табличке ID какой 8)...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Alca
Дата 31.8.2007, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 1
Всего: 50



Мне надо удалить "активную" запись в DBGrid через TQuery... Я без руля как составить запрос  smile 

Это сообщение отредактировал(а) Alca - 31.8.2007, 23:24


--------------------
PM WWW ICQ Skype Jabber   Вверх
Anark1
Дата 1.9.2007, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 3
Всего: 11



С этого и надо было начинать. Если среди COMPANY, ADDRESS, CONTACT_PERSON, TELEPHONE есть уникальные поля, то все становится проще, иначе, например, так :
Код

AnsiString cmpny, addrs, contct, telph, SQL_str;
...
cmpny = My_Query->FieldByName("COMPANY")->AsString;
addrs = My_Query->FieldByName("ADRESS")->AsString;
contct = My_Query->FieldByName("CONTACT_PERSON")->AsString;
telph = My_Query->FieldByName("TELEPHONE")->AsString;
SQL_str = " DELETE FROM CLIENTS WHERE (COMPANY = '";
SQL_str = SQL_str + cmpny;
SQL_str = SQL_str + "') AND (ADDRESS = '";
SQL_str = SQL_str + addrs;
SQL_str = SQL_str + "') AND (CONTACT_PERSON= '";
SQL_str = SQL_str + contct;
SQL_str = SQL_str + "') AND (TELEPHONE = '";
SQL_str = SQL_str + telph;
SQL_str = SQL_str + "')"
My_Query->SQL->Clear();
My_Query->SQL->Add(SQL_str);
My_Query->ExecSQL();


Можно гораздо проще, но это вроде бы самый наглядный вариант.

Это сообщение отредактировал(а) Anark1 - 1.9.2007, 11:28


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
Anark1
Дата 1.9.2007, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 3
Всего: 11



Если есть уникальное поле ID,  то

Код

AnsiString id_str,SQL_str;
...
id_str = My_Query->FieldByName("ID")->AsInteger;
SQL_str = "DELETE FROM CLIENTS WHERE (ID = ";
SQL_str = SQL_str + id_str;
SQL_str = SQL_str + ")";
My_Query->Add(SQL_str);
My_Query->ExecSQL();


Это сообщение отредактировал(а) Anark1 - 1.9.2007, 11:54


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
Alca
Дата 1.9.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 1
Всего: 50



Спасибо, помог!


--------------------
PM WWW ICQ Skype Jabber   Вверх
HappyLife
Дата 18.9.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: нет
Всего: 8



Кхм, а разве нет метода Delete?

TQuery->Delete(); Удаляет текущую запись.
PM MAIL   Вверх
Alca
Дата 2.4.2009, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 1
Всего: 50



дел

Это сообщение отредактировал(а) Alca - 2.4.2009, 20:40


--------------------
PM WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0649 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.