Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обновление записей в БД 
:(
    Опции темы
Zigmyndshtein
Дата 3.6.2008, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



подскажите плиз правильный синтаксис функции UPDATE для локальной БД
нужно обновить F1, если A1 это ключивое поле
можно ли записать такое выражение:

query1->close();
query1->sql->clear();
query1->sql->Add("update <table> set Num2=(Edit2->Text),Num3=(Edit3->Text) where Num1=(Edit1->Text);");
query1->ExecSQL();
PM MAIL   Вверх
Fazil6
Дата 3.6.2008, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Zigmyndshtein @  3.6.2008,  16:43 Найти цитируемый пост)
можно ли записать такое выражение

нет
PM MAIL   Вверх
Dmi3ev
Дата 3.6.2008, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 16
Всего: 41



с добавлением разобрались, здесь почти тоже самое))):
Код

Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("UPDATE TB SET F1='"+Edit1->Text+"', F2='"+Edit2->Text+"' WHERE F2='"+Edit3->Text+"'");
Query1->ExecSQL();

типы полей:
F1-A
F2-A


--------------------

PM MAIL   Вверх
Vyacheslav
Дата 3.6.2008, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Ну как Вы не любите пользоваться  форматированием и макросами  smile
Код

const String UpdateFormat = "UPDATE %s SET F2='%s', F3='%s' WHERE F1= '%s'"

//.....
Query1->SQL->Text = Format(UpdateFormat , ARRAYOFCONST(String("MyTable"), Edit2->Text, Edit3->Text, Edit1->Text));


К тому же можно использовать параметризированный запрос
Код

Query1->SQL->Clear();

Query1->SQL->Text ="UPDATE MyTable SET F2= :param1, F3= :param2 WHERE F1= :param3";

Query1->Params->Items[0]->AsString =  Edit2->Text;
Query1->Params->Items[1]->AsString = Edit3->Text;
Query1->Params->Items[2]->AsInteger = Edit1->Text;
Query1->ExecSQL();



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Zigmyndshtein
Дата 4.6.2008, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Vyacheslav,  а чем лучше с параметрами, помоему только возни больше, а без параметров на прямую, если конечно ничего не нужно изменять
ну а вообще спасибо за примеры кода.
Dmi3ev, а Edit-ты которые обновляются не нужно брать в скобки?
PM MAIL   Вверх
Данкинг
Дата 4.6.2008, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Если без параметров, то могут возникнуть проблемы в данных с кавычками.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Vyacheslav
Дата 4.6.2008, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Цитата(Zigmyndshtein @  4.6.2008,  00:37 Найти цитируемый пост)
Vyacheslav,  а чем лучше с параметрами, помоему только возни больше, а без параметров на прямую, если конечно ничего не нужно изменять
ну а вообще спасибо за примеры кода.


А параметры разве не меняются?
Преимущества параметризированных запросов :
1. Легко читаемость кода запроса.
Сравните 
Код

"UPDATE MyTable SET F2= :param1, F3= :param2 WHERE F1= :param3";

и
Код

"UPDATE TB SET F1='"+Edit1->Text+"', F2='"+Edit2->Text+"' WHERE F2='"+Edit3->Text+"'"

Это еще повезло, что запрос маленький: апдейтятся всего два параметра. А если 10?
2. Производительность. Если для TQuery один раз задать параметризированный запрос, а потом при перед каждым выполнением только менять параметры, то операция подготовки его выполнения (Prepare) для него выполниться только один раз. Если же  задавть запрос каждый раз, вшивая в него параметры, то операция подготовки будет выполняться каждый раз
3. Не нужно задумываться на проблемой форматирования. У Ваc в примере только строки. А если бы были бы другие типы( double, int, DataTime)? 
Код

Query1->Params->Items[0]->AsDateTime = Now();
Query1->Params->Items[1]->AsInteger=  10;

 


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Dmi3ev
Дата 4.6.2008, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 16
Всего: 41



Вообще, я согласен, что параметры более правильный способ, просто показал такой (более понятный, как мне кажется)
Цитата


3. Не нужно задумываться на проблемой форматирования. У Ваc в примере только строки. А если бы были бы другие типы( double, int, DataTime)?

если делать так, то тоже особо думать не надо, все достаточно просто smile 


--------------------

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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