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

Вниз

прошу подсказку   Найти похожие ветки 

 
Timka ©   (2002-04-02 08:59) [0]

Подскажите пожалуйста: есть несколько компонентов ТТable и по одному TDBGrid и TControlTab, при переключении с закладки на закладку выполняются практически одни и те-же действия для вывода данных из таблиц в TDBGrid, я решил это через оператор case, но у меня масса таблиц и кнопок, для каждой структура в основном повторяется и в принципе единственное, что меняется, это TDBDrid.DataSource и TTable.IndexNameField. Для кнопок, типа вставить запись, удалить и т.п. тоже приходится использовать CASE, что при десятке таблиц мягко говоря расстраивает, не говоря уже о том, что загромождает текст, увеличивает вероятность ошибки и затрудняет переделку. А теперь вопрос: можно ли пойти каким-либо другим путём, что-бы применить что-то типа Sender as... или т.п.? (все TTable в DataModule, многие таблицы взаимосвязаны...)


 
deleon ©   (2002-04-02 09:11) [1]

Опиши массив типа, который будет содержать в себе указатели на события кнопок, DataSet"ы и др. информацию, затем сделай процедуру типа LoadPage(); в которой опиши действия по чтению данных из соответствующего элемента массива(соответствующего закладке) и присвоения этих данных куда надо, IndexName, DataSet...При правильной организации массива и процедуры загрузки, все будет работать без глюков...Это один из вариантов, как это можно сделать :)))


 
Johnmen ©   (2002-04-02 09:31) [2]

Или написать необходимые процедуры и ф-ии, параметрами которых будут указатели на необходимые объекты...


 
Timka ©   (2002-04-02 12:50) [3]

гмм... я, конечно, жутко извиняюсь, но не очень представляю, как именно выглядят указатели на объекты , а тем более на события этих объектов. Не могли бы Вы привести прмерчик? и если можно, подскажите, где это можно подробнее посмотреть? Плиииз...


 
deleon ©   (2002-04-02 12:59) [4]

type
IPage = record
DataSource: TDataSource;
AddProc: TNotifyEvent;
EditProc: TNotifyEvent;
DelProc: TNotifyEvent;
end;

function DataSource1: TDataSource;
function DataSource2: TDataSource;
function DataSource3: TDataSource;

const
IPageArray[0..2]of IPage =
((DataSource: DataSource1; AddProc: Button1Click; EditProc:
Button2Click; DelProc: Button3Click),
......................

implementation

function DataSource1: TDataSource;
begin
Result := MainForm.SuperDataSource1;
end;

Все приблизительно так...фух, аж устал :)))


 
Aleksandr ©   (2002-04-02 13:06) [5]

Ну, а не проще через свойство Tag использовать все? На то параметр Sender в методах и есть, чтобы неявно обращаться... Хотя, может, я чего-то недопонимаю, но у меня в одной программе аналогичный механизм с кучей таблиц и TabControl... Правда, я там не плодил пачку компонент, а в зависимости от закладки заполнял TQuery...


 
VAleksey   (2002-04-02 15:50) [6]

Ха, можно по моему еще проще:
в юнете формы в разделе Public пиши: MyTable:TTable;
При перемещении по TabSheet - ам делай следующее
MyTable:=Table1;
И вызывай для MyTable какие хочешь методы и действия !!!!
В данном случае все будет применятся для Table1 !


 
Timka ©   (2002-04-03 19:26) [7]

to deleon :
БОЛЬШОЕ СПАСИБО ЗА ПРИМЕР!!! чувствую, эта метода мне ещё здорово пригодится... :)))

to VAleksey :
круто. Ж:( сижу у зеркала, ощупываю уши... прикидываю длину...

ВСЕМ ОГРОМНОЕ СПАСИБО ЗА ПОМОЩЬ!!!

кстати, товарищи Мастера, не подскажете ли, в целях дальнейшего повышения образованности :), почему может происходить следующее :

перенёс из dbf в парадокс с помощью BathMove записи, сделал сортировку для табле по текстовому полю по типу хелпа дельфи.
работает в 95процентах случаев. только. Симптомы :
есть запись СОЛЬ - отсортировывается только если первая буква - латиницей
запись ОГУРЦЫ - никак не отсортировывается, (впереди пробела нет)
если изменяю в через DBGrid - всё нормально. Пока не закрою дельфи. При поторном открытии - всё возвращается обратно. при этом в одном сеансе всё нормально,разные проекты видят изменение. через SQL explorer - изменения в таблицах постоянные.
хорошо что таблица маленькая, случайно заметил. а если не 100 а 1000 записей? как с этим бороться?
или этот вопрос лучше задать в другой ветке?


 
VAleksey   (2002-04-04 06:38) [8]

Да в другой


 
Timka ©   (2002-04-04 11:51) [9]

понял, спасибо



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

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

Наверх




Память: 0.49 MB
Время: 0.016 c
3-80787
Master Denis
2002-04-04 17:35
2002.04.25
Как изменить имена полей в DBStringGrig


4-81103
hair_fly
2002-02-19 18:06
2002.04.25
Как отличить NT от 2000 ?


7-81099
МИФИст
2002-01-25 15:21
2002.04.25
Память...


3-80800
PeteDm
2002-04-05 08:53
2002.04.25
QReport


4-81104
Romul
2002-02-18 12:29
2002.04.25
Как воостановить подключение к сетевому диску?