![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Редактирование найденных данных. [D7, Paradox]
KostR © (2005-11-13 09:55:00)Здравствуйте. Вопрос такого плана. В этом примере я работаю с базой данных (list.db). Мне нужно найти все слова на букву «С» в столбце data этой таблицы. Данные отображаются в DBGrid. После нажатия на кнопку (Button1) все слова на букву «С» выводятся в DBGrid, НО Я НЕ МОГУ ИХ РЕДАКТИРОВАТЬ, такое ощущение, что доступен только просмотр. Мне же нужно произвести поиск и далее отредактировать нужные вещи. Возможно ли как-то это сделать. Вот мой пример. Спасибо.
procedure Tfmosn.Button1.Click(Sender: TObject);
begin
Query1.Close; // закрыть файл-результат предыдущего запроса
Query1.SQL.Clear; // удалить текст предыдущего запроса
// далее формируем новый запрос
Query1.SQL.Add('SELECT *');
Query1.SQL.Add('FROM ":list:list.db"');// ищем в базе list.db
Query1.SQL.Add('WHERE data like "C%"); // в столбце
//data слова на букву С
Query1.SQL.Add('ORDER BY data'); // сортируем по порядку
Query1.Open; // активизируем запрос
if Query1.RecordCount <> 0 then
DataSource1.DataSet:=Query1 // отобразить
//результат выполнения запроса
else
showmessage('Не найдено!');
end;
ЮЮ (2005-11-16 08:54:00) [1]Так вот и низвергаются авторитеты :(
function TBDEDataSet.GetCanModify: Boolean;
begin
Result := FCanModify or ForceUpdateCallback;
end;
function TBDEDataSet.ForceUpdateCallback: Boolean;
begin
Result := FCachedUpdates and (Assigned(FOnUpdateRecord) or
Assigned(FUpdateObject));
end;
Итак, если FCanModify = false, но FCachedUpdates and Assigned(FUpdateObject), то набор данных, т.е тот самый, что вернул TQuery можно редактировать, т.е те самые Delete/Insert у того самого TQuery.
И только после ApplyUpdates будут выполнены запросы, что прописаны в TUpdateSQL, причем они могут делать даже совсем не то, что было сделано в наборе данных
Anatoly Podgoretsky (2005-11-16 08:33:00) [2]Не так, там пишется запрос на обновление, а компонент обращается к этому запросу. Тоже по Delete/Insert основной запрос, про который я говорю, как был не редактируемый, так и остался.
ЮЮ (2005-11-16 04:07:00) [3]>Anatoly Podgoretsky © (15.11.05 19:49) [7]
>А эта надстройка редактирует набор другим запросом и обновляет его.
Всё равно не переспоришь :) Тем более с такими ляпами :)
TUpdateSQL не "редактирует набор другим запросом и обновляет его", а снимает ответственность с БДЕ и перекладывает её на TUpdateSQL по генерации инструкций для изменения таблицы БД, делая набор данных редактируемым, независимо от того, правильные ли там инструкции и действительно ли они вносят изменения в БД.
Anatoly Podgoretsky (2005-11-15 19:49:00) [4]ЮЮ © (14.11.05 09:12) [5]
TUpdateSQL конечно сделает возможность редактирования, но я говорю про редактируемый набор. А эта надстройка редактирует набор другим запросом и обновляет его.
KostR (2005-11-15 19:39:00) [5]Извените, но что это за индекс по условию указаному в ORDER BY?
Что такое TUpdateSQL?
ЮЮ (2005-11-14 09:12:00) [6]Anatoly Podgoretsky © (14.11.05 08:53) [4]
все дело в отсутствии индекса по условию указаному в ORDER BY
Не совсем, т.к. подключение и настройка TUpdateSQL сделает набор редактируемым, даже при отсутствии такого индекса
Anatoly Podgoretsky (2005-11-14 08:53:00) [7]ЮЮ © (14.11.05 04:25) [3]
Всё дело в ORDER BY data
Не совсем, все дело в отсутствии индекса по условию указаному в ORDER BY
ЮЮ (2005-11-14 04:25:00) [8]Всё дело в ORDER BY data
Для редактирования такого запроса в BDE нужно либо иметь индекс по этому полю, либо использовать TUpdateSQL для данного TQuery, тогда TQuery станет редактируемым.
Anatoly Podgoretsky (2005-11-13 12:20:00) [9]Не редактируй в гриде
Бобров Илья (2005-11-13 11:07:00) [10]А как насчет поиска по ключевому полю в исходной таблице. Там - то можно все править!