Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввод (редактирование) данных в ДБГриде 
:(
    Опции темы
AKN
Дата 18.4.2006, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



есть такая тема:   у меня на форме обычный DBGrid. Если я сделаю запрос к удаленному серверу через Query (обычную выборку) и отображу его в Гриде, а потом ручками поменяю значения нескольких ячеек непосредственно в DBGrid`е - как потом это все отправить на удаленный сервер, чтобы мои исправления в ДБГриде сохранились в БД?

 smile  
PM MAIL   Вверх
Savek
Дата 18.4.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



Post 
PM MAIL   Вверх
Palladin
Дата 20.4.2006, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: 1
Всего: 17



допустим тебе нужно с 5 формы отправить на сохранения в первую форму тогда вроде бы так

form1.adotable1.post;

 


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
x77
Дата 21.4.2006, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 1
Всего: 22



AKN, всё зависит от СУБД и запроса, использованного в квери. ты думаешь, почему на всех форумах по программированию БД требуется указывать, как минимум, используемую субд и используемую технологию доступа? я могу понять твой вопрос, как реализацию трёхзвенки, где удалённым сервером является remote data module, а сервер он потому, что зарегестрирован, как сервер DCOM, и обращение к нему происходит через инициализации его интерфейсов на клиенте. и тогда, чтобы "запостить" к нему данные, тебе придётся заюзать DataSetProvider, либо перегнать данные в XML, а на стороне сервера распарсить их обратно в данные, и всю вставку возьмёт на себя сервер приложений, которому вообще будет пофигу, что ты запостил в своём гриде на другом конце сети. правда, весело?

если исходить из того, что юзается "обычная" реляционная субд, и предположить, что под "обычной" Query подразумевается BDE-шная TQuery, то:

1. Как отрабатывается механизм транзакций? если они стартуются явно, то и коммит надо делать явно. 

2. Используются ли кэшируемые обновления? если да, то юзать надо ApplyUpdates. 

это надо делать "помимо" собственно вставки  данных. теперь о данных.

3. данные можно "отправить на сервер" тремя способами.

3.1. наглым изменением данных в гриде и вызовом Query1.Post. это самое простое и самое ненадёжное. никто не гарантирует, что этот Post вообще отработает. свойство TQuery.RequestLive по умолчанию находится в FALSE, а именно это свойство отвечает за то, будут ли данные в квери редактируемыми. о и после того, как его поставили в TRUE, оно всё равно не гарантирует, что изменения будут проходить, потому что дальше это зависит уже от того, как составлен запрос. Например, если там присутствуют некоторые виды join'ов, или Union, такой запрос редактировать нельзя в принципе.

т.е. до выполнения запроса взводим RequestLive в TRUE, открываем запрос, меняем данные, вызываем Post, и молимся, что запрос позволит изменить эти данные.

3.2. Используется так называемый TUpdateSql. это полуавтоматическая приблуда, которая позволяет выполнять вставки/изменения/удаления данных "независимо" от квери. она кидается на форму, по одной для каждой квери, у квери указывается UpdateObject, двойным кликом открывается UpdateSql и в нём указывается, по каким ключевым полям какие данные меняются. По большому счёту, там можно задать запросы на редактирование вообще левых таблиц, и при этом редактирование их будет происходить при вызове методов редактирования "твоего" запроса. это - оптимальный способ по соотношению надёжности к количеству требуемого кода.

т.е. для использования просто юзаются обычные методы TQuery - Insert/Edit/Delete/Post, а связанный с квери TUpdateSql сам отработает все эти методы.

3.3. как гласит старая еврейская мудрость, "хочешь сделать хорошо - сделай это сам". в серьёзных проектах отображение данных всегда отделено от модификации данных. Пусть будет квери, чего-то показывающая на экране. но кроме неё обычно пишется функция, которая выполняет произвольный запрос на произвольной базе с произвольными параметрами. На каждую квери составляются три параметрических запроса, вставляющих, изменяющих, и удаляющих данные. все они объявляются где-нибудь констатнтами. теперь, когда надо, например, вставить данные, юзеру показывают форму, где он эти данные вводит, засовывают их в массив, вызывают ту самую функцию, передают ей запрос на вставку первым параметром, и массив с данными - вторым параметром. и отслеживают выполнение функции.

---------

это если очень и очень вкратце. а вообще, такие вот скромные вопросы, типа, как вставить данные, как написать программу, - это нормальная, живая тема как минимум - для курсовой, а то и дисера. 


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
AKN
Дата 21.4.2006, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



просто хотелось бы узнать, можно ли вводить данные непосредственно в таблицу, а не в эдиты с последующим insert или update. У меня, например ситуэйшн - каждый день операторам нужно вбить выручку по более чем 300 точкам. Сейчас это организовано так:
- юзверь нажимает кнопку "Ввести выручку" - ему выкидывается форма с одним эдитом и комбобоксом (там их больше, но это не главное) в комбобоксе он выбирает точку, в эдите вводит выручку и нажимает "Провести". Сами понимаете, сколько времени это требует. 

Хотелось бы дать им просто список всех точек, напротив которого можно было бы непосредственно вводить выручку. Это дасть огромный выигрыш во времени заполнения. 

Есть мысль выкинуть им стринггрид, который они смогут заполнять, но это геморой... Можно ведь сделать проще, не так ли? 
PM MAIL   Вверх
x77
Дата 21.4.2006, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 1
Всего: 22



можно, но надо знать, как хранятся выручки и точки. дай структуру этих таблиц, плз.

смысл в том, чтобы составить запрос, который вытащит все данные одной таблицей, прикрутить к нему грид, TUpdateSql, и прописать соответствующие запросы в TUpdateSql. 


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
AKN
Дата 21.4.2006, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



Эта тема, собственно, продолжение 

http://forum.vingrad.ru/index.php?showtopic=88934

там, в принципе, все описано... 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.