Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.31;
Скачать: CL | DM;

Вниз

Как указатель строки 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
2-1165751400
dasha
2006-12-10 14:50
2006.12.31
как добавить запись в таблицу


2-1165869822
AleksEraser
2006-12-11 23:43
2006.12.31
DLL


3-1161165801
Хельг
2006-10-18 14:03
2006.12.31
Connection failure на MS Sql Server 2005


15-1165502145
SkySpeed
2006-12-07 17:35
2006.12.31
HELP! ПК тупо зависает без причины, приходится перезагружать.....


15-1165376593
Slider007
2006-12-06 06:43
2006.12.31
С днем рождения ! 6 декабря