Форум: "Базы";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];
ВнизФильтрация записей 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;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.04 c