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

Вниз

Фильтрация записей ADOTable   Найти похожие ветки 

 
Edd ©   (2006-12-16 19:31) [0]

Доброго времени суток!
Мастера, подскажите, ранее писал через ClientDataSet трёхзвенки - фильтрация проходила без вопросов. Сейчас пишу для MS SQL сервера доступ конечно через ADO.
фильтрация для подчиненных таблиц невозможна. возникает ошибка - "...Filter property cannot be used for detail tables..." уже читал по этому поводу какие-то форумы. Но нигде ничего конкретного не сказано как обойти эту проблему.
если надо использовать ADOQuery, то подскажите код вместе с запросом, подробно.
Спасибо!


 
sniknik ©   (2006-12-16 19:39) [1]

> если надо использовать ADOQuery
использовать надо ADOConnection, ADODataSet и ADOCommand (ну и можно RDSConnection если трехзвенку исключительно на ADO делать), остальное надо выкинуть и забыть как страшный сон, описания в книжках буде встретятся пропускать не читая.

> то подскажите код вместе с запросом, подробно.
подробнее чем в BOL не бывает, а оно у тебя под рукой, раз уж MSSQL стоит.


 
Edd ©   (2006-12-16 20:12) [2]

а я щас не трёхзвенку делаю... Поэтому компоненты юзаю ADOConnection DataSet ADOTable ADOQuery
уже соединение между клиентским приложением и сервером настроил, не хотелось бы компонеты менять..
PS а там таких проблем с фильтром не будет?
там чтоб к к серверу сконнектиться нужно ведь указать в RDSConnection
два свойства serverName и ComputerName?


 
Anatoly Podgoretsky ©   (2006-12-16 20:25) [3]

> Edd  (16.12.2006 20:12:02)  [2]

> ADOConnection DataSet ADOTable ADOQuery

Два последних зря используешь.


 
MsGuns ©   (2006-12-16 20:26) [4]

Дело не в том, что Вы "переехали" с клиентского на адошный компонент, а в том, что, очевидно, пытаетесть применить фильтр к таблице, которая связана как дочерняя с другой отношением Master-Detail .
Побороть проблему можно, избавившись от прямой связки Master-Detail, заменив ее "ручным" переоткрытием детального запроса при изменении текущей записи в Главной.


 
Edd ©   (2006-12-16 20:33) [5]


> Побороть проблему можно, избавившись от прямой связки Master-
> Detail, заменив ее "ручным" переоткрытием детального запроса
> при изменении текущей записи в Главной.

вот в том-то и дело, я не в курсе, подскажите пожалуйста как это делается поподробнее?


 
Anatoly Podgoretsky ©   (2006-12-16 20:45) [6]

> Edd  (16.12.2006 20:33:05)  [5]

Убери прямую связь, и делай ее в OnAfterScroll если речь идет о гридах.


 
MsGuns ©   (2006-12-16 20:51) [7]

Какие компоненты используете для извлечения данных с сервера и как установили "связующие" свойства ?


 
Edd ©   (2006-12-16 21:31) [8]

для связи с севрером - ADOConnection

в свойствах у ADOTable детальной таблицы указано:
IndexFiledName
MasterFields
MasterSource
и TableName

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


 
Anatoly Podgoretsky ©   (2006-12-16 21:35) [9]

> Edd  (16.12.2006 21:31:08)  [8]

Выбрось ADOTable - использование ни чем не обосновано.


 
Edd ©   (2006-12-16 21:43) [10]


> Выбрось ADOTable - использование ни чем не обосновано.

а вместо этого к таблицам чем подключаться и перемещаться по набору? надо чтобы налицо в гридах был фатк связи один ко многим...
какая альтернатива тэйблам?


 
Anatoly Podgoretsky ©   (2006-12-16 21:45) [11]

> Edd  (16.12.2006 21:43:10)  [10]

TAdoDataset


 
Edd ©   (2006-12-16 21:48) [12]

а там надо будет обрывать связь или нет?


 
Anatoly Podgoretsky ©   (2006-12-16 21:52) [13]

> Edd  (16.12.2006 21:48:12)  [12]

Дело вкуса, но на самом деле связь там делается с помощью контролируемого запроса, можешь делать его любым


 
Edd ©   (2006-12-16 21:52) [14]

никогда его не пользовал еще.. как настроить правильно? Там возникает ошибка Missing CommanText property..


 
Anatoly Podgoretsky ©   (2006-12-16 21:53) [15]

