Форум: "Базы";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
ВнизРедактирование найденных данных. Найти похожие ветки
← →
KostR (2005-11-13 09:55) [0]Здравствуйте. Вопрос такого плана. В этом примере я работаю с базой данных (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-13 11:07) [1]А как насчет поиска по ключевому полю в исходной таблице. Там - то можно все править!
← →
Anatoly Podgoretsky © (2005-11-13 12:20) [2]Не редактируй в гриде
← →
ЮЮ © (2005-11-14 04:25) [3]Всё дело в ORDER BY data
Для редактирования такого запроса в BDE нужно либо иметь индекс по этому полю, либо использовать TUpdateSQL для данного TQuery, тогда TQuery станет редактируемым.
← →
Anatoly Podgoretsky © (2005-11-14 08:53) [4]ЮЮ © (14.11.05 04:25) [3]
Всё дело в ORDER BY data
Не совсем, все дело в отсутствии индекса по условию указаному в ORDER BY
← →
ЮЮ © (2005-11-14 09:12) [5]Anatoly Podgoretsky © (14.11.05 08:53) [4]
все дело в отсутствии индекса по условию указаному в ORDER BY
Не совсем, т.к. подключение и настройка TUpdateSQL сделает набор редактируемым, даже при отсутствии такого индекса
← →
KostR © (2005-11-15 19:39) [6]Извените, но что это за индекс по условию указаному в ORDER BY?
Что такое TUpdateSQL?
← →
Anatoly Podgoretsky © (2005-11-15 19:49) [7]ЮЮ © (14.11.05 09:12) [5]
TUpdateSQL конечно сделает возможность редактирования, но я говорю про редактируемый набор. А эта надстройка редактирует набор другим запросом и обновляет его.
← →
ЮЮ © (2005-11-16 04:07) [8]>Anatoly Podgoretsky © (15.11.05 19:49) [7]
>А эта надстройка редактирует набор другим запросом и обновляет его.
Всё равно не переспоришь :) Тем более с такими ляпами :)
TUpdateSQL не "редактирует набор другим запросом и обновляет его", а снимает ответственность с БДЕ и перекладывает её на TUpdateSQL по генерации инструкций для изменения таблицы БД, делая набор данных редактируемым, независимо от того, правильные ли там инструкции и действительно ли они вносят изменения в БД.
← →
Anatoly Podgoretsky © (2005-11-16 08:33) [9]Не так, там пишется запрос на обновление, а компонент обращается к этому запросу. Тоже по Delete/Insert основной запрос, про который я говорю, как был не редактируемый, так и остался.
← →
ЮЮ © (2005-11-16 08:54) [10]Так вот и низвергаются авторитеты :(
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, причем они могут делать даже совсем не то, что было сделано в наборе данных
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.013 c