Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.04 c
15-1165583652
Cash
2006-12-08 16:14
2006.12.31
Про: "... как решать задачи?"


15-1165809391
Slider007
2006-12-11 06:56
2006.12.31
С днем рождения ! 9 ноября


3-1160032232
Loginov Dmitry
2006-10-05 11:10
2006.12.31
Проблема с TClientDataSet


15-1165499290
XProger
2006-12-07 16:48
2006.12.31
Opera Mini


2-1165999682
sergeyst
2006-12-13 11:48
2006.12.31
Попадание точки в заданную область





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский