![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как указатель строки DBGridEh SQL запроса сопоставить с базой. [D7, Paradox]
БогданБ © (2006-10-17 02:08:00)Привет всем. Подскажите пожалуйста в решении такого вопроса. Вот есть DBGridEh в котором отображаются результаты SQL запроса. Пользователь выбирает указателем нужную ему строку где необходимо произвести корректировку данных. Нужно чтоб в базе данных указатель переместился точно на такую же строку для изменения этих данных, как это зделать? Благлдарен за ответ.
ЮЮ (2006-10-19 08:41:00) [1]
> Я так понял, должно быть что-то вроде этого:
Это позиционирование в DataSete на клиенте, а не в БД.
Если после этого последует
DataModule1.TabPutivka.Edit;
... корректовка полей
DataModule1.TabPutivka.Post;
то, наверное, надо. Т.е. если показываешь один НД, а редактируешь другой. Однако после такого редактирования не будет в отображаемом наборе видно внесенных изменений. Надо будет обнавить набор/запись
БогданБ (2006-10-19 02:29:00) [2]>MsGuns © (17.10.06 11:13) [3]
Я так понял, должно быть что-то вроде этого:
DataModule1.TabPutivka.Locate('ID',DataModule1.Query15ID.AsVariant,[])
MsGuns (2006-10-17 13:56:00) [3]>Shorokhov © (17.10.06 12:24) [4]
"Иногда лучше промолчать" (с)
ANB (2006-10-17 12:45:00) [4]
> Shorokhov © (17.10.06 12:24) [4]
Вообще то TUpdateSQL как раз позволяет работать с Insert, Append, Edit в случае, если в квери сложный запрос, который по умолчанию не редактируется.
Shorokhov (2006-10-17 12:24:00) [5]А зачем вообще перемещаться на соответствующий указатель?
Навигационный метод работы с данными (Locate, Insert, Append, Edit и т.п.) не так уж хорош.
Я бы воспользовался компонентом TUpdateSQL (работать будет гораздо быстрее).
Для TQuery задаешь этот TUpdateSQL в качестве свойства UpadteObject.
А в самом TUpdateSQL задаешь свойства InsertSQL, DeleteSQL и ModifySQL.
Это обычные запросы на вставку/изменение/удаление записей с параметрами из TQuery.
MsGuns (2006-10-17 11:13:00) [6]Во-первых, если в таблице нет уникального идентификатора (еще называемого "счетчиком"), то - никак.
Во-вторых, смотря какой запрос. Если он возвращает данные из таблицы(основной), где, собственно и надо править, и запрос не содержит агрегатов, и в списке извлекаемых полей есть идентификатор, то - можно. При отсутствии любого из перечисленных условий, установление однозначногосоответствия записи НД записи таблицы БД невозможно.
Desdechado (2006-10-17 10:42:00) [7]В БД нет никаких "указателей на ту же строку". Подумай сам, как бы они работали в многопользовательской СУБД.
Когда ты работаешь с данными в гриде (фактически - в наборе данных, по подключенном к гриду через DataSource), то указатель на текущую позицию там меняется автоматически.
А изменения в БД вносятся на основании информации о первичных и уникальных ключах в том наборе данных, который ты редактируешь.
Вот об этих ключах и стоит задуматься, предварительно почитав соотв. литературу.
ЮЮ (2006-10-17 03:45:00) [8]DBGrid сделает это за тебя сам. Не парься.
В общем случае, когда пользователь исправляет запись набора данных на клиенте, в базе занных исполняется запрос
UPDATE <Таблица>
SET
<Поле1> = <НовоеЗначениеПоля1>,
...
<ПолеN> = <НовоеЗначениеПоляN>
WHERE
(<ПолеW1> = <СтароеЗначениеПоляW1>) AND ...
(<ПолеWM> = <СтароеЗначениеПоляWM>)