powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Редактирование данных с помощью TADOQuery
9 сообщений из 9, страница 1 из 1
Редактирование данных с помощью TADOQuery
    #32277498
acol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могли бы вы поделиться своими соображениями по поводу эффективного решения проблемы редактирования данных.

Получив данные с помощью TADOQuery

q.SQL.Text := 'select * from table1 where field1 = ''bla-bla-bla'''

Имею большое желание изменить неключевые поля некоторых записей.

q.Edit;
q['fieldn'] := 'bla';
q.Post;

Редактирование возможно только при

q.CursorLocation := clUseServer;

Но, перенос курсора на сервер, как мне кажется, замедляет работу процедуры.

Подскажите эффективные пути решения проблемы (редактирование данных).



При q.CursorLocation := clUseClient; получаю ошибку OLEDB "Недостаточные или неполные сведения о ключевом поле ..."

Как проинформировать TADOQuery о ключевых полях?
В .NET есть понятие ModifySQL - шаблон запроса с помощью которого производятся изменения. Есть ли что-то подобное для TADOQuery?
...
Рейтинг: 0 / 0
Редактирование данных с помощью TADOQuery
    #32277529
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что за база у Вас? Поведение ADO сильно различается для разных форматов. Например, делать clUseServer на MS SQL абсолютно бесполезно. Что бы мы не писали в настройках, все равно будет clUseClient и ctStaic.

Применительно к MS SQL могу сказать, что такое сообщение может выскакивать, когда в запросе используется несколько таблиц.

Что бы все делалось, как мне хочется, а не как ADO решило, я ставлю в BeforPost CancelUpdates и выполняю запрос, который выполняет требуемые действия. Разумеется, потом делается ReQuery и другие необходимые вещи.
...
Рейтинг: 0 / 0
Редактирование данных с помощью TADOQuery
    #32277618
acol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ.
База распределенная. Частично MSSQL, частично Access.

Интересно, что ошибка выскочила именно при работе с MSSQL, при работе с одной единственной таблицей. Интересно, что вылечилась проблема именно указанием q.CursorLocation := clUseServer;

Что скажете?
...
Рейтинг: 0 / 0
Редактирование данных с помощью TADOQuery
    #32277728
grigorii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что же ты делаеш враг народа
ктож так записи меняет в MSSQL

update
table1
set
fieldn = 'bla'
where
ID = id

техт запроса который надо запустить
для смены значения поля fieldn у записи
где поле ID равен id
...
Рейтинг: 0 / 0
Редактирование данных с помощью TADOQuery
    #32278052
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я жутко возмущен!!!!!!!!!

grigorii абсолютно прав.
Для чего же тогда SQL придумали? Чтобы использовать только select?
Нельзя полностью полагаться на Дельфю и думать, что она сама все разрулит!!!
...
Рейтинг: 0 / 0
Редактирование данных с помощью TADOQuery
    #32278260
acol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ого. Уличили чуть ли не в сатанизме :)

А как же использование готовых компонентов - краеугольный камень современных методологий разработки ПО?

Товарищ, grigorii, а почему не имеет права на жизнь q.Edit; + q.Post? Код упрощается в два-три раза, плюс потенциальная возможность кеширования изменений и прочие вкусности от TDataSet.

Другое дело, что у любого компонента есть пределы приминимости, в случае с TADOQuery, как мне кажется, не совсем очевидные. Поэтому и обратился с вопросом к общественности.
...
Рейтинг: 0 / 0
Редактирование данных с помощью TADOQuery
    #32278286
xamp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость

что же ты делаеш враг народа
ктож так записи меняет в MSSQL

update
table1
set
fieldn = 'bla'
where
ID = id

техт запроса который надо запустить
для смены значения поля fieldn у записи
где поле ID равен id


чудак, ты что-то сложнее телефонного справочника писал в своей жизни? :-D
Или ты серьйозно предполагаешь, что человек занимающийся распределённой БД, да ещё существующей на двух платформах может не знать как апдейтнуть запись при помощи SQL?

Это конечно очень пальцато - фигачить все правки в БД путём ручного построения sql-запросов, но зачем тогда куча толковых ребят писали все эти компоненты доступа к базам данных? Уж не для того ли, чтобы вы, уважаемые, ими пользовались, а не строчили по всякому поводу отдельную командочку на сервер?

В задачах, где требуется многократный find по датасету и апдейт некоторых записей использовать компонент представляется очень удобным и, подозреваю, работать это будет быстрее, чем пары SELECT ...; UPDATE ...;
...
Рейтинг: 0 / 0
Редактирование данных с помощью TADOQuery
    #32278426
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 acol:
По моему здесь . Update Criteria может решить задачу. А может и нет - если нельзя определить однозначно модифицируемые записи. Проблема - в отсутствии primary key в table1.
Если же в исходном запросе 'SELECT *...' используется join, то см. property 'Unique Table', и см. также в других местах (MSDN) recordset properties, там отдельный разговор...
...
Рейтинг: 0 / 0
Редактирование данных с помощью TADOQuery
    #32278776
acol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ссылку. Помогло. Изменил Update Criteria, подпачил тригера в соответствии с рекомендациями из статьи и смог перенести курсор на сторону клиента.

Скорость работы несколько возросла.

Похоже, что добиться приемлимой производительности от ADO можно только тонким тюнингом. Жаль, что нету хороших доков.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Редактирование данных с помощью TADOQuery
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]