Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
18 / 18 / 4
Регистрация: 27.03.2010
Сообщений: 215
1

Динамически менять класс переменных

11.09.2011, 10:26. Показов 906. Ответов 10
Метки нет (Все метки)

Такой вопрос, есть несколько подключений к разным БД Mysql, SQL, Oracal как сделать так чтобы в меню выбора БД вся программа работала только с этими компонентом, но так чтобы не писать для каждой БД свои процедуры ...
Например выбрали Mysql программа работает с TADOConnection, ADOQuery и переменные процедур принимают эти классы ADO, выбрав SQL переменные процедуры программы принимают класс TMyConnnect ... (аналогичные свойства как в ADO)

Суть в том что я не хочу при виборе различных БД писать по 3 одинаковых процедуры меняя только классы некоторых переменных ...
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.09.2011, 10:26
Ответы с готовыми решениями:

Как добавлять класс динамически
Люди, возникла проблема в следующем ,если кто знает подскажите плиз. Допустим есть некий объект А...

Менять расположение блоков динамически
Допустим нижний рекламный блок более кликабельный, чем верхний. Логично было бы в нижнем...

Как динамически менять DataContext?
У меня есть в WPF ToolTip у ComboBox, он при запуске программы заполняется из строкового поля...

Требуется динамически менять кнопки
Никак не могу сообразить. Требуется менять имя и id кнопки после нажатия. Изначально кнопка имеет...

10
Заблокирован
11.09.2011, 10:43 2
Я когда-то давно выкрутился из такой ситуации. Создал свой интерфейс, который декларирует те функции с БД, которые мне нужны. После этого создал наследников от стандартных компонентов доступа к данным, но реализующих мой интерфес. После этого работал с любыми компонентами, используя свой интерфейс. Чтобы было понятнее маленький пример:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//есть 2 класса, у которых есть метод, который делают то, что мне нужно, только эти методы называются по-разному у каждого класса
type
  TFirst = class
    procedure First;
  end;
 
  TSecond = class
    procedure Second;
  end;
 
//объявляем свой интерфейс
  IMySuperInterfase = interface
    procedure Super;
  end;
 
//создаем наследников, реализующих интерфейс TMySuperInterfase
  TSuperFirst = class(TFirst, IMySuperInterfase)
    procedure Super;
  end;
  TSuperSecond = class(TSecond, IMySuperInterfase)
    procedure Super;
  end;
 
.....
 
  procedure TSuperFirst.Super;
  begin
    First;
  end;
 
  procedure TSuperSecond.Super;
  begin
    Second;
  end;
 
 
...
//где-то в коде
 
var
  vInterface: IMySuperInterfase;
begin
   if <какое-то условие> then
     vInterface := TSuperFirst.Create
  else
     vInterface := TSuperSecond.Create;
 
//теперь нам все равно, какой объект реализует нашу процедуру, вызываем
  vInterface.Super.
end;
Вроде доступно объяснил, если что - спрашивайте...
0
18 / 18 / 4
Регистрация: 27.03.2010
Сообщений: 215
11.09.2011, 12:13  [ТС] 3
AndyZorg, а можете бросить какойто проект с таки примером?
0
Заблокирован
11.09.2011, 12:46 4
Цитата Сообщение от p4serhiy Посмотреть сообщение
AndyZorg, а можете бросить какойто проект с таки примером?
Если подождете до вечера - доберусь домой, поищу в архивах.
1
18 / 18 / 4
Регистрация: 27.03.2010
Сообщений: 215
11.09.2011, 13:45  [ТС] 5
AndyZorg, ОК
0
Заблокирован
12.09.2011, 23:33 6
Вот что накидал по-быстрому. В архивах ничего готового не нашел, а ведь было...
Не судите строго
Вложения
Тип файла: rar Ado_Bde.rar (596.1 Кб, 7 просмотров)
1
18 / 18 / 4
Регистрация: 27.03.2010
Сообщений: 215
13.09.2011, 10:36  [ТС] 7
Цитата Сообщение от AndyZorg Посмотреть сообщение
Вот что накидал по-быстрому. В архивах ничего готового не нашел, а ведь было...
Не судите строго
Большое спасибо, очень помогли, я думал будет проще))

Добавлено через 1 минуту
Один вопрос еще..
Что ето за коды в интерфейсах ( ['{05B5D0B9-1F3A-4FE0-B832-6FE0E63236D5}'] ) ?
0
Заблокирован
13.09.2011, 10:42 8
Это уникальный идентификатор интерфейса - в Delphi генерируется нажатием Ctrl+Shift + G. С интерфейсами вообще работали? Если разобраться - то очень удобная штука...
0
18 / 18 / 4
Регистрация: 27.03.2010
Сообщений: 215
13.09.2011, 10:47  [ТС] 9
Цитата Сообщение от AndyZorg Посмотреть сообщение
Это уникальный идентификатор интерфейса - в Delphi генерируется нажатием Ctrl+Shift + G. С интерфейсами вообще работали? Если разобраться - то очень удобная штука...
Работал но не много...
Разберусь по ходу дела...
0
1458 / 1209 / 236
Регистрация: 04.04.2011
Сообщений: 4,240
13.09.2011, 11:11 10
Интерфейс для решения сабжа вовсе не метод, а лишь один из инструментов. Методов же создания универсальных программ обмена с разными СУБД не встречал. Все попытки так или иначе грешат одним и тем же: "урезкой" используемых возможностей серверов (в основном это касается SQL) до некоего "стандартного" набора, гарантированно работающего на большинстве промышленных серверов/движков. Что конечно же отрицательно сказывалось на производительности (как минимум).
ИМХО, куда более оптимальное решение в использовании OLAP-технологии. Т.е. пишется отдельно логика обработки данных и отдельно интерфейсы с СУБД. Т.е. для каждого типа СУБД создается свой "заточенный" программый блок (как он оформлен, как APP-сервер, библиотека классов, dll, интерфейс или баба с коромыслом - не суть важно), с которым по мере необходимости связывается центральный процессор обработки данных (из которого, собственно, информация и "подается" пользователю в готовом виде)

Все это, конечно, сказано исходя из того, что пишется не универсальный клиент
0
Заблокирован
13.09.2011, 11:17 11
2 MsGuns:
Да, все верно. Так я и писал. Был клиент, который работал с различными движками баз данных. Функционал действительно сначала "урезался" до некоторого стандартного набора. Но по мере разработки удалось реализовать поддержку расширенного функционала для каждого движка в отдельности. Система до сих пор активно развивается и работает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.09.2011, 11:17

Как динамически менять размер массива?
Вот я сделал программу, и она вроде как бы работает, но может есть боле верный способ? (Программа...

Как динамически менять цвет объекта?
Здравствуйте. Может кто нибудь знает как во время работы программы, в котором нажав кнопку,...

как динамически менять размер массива?
Мир Вашей Хате!!! А подскажите пжалста как динамически менять размер массива, или укажите где...

Динамически менять размеры Сетки (Grid)
Есть проблема: нужно вывести матрицу, но её размеры могут меняться поэтому нужно динам....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru