Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удаление записи из выборки (из query) [D3, D5, dBase, FoxPro]


Fishka ©   (2002-12-25 11:17:00) 

В DBCRTLGrid-e отображается выборка записей (query) из Table. Как удалить по кнопке запись из query? Из Table запись можно удалить, а при удалении из query выдается сообщение, что таблица только для чтения (Query.RequestLive:=True;).
Как удалить из QUERY?


ЮЮ   (2002-12-27 07:07:00) [1]

>Fishka (25.12.02 17:02)
предварительным позиционированием на нее и Query2.delete из выборки и TQuery + ExecSQL из таблицы, из которой выборка.
Все удаляется, но на экране не обновляется.

И не удалится, без переоткрытия. Для этого нужен компонент TUpdateSQL, а не просто TQuery c запросами обновления :-)


petr_v_a   (2002-12-26 18:42:00) [2]

Update Failed - значит, RowsAffected соотв. UpdateQuery не равно единице

> Lady D © (25.12.02 16:58)
Уж если Вам не лень отвечать на вопрос, писанину надо проверять внимательно


Fishka   (2002-12-25 17:02:00) [3]

предварительным позиционированием на нее и Query2.delete из выборки и TQuery + ExecSQL из таблицы, из которой выборка.
Все удаляется, но на экране не обновляется.


Lady D   (2002-12-25 16:58:00) [4]

Тьфу.
Мой вариант верен, и он давно работает. А вот Вашу писанину мне некогда проверять достаточно внимательно и я ее просто копирую. Поэтому и получаются такие ляпы.
Вам нужно уже решить как будет удаляться запись: либо предварительным позиционированием на нее и Query2.delete, либо в отдельном TQuery + ExecSQL и Query2.Refresh.


Fishka   (2002-12-25 16:36:00) [5]

Как это - Query2.FieldByName("pole1").AsString, ведь Query2 д.б. закрыто перед Clear, но тогда пропадет значение. А нужно удалить запись со значением Query2.FieldByName("pole1").AsString.
Что-то невнятно получилось.........
А в Query2 совсем другой запрос, результаты которого мы видим в DBCTRLGrid.
Так что Ваш вариант неверен.


Lady D   (2002-12-25 16:22:00) [6]

Для такого случая:

Query2.SQL.Clear;
Query2.SQL.Add("delete from "aa.dbf"");
Query2.SQL.Add("where pole1="+Query2.FieldByName("pole1").AsString);
Query2.ExecSQL;


Fishka   (2002-12-25 16:11:00) [7]

Query2.RequestLive:=False;
Query2.CachedUpdate:=true;
Query2.UpdateObject:=Upd_Q;
Upd_Q.DataSet:=Query2;
Upd_Q.DeleteSQL.Clear;
Upd_Q.DeleteSQL.Add("delete from "aa.dbf"");
Upd_Q.DeleteSQL.Add("where pole1="+Query2.FieldByName("pole1").AsString);
Upd_Q.ExecSQL(ukDelete);
Query2.ApplyUpdates;

Больше ничего в программе нет. Что не так?


mrcat   (2002-12-25 15:56:00) [8]

Код показывай


Fishka   (2002-12-25 14:12:00) [9]

mrcat ©
Query.RequestLive:=False;
Query.CachedUpdate:=true;
На форме ничего не обновляется.

Lady D ©
Query.CachedUpdates := true;
Query.ApplyUpdates;
На форме ничего не обновляется.

Что еще придумать? Где у меня ошибка?


Lady D   (2002-12-25 13:34:00) [10]

CachedUpdates := false;
или
CachedUpdates := true; ... Query.ApplyUpdates;


mrcat   (2002-12-25 13:33:00) [11]

в false, CachedUpdate = true


mrcat   (2002-12-25 13:29:00) [12]

Fishka
Если все было сделано правильно - удаляется и обновляется без Refresh"а
В TQuery RequestLive = true? Его надо выставить


Fishka   (2002-12-25 12:44:00) [13]

mrcat ©
Спасибо. Вроде удаляется, только на экране ничего не обновляется.
Если поставить Query.AutoRefresh:=True;, то вообще ругается при выполнении, а Refresh не помогает.
Как правильно обновить на экране Query после удаления?
(Аппетит приходит во время еды - к сожалению...........)


mrcat   (2002-12-25 12:04:00) [14]

опечатка: Связываешь "TUpdateSQL" с файлом базы читать "TQuery"


mrcat   (2002-12-25 12:03:00) [15]

1. Связываешь TUpdateSQL с файлом базы
2. Generate SQL в TUpdateSQL
3. TQuery.UpdateObject присваиваешь TUpdateSQL

После чего: удаление, добавление, редактирование как и везде.


Fishka   (2002-12-25 11:48:00) [16]

Спасибо. Пишу следующее:

Upd_Q : TUpdateSQL

Upd_Q.DataSet:=Query2;
Upd_Q.DeleteSQL.Clear;
Upd_Q.DeleteSQL.Add("delete from "aa.dbf" where pole1=5");
Upd_Q.ExecSQL(ukDelete);

Ошибка при выполнении: Update failed.
Подскажите, где ошибки?


Lady D   (2002-12-25 11:21:00) [17]

TQuery + TUpdateSQL


Наверх

Титульная страница Поиск, карта сайта Написать письмо