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