Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Вниз

Помогите чайнику немытому связать два датасета, пожалуйста! 


ZDN   (2002-03-15 09:59) [0]

Уважаемые ГУРУ! Помогите чайнику немытому связать два датасета, пожалуйста!

Проблема такая. Есть две таблицы в БД Interbase Client и Cars.
Структура БД такая:

CREATE DATABASE "C:\database\Db.gdb" PAGE_SIZE 4096
DEFAULT CHARACTER SET WIN1251;

/* Table: CARS, Owner: SYSDBA */
CREATE TABLE CARS (IDCARS INTEGER NOT NULL,
IDCLIENT INTEGER NOT NULL,
CAR VARCHAR(20) CHARACTER SET WIN1251,
PRIMARY KEY (IDCARS));

/* Table: CLIENT, Owner: SYSDBA */
CREATE TABLE CLIENT (IDCLIENT INTEGER NOT NULL,
NAME VARCHAR(10) CHARACTER SET WIN1251,
PRIMARY KEY (IDCLIENT));

ALTER TABLE CARS ADD CONSTRAINT FK_CARS FOREIGN KEY (IDCLIENT) REFERENCES
CLIENT(IDCLIENT) ON UPDATE CASCADE ON DELETE CASCADE;

CREATE GENERATOR GEN_CLIENT_ID;
CREATE GENERATOR GEN_CARS_ID;

SET TERM ^ ;

/* Triggers only will work for SQL triggers */
CREATE TRIGGER CLIENT_BI_BI FOR CLIENT
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.IDCLIENT IS NULL) THEN
NEW.IDCLIENT = GEN_ID(GEN_CLIENT_ID,1);
END
^
CREATE TRIGGER CARS_BI_BI FOR CARS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.IDCARS IS NULL) THEN
NEW.IDCARS = GEN_ID(GEN_CARS_ID,1);
END
^
COMMIT WORK ^
SET TERM ; ^


Создал 2 IBDataSet"а: ClientDataSet и CarsDataSet, написал для них все
запросы InsertSQL, DeleteSQL и т.п.
Включил кэширование. Для навигации по записям использую DBNavigator.
В результате все работает хорошо, но при выборе записи в главной
ClientDataSet в подчиненной
CarsDataSet не отображаются соответствующие ей записи.
Как решить эту проблему?



Alexandr   (2002-03-15 10:04) [1]

дык, а с чего бы они отображались?

Запросы в clientDataset и в CarsDataset приведи



DPetrovich   (2002-03-15 10:13) [2]

в свойстве DataSource для CarsDataSet необходимо выбрать тот DataSource который привязвн к ClientDataSet. Я так думаю.



Alexandr   (2002-03-15 10:16) [3]

ага, вот только запрос для CarsdataSet надо сделать соответствующим



data   (2002-03-15 10:23) [4]

А что, если попробовать так:
Пусть запрос QClient: select * from client. Пусть есть DataSource DSClient, которому соответствует DataSet QClient.
Запрос QCars: select * from cars where idclient=:idclient
Тогда если у запроса QCars в свойстве dataSource поставить DSClient, то при QClient.Open; QCars.Open в QCars должны отобразиться соответствующие записи.
Важно только, чтоб в QCars имя параметра соответствовало имени поля в QClient.



DPetrovich   (2002-03-15 11:01) [5]

to data: полностью солидарен!



ZDN   (2002-03-15 12:36) [6]

2 Alexandr
SelectSQL: select * from client - для ClientDataSet
InsertSQL: Insert Into client (Client) values (:Client)

SelectSQL: select * from cars - для CarsDataSet
InsertSQL: Insert Into Cars (Name) values (:Name)
При вставке в Cars /button "+" на DBNavigator/срабатывает Дельфовая процедура, в которой запрашивается уникальное значение
IDCars с сервера, а в поле IDClient пишется значение IDClient из ClientDataSet



Alexandr   (2002-03-15 12:48) [7]

вот и исправь SelectSQL у CarsDataSet как тебе data советует.



ZDN   (2002-03-15 12:53) [8]

Спасибо всем, в выходные попробую




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.021 c
3-22573           kolonist              2002-03-17 12:03  2002.04.08  
Как совладать с Index out of date или Index read only?


14-22843          PEC                   2002-02-25 12:47  2002.04.08  
Delphix !


4-22875           Sava                  2002-02-06 14:39  2002.04.08  
WM_NCHITTEST и его сообщения?


3-22576           Zloy                  2002-03-18 07:03  2002.04.08  
Приветствую!!! Подскажите плиз, как сделать так чтобы таблица после каждого заполнения или редактирования какого-то поля 100% сохраналась


1-22662           ruslan_as             2002-03-28 11:19  2002.04.08  
просуммировать ClientDataSet