Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Программирование —› Table-DataSource-Query - кто третий лишний?
Посл.ответ Сообщение


Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 05 октября 2007 12:55
· Личное сообщение · #1

Приветствую всех участников топика.

Вопрос следующий можно ли мне как-нибудь
оформить подключение к таблице так чтобы
TTable редактировал данные, а Query запросы на сортировку и фильтры?
Тоесть у меня есть :Table,DataSource,DBGrid,Query.
Или просто объясните почему Query не хочет выполнять операции типа Insert,Delete,говоря что типа read-only хотя я подключаю ему одну единственную таблицу или как его заставить думать что она едиственна???

Помогите плиз!




Ранг: 141.4 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 05 октября 2007 13:18
· Личное сообщение · #2

проверь свойство ReadOnly у TTable




Ранг: 116.6 (ветеран), 8thx
Активность: 0.050
Статус: Участник

Создано: 05 октября 2007 13:20
· Личное сообщение · #3

у TQuery есть UpdateObject (TUpdateSQL) вот как раз через него можно научить квери делать Insert, Edit и Delete.

P.S. Вообще в настоящее время писать БД, использующие BDE это зло. Смотри в сторону Firebird+FIBPlus.




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 05 октября 2007 14:13
· Личное сообщение · #4

по поводу BDE я полностью с тобой согласен,
это моя последняя программа на этих БД.
ща попробую




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 05 октября 2007 14:14
· Личное сообщение · #5

проверь свойство ReadOnly у TTable

у меня на рид-онли query ругается, с Table работа елементарна,
но нет возможности сортировать быстрыми запросами, вот.




Ранг: 116.6 (ветеран), 8thx
Активность: 0.050
Статус: Участник

Создано: 05 октября 2007 14:28
· Личное сообщение · #6

NicknamES пишет:
TTable редактировал данные, а Query запросы на сортировку и фильтры?

Вообще сортировку и фильтры можно делать и на уровне TTable. Для сортировки предварительно создай несколько индексов по нужным полям и потом устанавливай нужный индекс в самой TTable. Для фильтра опять же подойдут индексы с использованием SetRange либо Filter/OnFilterRecord+Filtered=True



Ранг: 117.1 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 05 октября 2007 14:29 · Поправил: pushick
· Личное сообщение · #7

NicknamES
TUpdateSQL?

-----
Security through obscurity is just an illusion





Ранг: 141.4 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 05 октября 2007 14:45 · Поправил: intro
· Личное сообщение · #8

Если способность TTable редактировать и удалять записи ни у кого не вызывает удивления, то TQuery требует, чтобы свойство RequestLive было установлено в True. Если при False запрос отправлялся непосредственно на сервер, то при True запрос предварительно обрабатывается локальным SQL (модуль IDSQL32.DLL). Это необходимо для того, чтобы TQuery смог сформировать запросы INSERT/UPDATE/DELETE на основании заданного SELECT. Для TTable построение таких запросов не представляет сложности, т.к. задано только имя таблицы, имена полей считаны и т.п. А существующий SQL-запрос нужно синтаксически разобрать, чтобы понять, сколько в нем используется таблиц, какие выбираются поля и из каких таблиц, и можно ли вообще сформировать запросы на вставку, обновление и удаление данных.

При переключении TQuery.RequestLive:=True; TQuery начинает вести себя как TTable - т.е. он сначала разбирает запрос, извлекает оттуда имя таблицы, и потом выбирает информацию из системных таблиц о полях таблицы, индексах и т.п. Вы можете все это увидеть в SQL Monitor.

Кроме RequestLive можно еще воспользоваться и компонентом UpdateSQL.

взято из Delphi World 6




Ранг: 116.6 (ветеран), 8thx
Активность: 0.050
Статус: Участник

Создано: 05 октября 2007 15:11
· Личное сообщение · #9

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

P.S. В любом случае скорость выполнения SQL у BDE крайне низкое. Более менее приемлимую скорость для фильтров и сортировки могут дать ТОЛЬКО TTable+индексы.



Ранг: 129.7 (ветеран), 2thx
Активность: 0.070
Статус: Участник

Создано: 05 октября 2007 16:54
· Личное сообщение · #10

dermatolog дело говорит, для фильтрации лучше всего использовать TTable, ну или опиши задачу поподробнее, мож там как-то по-другому можно сделать.




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 07 октября 2007 14:36
· Личное сообщение · #11

не. я против индексов.
поэтому хотел через SQL.
сейчас попробую RequestLive,
хотя я так пробовал когда ещё только начинал с TQuery




Ранг: 141.4 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 08 октября 2007 08:32
· Личное сообщение · #12

NicknamES, как успехи? с RequestLive := True работает?




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 09 октября 2007 00:10
· Личное сообщение · #13

пока что у меня изменения таблиц на Insert\Delete,
но как только испытаю - обязательно отпишусь.
огромное спс за помощь!




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 09 октября 2007 14:00
· Личное сообщение · #14

да, всё работает, очень рад.
ещё раз спасибо


 eXeL@B —› Программирование —› Table-DataSource-Query - кто третий лишний?
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати