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

Вниз

как программно переключить DBEdit от 1го ист. данных к другому   Найти похожие ветки 

 
Andrey_1   (2003-08-01 10:19) [0]

В DataModule1 содержатся:
Table1 -> DataSource1;
Table2 -> DataSource2;
Table3 -> DataSource3;
На Form1:
DBGrid1,DBGrid2, DBGrid3, DBEdit1, DBEdit2, DBNavigator1
Нужно чтобы
при получении фокуса DBGrid1, DBEdit1, DBEdit2 получали данные из DataSource1;
при получении фокуса DBGrid2, DBEdit1, DBEdit2 получали данные из DataSource2;
при получении фокуса DBGrid3, DBEdit1, DBEdit2 получали данные из DataSource3;

Для этого пишу следующий код и вешаю на OnEnter

procedure TForm1.DBGrid1Enter(Sender: TObject);
begin
DBNavigator1.DataSource:=Datamodule1.DataSource1;
with DBEdit1 do
begin
DataSource:=Datamodule1.DataSource1;
DataField:="Color"; //имя поля1 таблицы1
end;
with DBEdit2 do
begin
Datasource:=DataModule1.DataSource1;
DataField:="Description" //имя поля2 таблицы1
end;
end;

procedure TForm1.DBGrid2Enter(Sender: TObject);
begin
DBNavigator1.DataSource:=Datamodule1.DataSource2;
with DBEdit1 do
begin
DataSource:=Datamodule1.DataSource2;
DataField:="Defect"; //имя поля1 таблицы2
end;
with DBEdit2 do
begin
DataSource:=Datamodule1.DataSource2;
DataField:="Description"; //имя поля2 таблицы2
end;
end;

procedure TForm1.DBGrid3Enter(Sender: TObject);
begin
DBNavigator1.DataSource:=Datamodule1.DataSource3;
with DBEdit1 do
begin
DataSource:=Datamodule1.DataSource3;
DataField:="Model"; //имя поля1 таблицы3
end;
with DBEdit2 do
begin
DataSource:=Datamodule1.DataSource3;
DataField:="Description"; //имя поля2 таблицы3
end;
end;

но при переключении между гридами выдает следующее сообщение

---------------------------
Debugger Exception Notification
---------------------------
Project ProjectExample.exe raised exception class EDatabaseError with message "DBEdit1: Field "Color" not found". Process stopped. Use Step or Run to continue.
---------------------------
OK Help


 
Zacho ©   (2003-08-01 10:22) [1]

Я тебе уже ответил мылом :-) Проверь почту.
Но могу и повторить:
with DBEdit1 do
begin
DataSource:=nil;
DataField:="Color"; //имя поля1 таблицы1
DataSource:=Datamodule1.DataSource1;
end;
и т.д. ...


 
KDS ©   (2003-08-01 11:12) [2]

Я же написал уже как... читай почту вот повторяю еще раз:

обнуляй название поля перед каждой сменой DataSource
потому что... сам подумай почему

DataField:="";
DataSource:=Datamodule1.DataSourceColor;
DataField:="Color";


 
Andrey_1   (2003-08-01 11:28) [3]

спасибо! потому и спрашиваю, что мыло не работает


 
Zacho ©   (2003-08-01 11:42) [4]

Кстати, рабочие оба варианта: и Zacho © (01.08.03 10:22) и KDS © (01.08.03 11:12)
Так что выбирай по вкусу :-)


 
Andrey_1   (2003-08-01 13:31) [5]

у меня работает
DataField:="";
DataSource:=Datamodule1.DataSourceColor;
DataField:="Color";

a код
DataSource:=nil;
DataField:="Color"; //имя поля1 таблицы1
DataSource:=Datamodule1.DataSource1;

выдает
Debugger Exception Notification
---------------------------
Project ProjectExample.exe raised exception class EDatabaseError with message "DBEdit1: Field "Color" not found". Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
но все равно спасибо огрррооомное, выручили.


 
Zacho ©   (2003-08-01 13:38) [6]


> Andrey_1 (01.08.03 13:31)

Странно.. А у меня работает. Я выслал тебе модуль, если любопытно - посмотри. Только что еще раз проверил - работает, зараза :) Правда у меня D6, но не думаю, что в этом дело.


 
MsGuns ©   (2003-08-01 13:49) [7]

>Zacho © (01.08.03 13:38)

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

with Form1.DBGrid1 do
begin
DataSource:=nil;
RebuildColumns;
DataSource:=...;
RebuildColumns;
end;







 
Zacho ©   (2003-08-01 13:54) [8]


> MsGuns © (01.08.03 13:49)

Так дело в том, что там не DBGrid, а DBEdit, у которого колонок, естественно, нет.
А для DBGrid"a - действительно ценный совет.


 
KDS ©   (2003-08-01 14:40) [9]

a код
DataSource:=nil;
DataField:="Color"; //имя поля1 таблицы1
DataSource:=Datamodule1.DataSource1;
выдает
Debugger Exception Notification


Просто подумать надо было...
Ошибка возникает потому что DataField:="Color" заполнено
но при этом DataSource:=nil;
т.е. получается поле для неопределенной таблицы вот и пишет
"DBEdit1: Field "Color" not found"
а наоборот можно: источник определить, а поле - нет!
Порядок присвоения тоже играет роль. И всего то ;-)))
у меня работает
DataField:="";
DataSource:=Datamodule1.DataSourceColor;
DataField:="Color";



 
Andrey_1   (2003-08-01 15:22) [10]

спасибо всем!
ЧЕМ МНОГО ЗНАТЬ - ЛУЧШЕ ПРАВИЛЬНО ДУМАТЬ.


 
MsGuns ©   (2003-08-01 15:27) [11]

>Zacho © (01.08.03 13:54)
>Так дело в том, что там не DBGrid, а DBEdit, у которого колонок, естественно, нет.

Читаем еще раз внимательно сабж.
но при переключении между гридами выдает следующее сообщение

По-видимому, именно при обращении к свойствам "переключенного", но не перестроенного по колонкам грида и проистекает этот эксепшн

Кстати, подобная же фигня будет, если попробовать "переключить" указатель на поле у DBEdit`а после смены датасорса или изменения запроса. Вообще все эти смены - замены и источников и НД - от лукавого. Попытка "сделать красиво" там, где надо делать просто и надежно. Ну это ИМХО ессно ;))



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

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

Наверх




Память: 0.5 MB
Время: 0.018 c
14-92186
SeAl
2003-08-10 15:15
2003.08.28
Прокся


3-92059
sensor-x
2003-08-02 03:25
2003.08.28
Вывести определенную строку из определенной колонки


14-92185
vidiv
2003-08-10 14:41
2003.08.28
WebMoney


14-92167
DeMoN-777
2003-08-11 15:46
2003.08.28
PHP+MsSql


3-92030
natali
2003-08-04 17:02
2003.08.28
QReport