Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.52 MB
Время: 0.033 c
2-1171715425
Hadroran
2007-02-17 15:30
2007.03.11
Refresh


2-1171722811
Andrey-406
2007-02-17 17:33
2007.03.11
Сохранение-загрузка свойств формы


6-1159869937
mr.il
2006-10-03 14:05
2007.03.11
Отправить xml-rpc запрос сервису


2-1171980717
db_noob
2007-02-20 17:11
2007.03.11
Недопустимая строка шаблона


2-1171982524
Sapos
2007-02-20 17:42
2007.03.11
DBEdit




   Наверх