> Edd  (16.12.2006 21:52:14)  [14]

Заполнить данное свойство
Читать про SQL


 
Edd ©   (2006-12-16 22:02) [16]

понял спасибо, буду разбираться...
только удобство было с тэйблами в том что переходишь в гриде на следующую запись по главной таблице и в детальной тоже обновляется грид (показываются соответсвующие записи к главной)
а здесь надо вручную это прописывать?


 
Anatoly Podgoretsky ©   (2006-12-16 22:06) [17]

> Edd  (16.12.2006 22:02:16)  [16]

Точно также и с TAdoDataset только более гибко.


 
Edd ©   (2006-12-16 22:15) [18]

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


 
Anatoly Podgoretsky ©   (2006-12-16 22:21) [19]

> Edd  (16.12.2006 22:15:18)  [18]

А что сделал?


 
Edd ©   (2006-12-16 22:28) [20]

к одному DataSet сделал свойство CommandText:=select * from Master
а ко второму DataSet:  select * from Details
компонетам DataSource подключил соответсвующие DataSet
а в гридах указал нужные dataSource
чего не хватает для полного счастья?:)


 
sniknik ©   (2006-12-16 22:41) [21]

> чего не хватает для полного счастья?:)
параметров/а связи во втором запросе, ну и еще указания DataSource у второго дататсета указывающего на первый. (у таблиц то MasterSource указывал, а тут?)


 
Edd ©   (2006-12-16 22:51) [22]

подскажи какие параметры во втором запросе написать надо и как, а то я не силен в этом...
я окончательно запутался как свойства DataSource распределить..
значит есть у нас datasetMaster datasetDetails далее dataSourseMaster dataSourceDetails и два грида
че теперь делать (по порядку)?


 
sniknik ©   (2006-12-16 23:01) [23]

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

> че теперь делать (по порядку)?
можно взять книжку и почитать... или F1 нажать и там почитать, пример оттуда скопировать.


 
Anatoly Podgoretsky ©   (2006-12-16 23:04) [24]

> Edd  (16.12.2006 22:28:20)  [20]

Во втором не хватает части WHERE и MasterSource := DataSource1; + ADOTable2.MasterField := ...


 
Anatoly Podgoretsky ©   (2006-12-16 23:05) [25]

> Edd  (16.12.2006 22:51:22)  [22]

Заполнить их, в справке есть даже пример, ну не копировать же его сюда?


 
Edd ©   (2006-12-16 23:08) [26]

Главная таблица - три поля
gid - ключевое
group - текстовое

дочерняя
mid - ключевое
groupkod - поле по которому таблица связана с главное с полем gid связью
остальные текстовые поля просто для инфы..

как должен в таком случае корректно выглядеть запрос с параметрами?
(насколько я понимаю он должен быть во втором dataset для дочерней таблицы)


 
sniknik ©   (2006-12-16 23:13) [27]

SELECT * FROM дочерняя WHERE groupkod=:gid

у этого датасета DataSource установить указывающий на основной. это все.


 
Anatoly Podgoretsky ©   (2006-12-16 23:18) [28]

> Edd  (16.12.2006 23:08:26)  [26]

Where GID=:GID


 
Anatoly Podgoretsky ©   (2006-12-16 23:20) [29]

> Anatoly Podgoretsky  (16.12.2006 23:18:28)  [28]

Поправка, смотри код [27]


 
sniknik ©   (2006-12-16 23:22) [30]

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


 
Anatoly Podgoretsky ©   (2006-12-16 23:24) [31]

> sniknik  (16.12.2006 23:22:30)  [30]

Пускай для начала связь заставит работать.


 
Edd ©   (2006-12-17 16:20) [32]

спасибо большое! теперь всё гораздо яснее



Страницы: 1 вся ветка

Текущий архив: 2007.03.11;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.039 c
2-1171513689
Wiktor
2007-02-15 07:28
2007.03.11
Передача EXE-файла с помощью TServerSocket и TClientSocket


2-1172073211
Патрик
2007-02-21 18:53
2007.03.11
форма


2-1171884434
Jakudza
2007-02-19 14:27
2007.03.11
FireBird


2-1171473737
Washington
2007-02-14 20:22
2007.03.11
ADOQuery и INI-файлы


2-1171706953
Snakecatcher
2007-02-17 13:09
2007.03.11
Антифриз