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