Встроенная Delphi база данных (часть 1)
Здравствуйте Delphi’сты и им сочувствующие.
В комплекте с Delphi 7 поставляются сразу несколько библиотек для работы с базами данных (ADO, BDE, dbExpress, InterBase и др.). Для того чтобы создать приложение, работающее с локальной базой данных, то вы обычно используете библиотеку BDE. Эта библиотека создана компанией Borland и уже порядком устарела. Но без определённой подготовки операционной системы эти компоненты работать не будут. Есть альтернатива этим компонентам.
Существует автономный компонент TClientDataSet который использует свой собственный формат данных.
Итак, переходим к практике. Компонент TClientDataSet использует файлы с расширением *.CDS и *.XML мы будем рассматривать формат CDS, так как XML формат занимает вдвое больше места на диске и такой файл легко можно изменить, открыв его через блокнот. Этот компонент при создании проецирует файл в память и модифицирует только память, а при уничтожении данные записываются в файл целиком. Путь к файлу определяет свойство FileName. Файлы формата CDS можно найти в папке program files\Common Files\Borland Shared\Data. Давайте сначала откроем один из них. Скопируем один из них в папку c:\data .
Кидаем на форму 4
компонента
1. TClientDataSet
2. TDataSource
3. TDBGrid
4. TDBNavigator
В результате :
1. DataSource1
2. ClientDataSet1
3. DBGrid1
4. DBNavigator1
Настраиваем их свойства так чтобы получилось
примерно так:
DBNavigator1.DataSource = DataSource1
DBGrid1.DataSource = DataSource1
DataSource1.DataSet = ClientDataSet1
ClientDataSet1.FileName = ‘D:\111\www\customer.cds’
ClientDataSet1.Active = True (самое главное этого не
забыть :-))
И всё готово. Вы сразу у меня спросите: «А как создать новую таблицу?».
Всё очень просто даже не нужно НИКАКИХ дополнительных программ, только компонент TClientDataSet и конечно Delphi.
1.
Создаём новый проект (можно даже его не сохранять) и добавляем на форму
компонент TClientDataSet.
2. Сначала определим
структуру таблицы. Для этого открываем свойство FieldDefs нашего компонента.
Открывается окно «Editing ClientDataSet1.FieldDefs» жмём «добавить новый», и
определяем свойства поля (тип, формат, размер и т.д.).
3. Теперь самое главное. Щёлкаем правой
кнопкой мыши на компоненте TClientDataSet и выбираем пункт CreateDataSet. Потом
ещё раз открываем контекстное меню и выбираем пункт «Save to binary MyBase file»
и сохраняем файл туда, куда нам надо.
Всё готово теперь у нас есть файл CDS. Можно закрывать данный проект и создавать новый, так как это было показано выше. Изменяете его, как хотите, добавляйте, удаляйте, изменяйте короче как обычно. Как модифицировать файл программно и фильтровать и индексировать записи, я вам расскажу позже.
Базы данных в Delphi
Практика разработки БД.
Дмитрий Осипов » Базы данных и Delphi. Теория и практика» БХВ-Петербург, 2011 год, 752 стр. (16,6 мб. pdf)
Книга расскажет о том, как разрабатывать базы данных в Delphi. Представленная информация основана на теоретических лекциях и практических занятиях, автора книги. Изложены теоретические вопросы и практическая концепция создания и использования реляционных баз данных. Первая часть книги посвящена теоретическим основам реляционных баз данных: реляционной модели данных, жизненному циклу информационной системы, концептуальным и логическим моделям БД, рекурсивной связи и нормализации отношений, обеспечению многопользовательских транзакциями и манипулированием данными.
Также рассмотрены вопросы безопасности БД, языки SQL и XML и др. Вторая часть расскажет о возможностях программных инструментов Delphi в области разработки приложений баз данных: технологии dbExpress, Interbase Express и ADO, работа с компонентами управления данными визуальной библиотеки Delphi, техническими возможностями многоуровневых приложений в DataSnap, отчеты и др. Книга полезна в качестве практического руководства по разработке и использованию БД с клиентскими приложениями.
ISBN 978-5-9775-0659-5
Оглавление.
ЧАСТЬ I. Введение в реляционные базы данных 5
ГЛАВА 1. Системы, основанные на файлах 7
Принцип построения систем, основанных на файлах 9
Недостатки систем, основанных на файлах 10
Пути устранения недостатков систем, основанных на файлах 13
Резюме 14
ГЛАВА 2. Эволюция моделей реализации данных 15
Необходимость моделирования 17
Иерархическая модель18
Сетевая модель 20
Попытки разработки стандарта БД 21
Реляционная модель 23
Объектно-ориентированная модель 25
Резюме 26
ГЛАВА 3. Функции и компоненты субд 27
Функциональные обязанности СУБД 27
Компоненты СУБД 29
Архитектурные решения доступа к БД 32
Файл-сервер 32
Клиент-сервер 34
Многоуровневые решения 36
Резюме 37
ГЛАВА 4. Реляционная модель данных 38
Сущность и атрибуты 39
Тип данных и домен 41
Связь 43
Реляционная таблица 45
Ключ 47
Целостность данных 48
Целостность доменов 48
Целостность сущностей 49
Ссылочная целостность 50
Корпоративная целостность 50
Реляционная алгебра 51
Резюме 56
ГЛАВА 5. Модель «сущность — связь» 57
Сущности и атрибуты в ER-модели 58
Подтипы сущностей 61
Связи в ER-модели 63
Сильные и слабые связи 66
Рекурсивная связь 67
Связи высокого порядка 68
Вариации ER-моделей 70
Резюме 72
ГЛАВА 6. Нормализация 73
Первая нормальная форма 76
Функциональная зависимость атрибутов 79
Порядок определения первичного ключа 81
Вторая нормальная форма 82
Третья нормальная форма 84
Нормальная форма Бойса—Кодда 86
Четвертая нормальная форма 87
Пятая нормальная форма 88
Резюме 90
ГЛАВА 7. Индексирование 91
Индексы на основе хеширования 93
Хеш-функции 95
Хеширование текстовых данных 96
Борьба с коллизиями 96
Индексы на основе B-деревьев 98
Битовые индексы 103
Правила назначения вторичных индексов 103
Резюме 104
ГЛАВА 8. Транзакции и параллельная обработка данных 105
Понятие транзакции 106
Проблемы параллельного доступа к данным 108
Потерянные обновления 108
Неактуальные чтения («грязное чтение») 109
Несогласованная обработка 110
Чтение строк-фантомов 111
Управление параллельными транзакциями 112
Метод блокировок 113
Метод временных меток 115
Метод двухфазной блокировки 116
Оптимистический подход 116
Уровни изоляции SQL-транзакций 117
Резюме 118
ГЛАВА 9. Проектирование БД 119
Понятие информационной системы 119
Этапы жизненного цикла базы данных 122
Планирование разработки БД 123
Определение и анализ требований к системе 123
Проектирование БД 127
Выбор СУБД 130
Создание прикладного программного обеспечения 131
Тестирование 132
Реализация 133
Эксплуатация и сопровождение 133
Резюме 134
ГЛАВА 10. Защита БД 135
Откуда исходят угрозы 136
Правила защиты БД 139
Аутентификация и авторизация 140
Криптографическая защита 141
Резервное копирование 143
Аудит событий безопасности 144
Модернизация системного и прикладного ПО 145
Доступ к данным только при посредничестве представлений и хранимых процедур 145
Резюме 146
ГЛАВА 11. Знакомство с SQL 147
Назначение SQL 149
Типы данных SQL 150
Предопределенные типы данных 152
Непредопределенные типы данных 157
Массив 158
Мультимножество 158
Пользовательский тип 159
Другие типы 160
Определение констант 160
Преобразование данных 161
Операторы 162
Встроенные функции 163
Резюме 164
ГЛАВА 12. Построение запросов 165
Порядок сортировки — ORDER BY 167
Условие отбора данных — WHERE 167
Сравнение 168
Попадание в диапазон — BETWEEN 169
Соответствие шаблону — LIKE 169
Проверка неопределенного значения — IS NULL 170
Принадлежность множеству — IN, ALL, ANY, SOME 170
Предикат существования — EXISTS 171
Многотабличные запросы 171
Слияние UNION 173
Объединение ON 173
Объединение USING 176
Агрегирующие функции 176
Группировка данных — GROUP BY 177
Дополнительная фильтрация группы строк — HAVING 178
Оконные функции 178
Рекурсивные запросы 182
Резюме 184
ГЛАВА 13. Манипулирование данными и управление транзакциями 185
Язык манипулирования данными DML 185
Вставка, инструкция INSERT 185
Редактирование, инструкция UPDATE 187
Удаление, инструкция DELETE 188
Слияние данных, инструкция MERGE 190
Транзакции 191
Диагностирование ошибок в работе транзакции 194
Настройка уровня изоляции 196
Резюме 197
ГЛАВА 14. Определение данных в SQL 198
Базы данных (схемы) 198
Таблицы 200
Индексы 205
Домены 208
Представления (виртуальные таблицы) 209
Хранимые процедуры 210
Триггеры 212
Курсоры 217
Управление доступом к данным 220
Управление наборами привилегий 221
Предоставление привилегий 222
Лишение привилегий 224
Резюме 225
ГЛАВА 15. Основы XML 226
Правильность и допустимость документа 229
Построение простейшего документа XML 229
Элементы 230
Специальные символы 232
Атрибуты 232
Пространство имен 233
Определение документа 236
DTD 236
Хранение DTD во внешнем файле 240
Резюме 242
ГЛАВА 16. XML schemas 243
Определение элемента <element> 246
Тип данных 248
Производные типы <simpleType> 248
Глобальное и локальное объявление 252
Квалифицирование элемента 252
Ограничения на число элементов 253
Значение по умолчанию и фиксированное значение 253
Создание сложных структур <complexType> 254
Определение атрибута <attribute> 256
Подключение XML-схемы к документу 257
Пример схемы computers.xsd 258
Пример документа computers.xml 261
Резюме 262
ЧАСТЬ II. Проектирование приложений БД в Delphi 263
ГЛАВА 17. Концепция приложения БД Delphi 265
Пример простейшего приложения БД 265
Архитектура приложения БД 269
Общая характеристика компонентов соединения с БД 271
Общая характеристика компонентов наборов данных 271
Источник данных 273
Общая характеристика компонентов управления данными 274
Резюме 275
ГЛАВА 18. Универсальный набор данных tdataset 276
Функционал набора данных 278
Открытие и закрытие набора данных 278
Обновление набора данных 279
Перемещение по набору данных 280
Создание закладок и переход к закладке 282
Состояние набора данных 284
Редактирование записей в наборе 286
Организация доступа к отдельному полю 288
Вычисляемые поля 290
Агрегатное поле 290
Фильтрация набора данных 291
Организация поиска данных 292
Обработка событий 294
Кэширование данных 295
Взаимодействие с элементами управления 296
Резюме 297
ГЛАВА 19. Общая характеристика полей набора данных 298
Поле таблицы — класс TField 298
Классификация полей по функциональному назначению 301
Классификация полей по типу хранимых данных 301
Обращение к полю 303
Доступ к данным поля 304
Низкоуровневый доступ к данным 306
Преобразование типа данных 307
Размер поля 308
Значение по умолчанию 309
Ограничения на ввод данных 310
Маска ввода 311
Индексные поля 312
Отображение данных 312
Обработка событий 314
Поля подстановки 315
Вычисляемые поля 322
Числовые поля, класс TNumericField 324
Поля целых чисел TLargeintField, TIntegerField, TSmallintField, TWordField, TAutoIncField 326
Поля вещественных чисел TFloatField и TCurrencyField 326
Бинарно-кодированные десятичные поля TBCDField и TFMTBCDField 327
Текстовые поля, TStringField 328
Поле глобального идентификатора, TGuidField 329
Логическое поле, TBooleanField 330
Бинарные поля TBinaryField, TBytesField и TVarBytesField 330
Дата и время, поля TDateTimeField, TDateField и TTimeField 330
Дата и время, поле TSQLTimeStampField 331
Поля больших бинарных объектов, TBlobField, TGraphicField, TMemoField и TWildMemoField 331
Композитные поля, TObjectField 338
Резюме 340
ГЛАВА 20. Вспомогательные классы набора данных 341
Коллекция TParams и динамический SQL 341
Параметр TParam 344
Описание структуры таблицы и ее индексов 347
Коллекция полей структуры таблицы TFieldDefs 349
Определение поля, класс TFieldDef 351
Коллекция структуры индексов таблицы, класс TIndexDefs 352
Определение индекса, класс TIndexDef 353
Пример создания таблицы 354
Резюме 356
ГЛАВА 21. Клиентский набор данных TClientDATASet 357
Проекты БД, основанные на файлах 358
Загрузка и сохранение данных 361
Требования к структуре XML 365
Хранение данных в компоненте 366
Управление данными 367
Работа с индексами 370
Определение диапазона 373
Ограничения 376
Применение агрегирующих функций 376
Агрегат, класс TAggregate 377
Агрегатные поля TAggregateField 378
Место TClientDataSet в многоуровневых проектах БД 379
Работа в клиентских приложениях DataSnap ранних версий 380
Сохранение данных на сервере 381
Отмена изменений 382
Применение точек сохранения 383
Обработка ошибок 383
Оптимизация пакета с данными 385
Обновление данных 386
Выполнение команд SQL 387
Резюме 387
ГЛАВА 22. Введение в технологию ADO 388
Взаимодействие ADO и компонентов VCL 389
Строка соединения ADO 392
Соединение с хранилищем данных, компонент TADOConnection 393
Установка соединения 393
Пример соединения без регистрации пользователя 397
Регистрация пользователя 402
Разрыв соединения 408
Информирование о соединении 408
Отправка команд 410
Управление подчиненными компонентами dbGo 413
Транзакции 413
Кэширование 415
Сервисные методы модуля ADODB 416
Резюме 418
ГЛАВА 23. Наборы данных ADO 419
Командный объект — TADOCommand 419
Коллекция ошибок Errors и объект ошибки Error 424
Набор данных ADO, компонент TADODataSet 425
Интерфейс множества записей _Recordset 426
Доступ к хранилищу данных 427
Выбор библиотеки курсора 428
Редактирование данных 429
Перемещение по множеству строк 430
Особенности применения поля BCD 432
События TCustomADODataSet 432
Работа с индексами 436
Сортировка записей 436
Поиск данных 436
Особенности изоляции транзакций 437
Фильтрация множества записей 438
Кэширование записей 438
Фильтрация записей в кэше 440
Организация отложенного обновления данных в ADO 441
Портфельный режим обработки данных 443
Управление данными ADO в стиле Delphi 444
Таблица TADOTable 445
Организация отношения «главная – подчиненная таблица» 446
Запрос TADOQuery 448
Хранимая процедура TADOStoredProc 450
Резюме 452
ГЛАВА 24. Доступ к БД InterBase 453
Доступ к базе данных, компонент TIBDatabase 454
Выбор диалекта ISQL 455
Создание и уничтожение базы данных 456
Соединение с базой данных 457
Регистрация пользователя 459
Разрыв соединения 460
Информирование о составе БД 462
Управление транзакциями 463
Контроль за событиями 464
Совместная работа с SQL монитором 464
Транзакция, компонент TIBTransaction 465
Управление транзакцией 466
Тайм-аут транзакции 468
Диагностика состояния транзакции 469
Параметры транзакции 469
Информация об объектах БД, компонент TIBExtract 471
События InterBase, компонент TIBEvents 473
Информация о БД, компонент TIBDatabaseInfo 474
Монитор SQL, TSQLMonitor 476
Файл инициализации БД, TIBDataBaseINI 476
Резюме 478
ГЛАВА 25. Наборы данных InterBase 479
Инструкция SQL, компонент TIBSQL 480
Подготовка к работе 480
Обслуживание полученного набора данных 482
Наборы данных InterBase, компонент TIBDataSet 483
Подготовка к работе 483
Обработка событий 485
Генератор значений 486
Особенности редактирования данных 488
Работа в режиме кэширования обновлений 488
Перемещение по записям 490
Фильтрация данных 490
Запрос, компонент TIBQuery 491
Редактирование данных, доступных только для чтения 492
Хранимая процедура, компонент TIBStoredProc 492
Таблица, компонент TIBTable 494
Экспорт-импорт данных 494
Модифицируемый запрос, компонент TIBUpdateSQL 496
Диалог фильтрации, компонент TIBFilterDialog 498
Резюме 500
ГЛАВА 26. Администрирование сервера InterBase 501
Свойства сервера, TIBServerProperties 505
Сервис лицензирования, TIBLicensingService 510
Конфигурирование сервера, TIBConfigService 511
Ведение журнала транзакций 514
Протокол работы сервера, TIBLogService 517
Статистика, TIBStatisticalService 518
Проверка БД, TBDValidationService 520
Управление учетными записями, TIBSecurityService 522
Резервное копирование и восстановление, TIBBackupService и TIBRestoreService 528
Резюме 532
ГЛАВА 27. Технология доступа к данным DBexpress 533
Соединение с сервером БД, компонент TSQLConnection 534
Настройка компонента 535
Управление соединением 537
Создание БД 539
Создание подключения в Data Explorer 539
Пример подключения 542
Управление подчиненными наборами данных 547
Управление транзакциями 547
Выполнение SQL-инструкций 548
Ограничение числа выполняющихся инструкций 549
Информирование о БД 549
Аутентификация пользователя в DataSnap 551
Мониторинг работы программы, TSQLMonitor 551
Резюме 553
ГЛАВА 28. Наборы данных DBexpress 554
Базовый класс TCustomSQLDataSet 555
Формирование инструкций SQL 556
Получение системной информации 557
Набор данных dbExpress, компонент TSQLDataSet 561
Особенности обслуживания BLOB-полей 563
Таблица TSQLTable 563
Запрос TSQLQuery 565
Хранимая процедура TSQLStoredProc 565
Простой набор данных TSimpleDataSet 567
Резюме 569
ГЛАВА 29. Интерфейс приложения и компоненты Data Access 570
Источник данных — компонент TDataSource 570
Общие черты компонентов отображения данных 572
Сетка базы данных — компонент TDBGrid 573
Одновременный выбор нескольких строк 575
Колонки сетки 576
Коллекция колонок — класс TDBGridColumns 576
Колонка — класс TColumn 578
Обработка событий 582
События прорисовки данных 583
Статический текст — компонент TDBText 585
Строка ввода — компонент TDBEdit 586
Многострочный редактор — TDBMemo 587
Редактор расширенного формата — TDBRichEdit 588
Изображение — компонент TDBImage 588
Список — TDBListBox 589
Комбинированный список — TDBComboBox 590
Группа переключателей — TDBRadioGroup 590
Флажок — TDBCheckBox 591
Компонент — TDBCtrlGrid 591
Поля подстановки 594
Список подстановки — TDBLookupListBox 595
Комбинированный список подстановки — TDBLookupComboBox 596
Навигатор — TDBNavigator 596
Резюме 598
ГЛАВА 30. Нестандартные решения для стандартных компонентов 599
Компоненты-списки 599
Компонент TListView 604
Сетка, компонент TStringGrid 607
Иерархические данные 610
Многотабличное представление иерархических данных 610
Рекурсивная связь 611
Инициализация проекта 614
Новая запись 615
Сбор данных 617
Очистка данных 618
Редактирование записи 619
Удаление записи 620
Сортировка узлов 621
Переподчинение узлов 623
Резюме 628
ГЛАВА 31. Многоуровневые БД на основе DataSnap 629
Архитектура трехзвенного проекта БД DataSnap 630
Сервер TDSServer 633
Класс сервера TDSServerClass 637
Обмен данными между клиентом и сервером, компоненты TDSTCPServerTransport и TDSHTTPService 638
Аутентификация, TDSHTTPServiceAuthenticationManager 641
Метод сервера TSqlServerMethod 641
Пример проекта DataSnap 642
Регистрация службы 648
Подготовка клиентского приложения 649
Подключение сервера приложений к БД 651
Получение данных клиентским приложением 652
Реализация на сервере метода вставки новой записи 654
Доступ к методу вставки записи на стороне клиента 655
Архитектура DataSnap, совместимая со старыми клиентскими приложениями 655
Интерфейс IAPPServer 656
Провайдер набора данных, компонент TDataSetProvider 658
Подключение к провайдеру набора данных, компонент TDSProviderConnection 664
Клиентское приложение БД на основе IAppServer 665
Механизм обратного вызова 666
Резюме 669
ГЛАВА 32. Управление службой сервера приложений DataSnap 670
Менеджер управления службами 671
Работа со службой 672
Пример управляющего приложения SCP 673
Доработка сервиса DataSnap 680
Создание модуля панели управления 682
Резюме 686
ГЛАВА 33. Отчеты Rave Reports 687
Обзор компонентов Rave Reports 687
Соединение TRvCustomConnection 688
Проект TRvProject 688
Системный компонент TRvSystem 689
Компоненты экспорта отчета в файл 690
Пример работы с редактором Rave Reports 690
Вызов отчета из приложения 696
Резюме 697
ГЛАВА 34. Разработка динамических библиотек для проектов БД 698
Общая характеристика DLL 698
Создание шаблона динамической библиотеки в Delphi 700
Экспортирование функций DLL 702
Пример простой DLL 703
Взаимодействие динамической библиотеки с проектом 704
Размещение файла DLL 705
Явная загрузка DLL 705
Неявная загрузка DLL 706
Пример DLL универсального генератора отчетов 707
Резюме 712
Скачать книгу бесплатно16,6 мб. pdf
Похожая литература
173
https://www.htbook.ru/kompjutery_i_seti/programmirovanie/bazy-dannyh-v-delphiБазы данных в Delphihttps://www.htbook.ru/wp-content/uploads/2016/12/Bazy-dannyh-Delphi-Teoriya-praktika.jpghttps://www.htbook.ru/wp-content/uploads/2016/12/Bazy-dannyh-Delphi-Teoriya-praktika.jpgПрограммирование и БДDelphi,ПрограммированиеПрактика разработки БД. Дмитрий Осипов ‘ Базы данных и Delphi. Теория и практика’ БХВ-Петербург, 2011 год, 752 стр. (16,6 мб. pdf) Книга расскажет о том, как разрабатывать базы данных в Delphi. Представленная информация основана на теоретических лекциях и практических занятиях, автора книги. Изложены теоретические вопросы и практическая концепция создания и использования…SomМихаил Михайлов[email protected]Техническая литература14.1.2. Delphi и базы данных
Для работы с базами в Delphi есть несколько наборов компонентов. Каждый набор очень хорошо подходит для решения определенного круга задач. Почему такое разнообразие компонентов? Все они используют разные технологии доступа к данным и отличаются по своим возможностям. Microsoft встроила в свои продукты разработки только технологию доступа к данным ADO, собственной разработки. Фирма Borland предоставила разнообразные средства, работающие через разные технологии, и не ограничивает программиста только своими разработками. Такое положение вещей дает громадные преимущества. Помимо этого, есть группы компонентов, которые могут использоваться в любом случае.Произведем краткий обзор имеющихся средств доступа к базам данных.
— На вкладке Data Access расположены основные компоненты доступа к данным. Эти компоненты общие для всех и могут использоваться совместно с другими группами компонентов
— На вкладке Data Controls расположены компоненты для отображения и редактирования данных в таблицах. Эти компоненты так же используются в независимости от используемой на данный момент технологии доступа к данным.
— Вкладка BDE содержит компоненты, позволяющие получить доступ к базам данных по технологии, разработанной фирмой Borland, под названием Borland Database Engine. Эта технология сильно устарела и поставляется только для учета совместимости со старыми версиями. Несмотря на это, она хорошо работает с устаревшими типами баз данных, например, такими как Paradox и dBase.
— DBExpress — это новая технология доступа к данным фирмы Borland.
Она отличается большей гибкостью и хорошо подходит для программирования клиент-серверных приложений, использующих базы данных.
Компоненты с одноименной вкладки желательно использовать с базами данных, построенных по серверной технологии, например, Oracle, DB2 или MySQL.
— ADO (Active Data Objects) — технология доступа к данным, разработанная корпорацией Microsoft. Очень хорошая библиотека, но использовать ее желательно только с базами данных Microsoft, а именно MS Access или MS SQL Server. Ее также можно использовать, если у вас специфичный сервер баз данных, который может работать только через ODBC.
( Совет )
Работа с базами данных Access идет через специальную надстройку DАО, которая может устанавливаться на компьютер вместе с программой Office или идти как отдельная установка. Так что если ваша программа не будет работать на компьютере клиента, то надо позаботиться об установке DАО и ADO на этот компьютер. На компакт-диске в папке DLL вы можете найти файл mdac_typ.exe, который устанавливает компоненты ADO версии 2.7. Это самые свежие компоненты на момент написания книги.
На данном этапе не ставится цель рассмотреть абсолютно все компоненты.
Однако информация по наиболее важным из них будет рассмотрена. Это обеспечит возможность писать профессиональные приложения для работы с базами данных.
14.2. Создание первой базы данных Access
Сейчас мы подробно рассмотрим, как создавать и использовать базы данных Access. Для последующей работы необходимо, чтобы на вашем компьютере были установлены MS Office и его компонент MS Access. Именно в нем и будут создаваться РБД, а вот работать с ними мы будем уже из Delphi.
Запустите Access и выберите меню Файл | Создать. В мастере создания базы данных выберите пункт База данных и нажмите ОК. Вам предложат выбрать имя базы и место расположения, укажите, что угодно (например, файл Database.mdb).
После этого Access создаст базу и сохранит ее по указанному пути. Далее вы увидите окно, показанное на рис. 14.1, в котором и происходит работа с базой. С левой стороны окна находится колонка выбора объектов РБД, с которыми вы можете работать. Первым стоит пункт Таблицы (он выделен по умолчанию), который и будет нас интересовать. Если этот объект у вас не выделен, выделите его.
Рис. 14.1. Окно управления базой данных
В окне справа находятся три пункта:
— Создание таблицы в режиме конструктора;
— Создание таблицы с помощью мастера;
— Создание таблицы путем ввода данных.
С помощью этих команд можно создать таблицы внутри созданной базы данных Access, которая может хранить в одном файле несколько таблиц.
Все данные в базах данных хранятся в виде двухмерных таблиц. На рис. 14.2 вы можете видеть пример простой таблицы, состоящей из семи колонок и множества строк.
Колонки в таблицах называются полями. По ним определяется, какие именно данные хранятся в таблице. Давайте попробуем создать базу данных телефонного справочника. Щелкните кнопкой мыши по пункту меню
Рис. 14.2. Пример простой таблицы
Рис. 14.3. Окно создания таблицы
Рассмотрим наиболее важные из них.
— Масксимальная длина поля. Для текстового поля размер не может быть больше 255. Если текст длиннее, то надо использовать Поле Memo.
— Формат поля. Здесь вы можете указать внешний вид данных. Например, поле может выглядеть как Yes / NO для логических полей, или — mm уууу для поля даты.
— Маска ввода. Здесь мы вводим маску, которая отвечает за отображение поля при редактировании. Если вы щелкнете мышью на кнопке с точка- ми — … — в строке Маска ввода, то увидите мастер создания маски.
— Значение по умолчанию. Указанное здесь значение будет использоваться, если пользователь не указал в поле каких-либо данных.
— Обязательное поле. Если пользователь не введет сюда значение, то появится сообщение об ошибке. Такое поле не может быть пустым.
— Пустые строки. Похоже на предыдущее поле, потому что оно тоже не может быть пустым.
— Индексированное поле. Основной индекс всегда без допуска совпадений.
Остальные могут допускать двойные значения. Может быть:
• неиндексированным;
• индексированным с допуском совпадений;
• индексированным без допуска совпадений.
— Сжатие Юникод — позволяет сжать данные в соответствии с кодировкой Unicode.
Почему город не строковый, ведь названия городов — это текст? Пока здесь не будет объясняться этот феномен, оставим его на потом. Чуть позже мы увидим, почему город должен быть числовым.
Помимо этого, у всех полей — Обязательное поле значение стоит в Нет, и в пустые строки выставлено Да. Если вы сделаете поле обязательным, то во всех строках обязательно должно быть заполнено соответствующее поле. Если вы запретите пустые строки (значение — Нет), то в указанном поле должно быть обязательно что-то введено, иначе произойдет ошибка. В реальных условиях, если какое-то поле обязательно должно иметь значение, то лучше сделать его обязательным. Не надо надеяться на добропорядочность пользователей, потому что они слишком часто подводят. Пусть лучше база данных следит за правильностью данных.
Теперь выделим первое поле (Кеу1). Щелкните правой кнопкой мыши и выберите пункт Ключевое поле. Задание ключевого поля является обязательным действием, если вы этого не сделаете, то таблица не сможет редактироваться, а это значит, что в нее нельзя будет добавлять строки.
Примечание
В Access при попытке сохранить таблицу без ключевого поля программа предлагает самостоятельно создать ключ. Если вы согласитесь, то таким полем будет первое по счету. Все, таблицу можно сохранять и закрывать. На вопрос: «Сохранить таблицу» отвечайте положительно и сохраните под именем Справочник.
Наша первая база данных готова. Теперь можно перейти к следующему разделу, где мы напишем первый пример для работы с созданной БД и таблицей.
Базы данных BDE InterBase ADO ODBC MySQL
- л.р.1 — Проектирования БД на основе декомпозиции универсального отношения.(только теория и задание)
- л.р.2 — Создание базы данных формата Paradox средствами Delphi (BDE)
- л.р.3 — Применение технологии доступа к данным BDE среды программирования Delphi при создании приложения для работы с БД (BDE)
- л. р.4 — Программирование приложения для работы с базами данных (BDE)
- Цикл лабораторных работ по Interbase — 2011-12 г.
- Работа 1 Создание, регистрация, подключение БД Interbase
- Работа 2 Делфи — проект: интерфейс к БД Interbase
- Работа 3 Создание генератора, триггера, хранимой процедуры
- Работа 4 Создание хранимой процедуры (2-й пример)
- Работа 5 Сортировка, поиск и фильтрация данных в БД и выборках
- Работа 6 Кеширование изменений
- Работа 7 Работа с отчетами — Quick Report
- Работа 8 Установление привилегий доступа — GRANT
- Работа 9 Резервное копирование (backup) и восстановление данных
- Работа 10 DBImage, DBEdit, DBMemo на форме — для редактирования таблицы
- Работа 11 Редактирование таблицы и простые запросы
- л.р.5-0 Создать базу данных типа Interbase и приложение для работы с базой данных в архитектуре клиент-сервер. Эта работа по-моему, лучше чем л.р.5 и л.р.6, посвященных примерно этой же теме. Но возможно вы найдёте что-то полезное и в них.
- л.р.5 — Разработка баз данных средствами SQL-сервера Interbase. Команды языка SQL для описания данных. Триггеры
(Триггеры, созданные в БД Interbase работают, если SQL-запрос создан в IBConsole , SQL Explorer или Делфи-приложении и не работают, если для изменения данных применяется интерфейс вроде DBNavigator). - л.р.6 — Применение технологии доступа к данным Delphi – IBX при создани приложения для работы с БД.
Команды языка SQL для манипулирования данными - л.р.7 — Разработка отчетов в Rave Reports 5.0
- л.р.8 — Управление приложениями пакета MS Office Управление MS Word (вывод отчетов БД в MS Word )
- л.р.9 — ADO -> ODBC -> MySQL
Здесь размещен цикл лабораторных работ по базам данных.
Лаб.работы 1-8 содержат теоретические сведения, задание, контрольные вопросы и пример выполнения. Примеры — мои, остальное из неизвестного источника (методичка ВУЗа).
ADO -> ODBC -> MySQL — проект использует технологии ADO, ODBC для доступа к БД Аптека
(MySQL). Базы данных для этого проекта — в комплекте, т е в ADO_2.rar.
Описание учебной базы данных
БД предназначена для обслуживания части функций деятельности Аптеки.
Таблица lek_list
хранит список лекарств. Поля:Lek_id — номер лекарства, ID (первичный ключ),
Id_kategor — номер категории (группы). Внешний ключ — используется для связи с табл. kategorii
Nazvan1, Nazvan2, Nazvan3 — 3 поля для названия,
Cena — цена.
Таблица kategorii
хранит список категорий лекарств. Каждое лекарство относится к какой-либо категории. Поля:Id_kategor — номер категории, ID (первичный ключ),
Kategor — название категории.
Таблица sklad
хранит сведения о хранении лекарств на складе. Поля:Lek_id — номер лекарства, ID (первичный ключ),
Ostatok — количество лекарства на складе,
Stellaj — стеллаж (местонахождение), где хранится это лекарство.
Таблица ap_users
Список пользователей (клиентов), которые дистанционно заказывают лекарства в аптеке. Поля:Id_users — номер клиента, ID (первичный ключ),
Name — имя,
Email — Email,
Pass — пароль,
Contactfio — имя контактного лица,
Id_country — номер (ID) страны клиента,
Pindex — почтовый индекс
City — город
Paddress — почтовый адрес,
Phone — телефон,
Fax — факс,
Etc — примечание (для курьера)
В учебных проектах лаб2 — лаб8 созданы формы для отображения данных, хранящихся в таблицах. Специальные формы, ориентированные на конкретных пользователей, не разрабатывались. Для использования проектов в реальной деятельности нужно добавить специализированные формы. Например — для авторизации и регистрации пользователей, для формирования заказа пользователя и т п.
Скачать базы данных
( *.RAR, правый щелчок, выбрать: Сохранить объект как )
- (Псевдоним — алиас — kassa4)
связан с БД в папке BD_kassa. БД содержит проверку значений, индексы, проверку ссылочной целостности, пароли — все это в БД, т е на уровне BDE.
Пароли:
Для табл. ap_users, lek_list:
— пароль допуска: krolik (Master password)- можно менять все.
— slon — доступ к табл lek_list (Insert и delete), но недоступно поле pass.
— zubr -> Тoлько для чтения все поля, а cena — полный доступ. - (алиас — kassa5)
связан с БД в папке BD_kassa5 Нет проверок, индексов, проверок целостности, но есть пароли. Основной среди них: krolik - (алиас — kassa_ )
связан с БД в папке BD_kassa_ — Нет проверок, индексов, проверок целостности, нет паролей. - (алиас — kassa6, файл KAS6.gdb )
БД InterBase. Login= SYSDBA pass= masterkey
- BDE — для kassa4, kassa5, kassa_,
- InterBase — для KAS6.gdb.
Цикл работ по Interbase + Delphi
- Работа 1. Создание, регистрация, подключение БД Interbase (используется: IBConsole.exe)
- Работа 2. Делфи — проект: интерфейс к БД Interbase (используется: IBConsole.exe, IBDatabase, IBTransaction, IBTable, DataSource, DBGrid, DBNavigator, IBQuery )
- Работа 3. Создание генератора, триггера, хранимой процедуры (используется: IBConsole.exe, IBDatabase, IBTransaction, IBTable, DataSource, IBQuery, DBGrid, DBNavigator, IBStoredProc, IBStoredproc1.ParamByName, IBQuery1.ParamByName )
- Работа 4. Создание хранимой процедуры, русских заголовков у DBGrid(используется: IBConsole.exe, IBDatabase, IBTransaction, IBTable, DataSource, IBQuery, DBGrid, DBNavigator, IBQuery.ParamByName )
DELPHI — Часто задаваемые вопросы и ответы на них
001 Не могу сделать выборку по строковым полям!002 Конвертация DBF в DB
003 Суммирование по деревьям
004 SQL
005 У меня 3 пользователя по сетке используют одну и туже таблицу Paradox. Один из них внес изменение. Как правильно описать обнавление у всех остальных пользователей?
006 Иерархические структуры…
007 ADO и CORBA
008 Как сделать ProgressBar, отображающий ход события Query.Open?
009 Hе получается вставить в таблицу записи со строками на русском языке — некоторые буквы меняются на другие — что делать?
010 Почему при создании алиаса БД типа Microsoft Access 97 у меня BDE Administrator запрашивaет пароль, которого я, естественно, не знаю!
011 Быстрый доступ к нужной записи в таблице Paradox
012 Как по имени БазыДанных получить ссылку на компоненет TDataBase
013 Как создать таблицу базы данных, не используя Database Desktop?
014 Как послать на Delphi комманды SQL — DELETE и INSERT ?
015 ADO или RTF или ….
016 Русские слова в БД.
017 Вставить Combobox в DBGrid
018 [InterBase+Delphi] Refresh Query
019 Выдается такое сообщение: Error creating cursor handle.
020 База данных
021 Поиск в Большой БД:
022 Базы данных
023 Delphi and Outlook
024 Как создать базу данных Acceess во время выполнения
025 Как проверить инсталлирована ли BDE
026 Как получить список пользователей BDE
027 Как активизировать компоненты доступа к данным связанные с определенным TDatabase
028 Как полчить список связанных с TDatasource элементов управления
029 Мой запрос получает параметр. Проблема в том, что строка параметра содержит » (двойную кавычку), которая приводит к Runtime Error.
030 Вставить Combobox в DBGrid
031 Проблема совместимости BDE и ODBC
032 Проблема совместимости BDE и ODBC
033 Я делаю запрос по двум таблицам разных форматов, находящихся по разным псевдонимам. SELECT DB1.Column1, DB2.Column2 FROM :Alias1:DB1, :Alias2:DB2 но в результате получаю ошибку ‘неизвестный тип поля «Alias1:DB1″‘
034 Как узнать каталог, где находятся файлы базы данных, если знаем только алиас?
035 У меня есть TQuery и TDataSource. В свойстве SQL для TQuery я пишу SELECT * FROM dbo.AnyTable база данных на MS SQL Server. Когда я устанавливаю Active в True, то получаю ошибку: ‘Token not found. Token :dbo. line number:1’. Что не так?
036 Я безуспешно пытался использовать данные из Microsoft Access иначе, нежели просто с помощью TTable. Используя TQuery я могу только читать результат, но не могу редактировать. После «login screen» возникает сообщение типа ‘Passthrough SQL connection must be shared’.
037 Я хочу выполнить SQL-выражение и получить результат в свою переменную, что-то типаSELECT MAV(FieldA) FROM TableB INTO :VariableC;
038 Меня интересует возможность подсчета суммы по таблицам, которые уже находятся на форме.
039 Как узнать, что пользователь перешел на другую запись, например, в TDBGrid?
040 Как я могу выбрать на клиента только часть данных с определенной позиции из набора данных на сервере?
041 Каково определение IDAPI? Что такое SQL Links?
042 Hеобходим ли IDAPI для доступа к данным в Delphi? Можно ли включить IDAPI внутрь EXE, чтобы распространять программу без установки IDAPI на пользовательском компьютере?
043 Какой формат данных предпочесть в Delphi? dBase или Paradox?
044 Когда я применяю ApplyApdates на ClientDataSet, на серверной стороне не срабатывает событие OnNewRecord для оригинального набора данных. Как это исправить?
045 Предположим, что пользователь изменил строковое поле в Null. Как тогда я в обработчике OnUpdateData смогу определить, изменилось ли это поле на строку Null, или поле просто не было изменено?
046 Что я получаю от наличия ConstraintBroker (брокера ограничений)?
047 Нужны ли мне формы в сервере приложений?
048 Как достучаться до методов сервера приложений из TClientDataSet?
049 Как открыть запароленную таблицу Paradox 7 (*.db)???
050 Как я могу определить доступные сервера приложений на этой машине через Registry?
051 Как работать с новыми, своими интерфейсами в RemoteDateModule?
052 Я включил dbclient. dll в секцию «additional files» опций распространения по web, но этот файл никогда не загружается на клиент. Как это исправить?
053 Как мне упаковать Paradox или DBF таблицу?
054 Как передать UserName и Password в удаленный модуль данных (remote datamodule)?
055 Делаем ApplyUpdates. Если пpи insert(update) пpоизошла ошибка (поле null, сpаботал check, etc), то BDE всегда говоpит «General SQL Error» вместо ноpмального сообщения об ошибке 🙁 Без CU все ноpмально, pазумеется. Как боpоть этот баг?
056 После работы программы не сохраняются изменения в базе Paradox. Что делать?
057 Database Desktop показывает содержимое таблиц шрифтом без русских букв. Что делать?
058 Hе получается вставить в таблицу записи со строками на русском языке — некоторые буквы меняются на другие — что делать?
059 Hе получается открыть таблицу, созданную в InterBase с DEFAULT CHARACTER SET WIN1251. Оно говорит, что «WIN1251 undefined».
060 Как из таблицы ( например Names ) выбрать записи, значение поля, например Names, которых начинающется на какую-либо букву
061 Как пронумеровать записи в TTable
062 Каскадные Update’s в таблицах InterBase
063 Как пронумеровать выбранные записи в SQL запросе, RecNo не работает
064 Как получить имя файла и путь локальной таблицы?
065 Создание уникального поля
066 Как добавить Alias к BDE?
067 Проблема заключается в следующем: Delphi 3. Paradox. Есть база данных, работающая на локальной машине правильно. Как сделать, что б с этой же базой работали и другие машины из локальной сети? Пробовал выделить каталог с базами в сеть, на других машинах подключить этот каталог и прописать его в алиасах. При загрузке базы на разных машинах вроде все нормально, а как только начинаешь добавлять записи — все!!! — на каждой машине происходит добавление своей записи и внесенные изменения с другой машины не видны. Как мне добиться, что б как только одна машина внесла изменения (например добавила запись), вторая и все остальные увидели их? Пробовал в Table1 разрешить кэширование и использовать commitupdate, но результат тот же.
068 Как сделать, чтобы в DBGrid вместо цифр были соответствующие константы?
069 Почему при добавлении/изменении записей в некоторых запросах возникает ошибка Cannot modify a read-only dataset?
070 Не могли бы Вы мне подсказать, как заблокировать функцию вставки записи непосредственно в компоненте TDBGrid с сохранением всех остальных возможностей редактирования таблицы.
071 Database Desktop показывает содержимое таблиц шрифтом без русских букв. Что делать?
072 Как создать файл .db на основе имеющегося
073 Есть две одинаковые таблицы по ~10000 записей. Вопрос: Как написать SQL-команду, чтобы выбрать записи из таблицы_1, которых нет в таблице_2 (уникальное поле — ID)?
074 Как определить путь к БД из определенного алиаса
075 Как работать с выбранными в DBGrid записями
076 Как в Sybase SqlAnywhere в хранимой процедуре вызвать исключение, видимое для Delphi клиента
077 Что такое — Dirty Read, Committed Read, Repeatable Read
078 Как узнать текущую дату, время в Interbase
079 Что такое: UpdateMode = (upWhereAll, upWhereChanged, upWhereKeyOnly)
080 После работы программы не сохраняются изменения в базе Paradox. Что делать?
081 Как мне упаковать Paradox или DBF таблицу?
082 Как правильно соединяться с базой данных под Personal Oracle?
083 Вставить Combobox в DBGrid
084 Как программно перевести DBgrid в реим редактирования и установить курсор в окошке редактирования в требуемую позицию?
085 При использовании модулей доступа к BDE (DbiTypes, DbiProcs, DbiErrs), любая попытка вызвать процедуру abort выдает ошибку при компиляции при вызове метода abort «Statement expected, but expression of type ‘Integer’ found». Я пытался найти DbiTypes.pas, DbiProcs.pas и DbiErrs.pas чтобы разобраться но не нашел этих файлов. Где расположены эти файлы и как обойти ошибку?
086 Некоторые компоненты баз данных (и среди них TDBGrid) никак не меняют визуальных свойств, когда к ним отключен доступ (disabled). Как это изменить програмно?
087 Как поместить картинку из базы данных, например MsSQL, в компонент TIMAGE ?
088 32-битное соединение с сервером Sybase
089 ActiveControl имеет DataSet
090 ADO.OLEDB.JET — Access Violation при передаче неполного параметра
091 ASCII драйвер для CSV-файлов
092 ASCII-файл с использованием полей
093 BDE, ODBC и SQL Server 6.0
094 BDE32 приложения в ptp-сети
095 BLOBFIELD как BITMAP
096 Byte-поля Paradox
097 Crystal Reports 8.0 через API
098 Database Desktop показывает содержимое таблиц шрифтом без русских букв
099 DBASE — Индексы выражений
100 DBase и особые случаи BDE
101 DBFSeek и DBFLocate
102 Delphi и Oracle — вопросы и ответы
103 FastReport — Разработка кросс-платформенных отчетов
104 FindKey для нескольких полей
105 Interbase BLOB-поля
106 Local SQL и временная таблица
107 ODBC соединения
108 OLE и Interbase — прочесть и записать
109 Oracle — экспорт
110 Paradox в сети
111 Paradox и неверные индексы Win95
112 RecCount в таблицах ASCII
113 SQL — вложенные пробелы
114 SQL — использование функции SUBSTRING
115 SQL — сортировка вычисляемого поля
116 SQL — суммирование вычисляемого поля
117 SQL outer join
118 SQL в Delphi
119 SQL и расширенные символы
120 SQL-запросы в Delphi
121 Автоинкрементальные поля и Interbase 2
122 Автоинкрементальные поля и Interbase 3
123 Автоинкрементальные поля и Interbase
124 Автоматический logon к локальной InterBase
125 Архитектура BDE и его особенности при работе с SQL-серверами 1
126 Архитектура BDE и его особенности при работе с SQL-серверами 2
127 База данных методами Object Pascal
128 БД-дерево взаимоотношений
129 Библиотека для создания динамических SQL скриптов
130 Блокируется таблица в MS SQL Server
131 Быстрая обработка CSV файла
132 Быстрый доступ к ADO
133 Быстрый доступ к нужной записи в таблице Paradox
134 Быстрый поиск в базах данных
135 В InterBase при создании базы ввести параметр для поддержки русского языка
136 В режиме отладки приложения не разрешается открытие базы данных
137 Версия BDE
138 Внести изменения в набор данных и не потерять текушей позиции
139 Возврат курсора по умолчанию после выполнения запроса
140 Вопросы Delphi, BDE и SQL Links
141 Восстановление записи dBase
142 Вставка новой записи через буфер
143 Выводить текст с помощью DBMS_OUTPUT. PUT_LINE в режиме отладки
144 Вызов TUTILITY
145 Выполнение запросов к базе данных в фоне
146 Вычисление суммы полей
147 Генератор SQL-запросов Insert, Update
148 Демонстрация обратного вызова BDE
149 Динамическое создание полей 2
150 Динамическое создание полей
151 Динамическое создание таблицы и полей во время выполнения программы
152 Добавление ODBC-драйверов в Delphi
153 Добавление псевдонима с помощью функции DbiAddAlias
154 Добавляем пароль к таблице Paradox
155 Доступ к объекту Oracle
156 Доступ к таблицам Paradox на CD или c флагом только для чтения
157 Дубликат Paradox или dBase записи
158 Естественные ключи против искусственных ключей
159 Загрузка TMemoField в Memo
160 Загрузка изображений в Blob-поля
161 Задание псевдонима программным путем
162 Записываем в Access используя ADO
163 Запись nnn из nnn
164 Запись RecNo из RecordCount
165 Запись буфера BDE на диск
166 Запись и чтение чисел в Blob-поле
167 Запись картинки в ADO таблицу
168 Запись потока в BLOB-поле
169 Зарезервированные слова Local SQL
170 Из Paradox в Access при помощи ADO
171 Извлечение данных индекса таблицы
172 Извлечение изображения из BLOB-поля
173 Извлечение текста из TMemoField
174 Изменение данных в Delphi 2 (BDE)
175 Изменение каталога псевдонима во время выполнения приложения
176 Изменение конфигурации IDAPI
177 Изменение месторасположения .NET-файла во время работы
178 Изменение псевдонима во время выполнения программы
179 Изменить размер поля или его тип
180 Изображения и InterBase Blob-поля
181 Имитация псевдонима PdoxWIN PRIV
182 Импорт CSV ASCII
183 Импорт большого CSV файла
184 Имя SQL-таблицы
185 Имя пользователя Paradox
186 Индекс в другом каталоге
187 Интерактивные SQL-запросы
188 Информация о псевдонимах BDE
189 Использование BDE в сети
190 Использование нумерации в TFields
191 Использование таблиц Access
192 Использование таблиц Access2
193 Как активизировать компоненты доступа к данным связанные с определенным TDatabase
194 Как в Delphi сбросить кэш БД на диск
195 Как в Oracle создать sequence с некоторого номера
196 Как выяснить размер BLOB-поля
197 Как гарантированно сделать backup
198 Как добавить копию текущей записи
199 Как добиться верной работы фильтра на запросах и на неиндексированных таблицах
200 Как задать выражение по умолчанию для объекта TField
201 Как записать в BLOB поле большой текст (более 255) из Delphi
202 Как заставить BDE сохранять в БД поле времени с сотыми долями секунды
203 Как заставить DBGrid сортировать данные по щелчку на заголовке столбца
204 Как заставить Interbase принять COLLATE PXW_CYRL по умолчанию
205 Как заставить работать DB2 через протокол IPX
206 Как использовать базу данных BDE, не указывая ее имя
207 Как использовать свой диалог ввода пароля BDE
208 Как можно открыть отчёт (в режиме Print Preview а также Print Direct) в MS Access
209 Как напрямую добраться до Oracle
210 Как настроить Personal Oracle с русским языком на корректную работу с числами и BDE
211 Как открыть базу данных Microsoft Access . MDB в Delphi
212 Как открыть запароленную таблицу Paradox7 (.db)
213 Как открыть индексированную таблицу dBase, если отсутствует файл индекса
214 Как очистить таблицу, оставив только структуру
215 Как передать UserName и Password в удаленный модуль данных
216 Как перейти к указанной записи в БД
217 Как перекинуть все данные из DBF в DB
218 Как пересчитать все вычисляемые поля (Calculated fields) без переоткрытия TDataSet
219 Как по имени Базы Данных получить ссылку на компоненет TDataBase
220 Как по текущей ячейки получить наименование столбца
221 Как поймать свой RAISEERROR в Delphi
222 Как получить номер записи в dBASE или Paradox
223 Как получить результирующим полем разницу между хранимой датой и текущей датой
224 Как правильно соединяться с базой данных под Personal Oracle
225 Как при выполнении долгой операции в Oracle показать прогресс бар
226 Как проверить инсталлирована ли BDE
227 Как проверять корректность доступа к базе данных
228 Как программно изменить LangDriver для таблиц dBase и Paradox
229 Как программно паковать таблицы Paradox или восстанавливать индексы
230 Как программно создать Alias 2
231 Как программно создать Alias
232 Как проиндексировать программно базу
233 Как прочитать адресную книгу Outlook (MSOffice) из Delphi и занести данные в таблицу db
234 Как работать из Delphi напрямую с ADO
235 Как сделать откат внутри триггера
236 Как скопировать BDE таблицу
237 Как сменить пароль (master password) для таблицы Paradox
238 Как создать dBASE таблицу во время выполнения
239 Как создать базу данных Access во время выполнения
240 Как создать БД в кодировке CP1251
241 Как создать вычисляемые поля во время исполнения программы
242 Как создать поле Lookup во время выполнения приложения
243 Как создать таблицу базы данных, не используя Database Desktop 2
244 Как создать таблицу базы данных, не используя Database Desktop 3
245 Как создать таблицу базы данных, не используя Database Desktop 4
246 Как создать таблицу базы данных, не используя Database Desktop
247 Как создать таблицу в MS Access при помощи DAO
248 Как сохранить RTF в TBlobField
249 Как сохранить содержимое таблицы в текстовый файл
250 Как сравнить Bookmarks в таблице
251 Как удалить BDE таблицу
252 Как удобнее работать с динамически формируемыми запросами
253 Как узнать — установлена ли BDE 2
254 Как узнать — установлена ли BDE 3
255 Как узнать — установлена ли BDE
256 Как узнать перечень таблиц базы и количество записей в них (ADO)
257 Как узнать путь базы данных и её имя
258 Как узнать содержание активной записи в БД
259 Как узнать текущие дату и время в Interbase
260 Как узнать, доступен ли в сети сервер MS SQL
261 Как уменьшить дату в Paradox
262 Как упаковать базу (DBase, Paradox) в RunTime
263 Как установить BDE 2
264 Как установить BDE
265 Как установить клиента InterBase
266 Как экспортировать таблицу базы данных в ASCII-файл
267 Каким драйвером пользуется TDATABASE
268 Каскадированное удаление с проверкой целостности Paradox
269 Код определения возраста
270 Контекстное меню на основе базы данных
271 Конфигурирование ODBC и псевдонима
272 Конфигурирование ODBC
273 Конфликт IDAPI German и English
274 Копирование StringList в Memo-поле и обратно
275 Копирование записи в пределах одной и той же таблицы
276 Копирование записи из одной таблицы в другую
277 Копирование массива целочисленных чисел в Blob-поле
278 Копирование таблицы с помощью DBE
279 Корректное закрытие базы данных приложением Delphi
280 Кросс-таблица через pivot-таблицу
281 Курсоры в ADO
282 Локальные операторы языка SQL
283 Локальный общий доступ
284 Модуль данных для каждого MDIChild
285 Нарушение уникальности записи
286 Не получается вставить в таблицу записи со строками на русском языке
287 Не работающий SQL OR
288 Обмен данными между TMemoField и TMemo
289 Обновление вычисляемых полей
290 Обработка исключений EDBEngineError
291 Обработка исключения index not found
292 Обратные вызовы BDE32 для получения статуса операций
293 Общий доступ к данным с DBD и Paradox
294 Ограничения BDE
295 Ограничения IDAPI
296 Ограничения Paradox
297 Огромные LCK-файлы
298 Определение номера записи в таблице dBASE
299 Определение типа базы данных
300 Определение удаления записей в . DBF
301 Особенности использования BLOB полей в dbExpress на примере MySQL
302 Отображение всех псевдонимов в ComboBox
303 Отследить изменение данных
304 Очень медленный доступ к таблице при первом обращении
305 Очистка таблицы (с проверкой)
306 Ошибка BDE32 2104
307 Ошибка ODBC SQL Prepare
308 Ошибка создания дескриптора курсора
309 Ошибка чтения потока
310 Пакование таблиц dBASE 2
311 Пакование таблиц dBASE 3
312 Пакование таблиц dBASE 4
313 Пакование таблиц dBASE
314 Пакование таблиц Paradox и dBASE
315 Пакование таблицы
316 Параметризованные запросы
317 Передача параметров ADO запросу
318 Перемещение таблиц
319 Перехват исключений базы данных
320 Перехват ошибок DBEngine
321 Переход с Oracle на Interbase
322 Печать структуры таблицы Paradox
323 Подключиться к Personal Oracle с помощью BDE
324 Подскажите, как на Oracle поменять compatible
325 Поиск в базе данных ADO
326 Поиск в базе данных
327 Поиск записи в больших таблицах
328 Поиск записи с помощью TQuery 2
329 Поиск записи с помощью TQuery
330 Поиск значения при вводе 2
331 Поиск значения при вводе
332 Поиск по нескольким полям
333 Поиск существующей записи перед тем, как она будет вставлена
334 Поиск фраз и записей переменной длины
335 Показ меток удаленных записей в dBASE-файлах
336 Показ удаленных записей в таблице dBASE
337 Полный список полей таблицы
338 Получаем имена ODBC-источников
339 Получение дескриптора ODBC соединения
340 Получение информации о таблице
341 Получение информации об альясах
342 Получение пути псевдонима и таблицы 2
343 Получение пути псевдонима и таблицы 3
344 Получение пути псевдонима и таблицы 4
345 Получение пути псевдонима и таблицы
346 Получение физического пути к таблице
347 Помещение Memo-файла с ASCII-разделителем в Memo-поле таблицы
348 После работы программы не сохраняются изменения в базе Paradox
349 После снесения Interbase Server 5. 0 и желания поставить 5.1.1 вылетает ошибка — IBCheck
350 Почему DB2 ругается на Create Trigger
351 Почему не всегда верно обновляются IndexDefs по Update
352 Поясните, чем в Oracle являются понятия Instance, Database etc
353 Правила для SetRange
354 Предотвратить появление окошко ввода пароля для Paradox таблицы
355 Предохранение от автодобавления записи
356 При выполнении некоторых живых запросов, возвращающих единственную запись, BDE ругается
357 При использовании DOS DBF файлов — перекодировка между форматами
358 При обращении к memo-полю из BDE возникает ошибка Memo too large
359 При обращении клиента, к уже редактируемой записи другим клиентом, выдаётся сообщение
360 При попытке регистрации UDF возникает ошибка — udf not defined
361 Пример DbiAddFilter
362 Принцип и порядок работы с TUpdateSQL для работы с неживыми запросами
363 Причуда AddIndex
364 Проблема Lock File Has Grown Too Large
365 Проблема с AddIndex
366 Проблемы StoredProc у SQL server
367 Проверка изменения данных таблицы
368 Проверка наличия IDAPI
369 Проверяем установлена ли BDE
370 Проектирование баз данных
371 Производная TIntegerField
372 Прокрутка таблицы — хитрость PeekMessage
373 Простой пример работы с базой данных из DLL
374 Протокол блокировки BDE
375 Псевдоним на лету
376 Псевдонимы
377 Путь к локальной таблице
378 Работа с автоинкрементальными (AutoInc) полями
379 Работа с индексами Clipper-а
380 Работа с транзакциями
381 Разбивка строки на слова
382 Развертывание приложения, использующего dbExpress, на примере Delphi6
383 Различия TMemoField
384 Размеры полей таблицы Paradox
385 Распространение BDE
386 Решение проблемы BDE Index out of Date
387 Связать поле BLOB таблицы Paradox с компонентом TRichEdit через потоки
388 Связь BDE и Oracle
389 Связь с personal Oracle
390 Синтаксис функции DbiAddAlias
391 Синтах SQL-функции Substring
392 Сиротские Master-записи
393 Сканирование версии структуры базы данных
394 Создаём SystemDSN при помощи Delphi
395 Создание autoincrement поля
396 Создание DBExpress-Connection в Run-Time
397 Создание UDF для InterBase
398 Создание алиасов
399 Создание и удаление полей во время выполнения программы
400 Создание индекса во время выполнения программы
401 Создание индексного файла из Delphi
402 Создание кросс-таблицы
403 Создание новой таблицы на основе структуры другой таблицы
404 Создание таблицы FOXPRO
405 Создание таблицы Paradox
406 Создание таблицы по образу и подобию
407 Создание таблицы с автоинкрементальным полем
408 Создание уникального ID для новой записи
409 Создание уникального поля 2
410 Создание уникального поля
411 Создание уникального табличного индекса
412 Сортировка связанного списка
413 Сохранение TForm и ее свойств в BLOB-поле
414 Сохранение и чтение файлов в BLOB-полях
415 Сохранить в базе картинку формата JPEG
416 Список структуры полей таблицы
417 Стандартный запрос на удаление записи в таблице
418 Существует ли средство для вывода определения структуры таблицы
419 Тpансляция ошибок
420 Таблицы dBASE. Структура .DBF-файла
421 Таблицы в памяти
422 Текущий номер записи набора данных
423 Убывающий индекс
424 Убыстрить открытие таблицы Paradox
425 Удаление большого количества записей
426 Узнаём установленную версию ADO
427 Узнать существущие имена таблиц БД Access
428 Узнать физическое расположение локальной БД по Alias
429 Управление сетевыми каталогами (BDE)
430 Установка Interbase и добавление пользователя
431 Установка ODBC — Watcom SQL
432 Фильтр посредством логического поля
433 Формат и размер dBase-поля
434 Формат файла ASCII-схемы
435 Функции дат в SQL
436 Функции редактора полей во время выполнения программы
437 Функция Locate
438 Функция вычисления суммы полей
439 Функция для быстрого копирования таблиц вместе со всеми дополнительными файлами
440 Хитрость OnCalcFields
441 Читаем CSV текстовый файл в StringGrid
442 Читаем файл Access используя ADO
443 Чтение OLE из Blob поля Paradox
444 Чтение текста RichEdit из базы данных
445 Что я получаю от наличия ConstraintBroker
446 Экспорт из Paradox в ASCII файл с кодовой страницей 852
Borland Delphi как средство разработки масштабируемых приложений | Системы управления базами данных
С.В. Орлик
Группа Пользователей Delphi, редактор русскоязычного электронного издания Delphi Interactive Journal. FidoNet 2:5020/87.46
1.
Проблема масштабируемости приложений.Одной из наиболее «горячих» тем последних лет в области компьютерной обработки информации и баз данных (БД) стала проблема масштабируемости1) приложений, работающих с БД.
«Масштабируемость» — способность системы адаптироваться к расширению предъявляемых к ней требований и возрастанию объемов решаемых ею задач. В применении к приложениям, работающим с БД, понятие масштабируемости подразумевает возможность перехода на качественно более мощные СУБД с минимумом изменений в самих приложениях. В подавляющем большинстве случаев это перенос desktop-приложений в архитектуру клиент-сервер (Upsizing). В силу отличия традиционных концепций desktop-БД и серверных-БД этот процесс вызывает множество споров и вопросов. В чем же состоят основные проблемы переноса приложений в архитектуру клиент-сервер ?
В то время как desktop-БД подразумевают отношения между «записями» и «полями», основой серверной концепции является «множество» данных (set-oriented databases). Отсутствие единого структурированного языка построениия запросов в одном случае, и навигационных методов доступа, в другом, сильно усложняют upsizing. А если вспомнить о том, что desktop-БД не имеют средств поддержания целостности данных (в несколько меньшей степени это относится к Paradox), а тем более возможностей гибких средств управления полномочиями пользователей (security access level), становится понятным, что идеология desktop-приложений коренным образом отличается от идеологии клиент-серверных приложений.
Понятие масштабируемости тесно связано и со свойством интероперабельности. Что же это такое в применении к приложениям БД ? Интероперабельность таких систем предполагает работу с гетерогенными данными, то есть с данными, хранящимися в разных форматах или на разных SQL-серверах. Причем данные необязательно должны храниться в традиционных БД (примером может служить оболочка Lotus Notes или специализированные геоинформационные системы).
Становится очевидным, что масштабирование (в широком смысле слова) большинства существующих desktop-систем представляет отнюдь не тривиальную задачу.
Решению этих проблем посвящена технология, предлагаемая фирмой Borland. Ниже мы рассмотрим средство создания Windows-приложений — Borland Delphi.
Прежде чем говорить о создании frontend-приложений2) в Delphi, кратко познакомимся с общими возможностями этого продукта без привязки к базам данных.
2. Подход Delphi к разработке Windows-приложений
Borland Delphi относится к классу RAD-систем (Rapid Application Development — среда быстрой разработки приложений).В основе этого продукта лежит компилятор с языка третьего поколения Object Pascal (семейство языков программирования Turbo Pascal). Визуальные средства программирования «two-way tools»3) позволяют, в свою очередь, создать работающее многофункциональное приложение, практически не написав ни единой строки кода.
Ядром визуальных средств программирования Delphi является Visual Component Library (VCL) — объектно-ориентированная библиотека компонентов ( их в стандартной поставке более 75 ), предназначенная для создания пользовательского интерфейса и доступа к системным ресурсам как операционной системы (DOS), так и графической оболочки (Windows), а также для работы с БД.
Рассмотрим особенности процесса разработки приложения в Delphi.
«Компонентная» архитектура приложений Delphi предоставляет интуитивно понятный подход к программированию в Windows. Этот подход, в первую очередь, заключается в визуальном конструировании GUI-форм4) приложения посредством помещения в формы тех или иных системных и интерфейсных объектов ( из так называемой «палитры компонент» ) и установке их свойств и поведения. Те читатели, которые хотя бы раз запускали Borland dBase for Windows или Paradox for Windows, увидят в Delphi знакомое средство — Object Inspector. Этот инструмент позволяет несколькими нажатиями кнопки мыши установить или изменить основные свойства компонент, а также привязать к событиям, на которые может реагировать выбранный объект, код, выполняющий те или иные действия. Компонентная архитектура, основывающаяся на объектно-ориентированном подходе, является одним из решений проблемы повторного использования кода.
Любую форму или все приложение можно сохранить в качестве шаблона (template) и повторно использовать в новых проектах. Для этого Вы сможете воспользоваться так называемой «галереей» Delphi (см. Рис. 1)
Рисунок 1.
Экономии времени при разработке приложения можно достичь использованием так называемых «экспертов». «Эксперт» представляет собой встраиваемый в среду Delphi программный блок (например, реализованный в виде DLL — библиотеки динамической компоновки Windows), который, после диалога с разработчиком, генерирует исходный код и формы уже с развитыми функциональными возможностями. Для создания новых «экспертов» Delphi предоставляет ряд модулей VCL (см. Рис. 2)
Рисунок 2.
В процессе разработки интерфейса и наращивания функциональности приложения программист может, не выходя из среды Delphi, проверять синтаксис исходных текстов и проводить их компиляцию и отладку.
Для просмотра иерархии классов, получения информации о модулях, а также объявлениях типов, констант, переменных и функций предназначено средство визуальной среды разработки Delphi — Object Browser(см. Рис. 3).
Рисунок 3.
Безусловно стоит упомянуть и о поддержке со стороны Delphi таких средств групповой разработки как, например, Intersolv PVCS (версии 5.1).
Такая интеграция с внешними продуктами может заинтересовать тех читателей, которые занимаются созданием крупных программных комплексов.
Так как речь идет о Delphi как о профессиональном инструменте, следует отметить несколько важных особенностей языка Object Pascal.
В этом языке реализован ряд расширений основных объектно-ориентированных признаков — инкапсуляции и полиморфизма. С введением понятия свойства (property) стала стираться грань между данными объекта и методами доступа к этим данным. Поля процедурного типа используются для динамического изменения поведения экземпляров объектов на этапе выполнения приложения. Механизм RTTI (RunTime Type Information) и функции классов позволяют программисту более гибко определять параметры объектов.
Возможности создания новых визуальных компонент за счет расширения стандартной иерархии классов, наряду со средствами настройки палитры компонент, существенно повышают производительность работы в Delphi (в варианте Delphi Client/Server большинство модулей VCL представлено в исходных текстах).
Объектно-ориентированные средства обработки исключительных ситуаций (exception) крайне важны для тех приложений, которые особенно «критичны» к сбоям. К таким системам как раз и относятся приложения для работы с БД.
3. Borland Database Engine — инструмент доступа к данным
В основе взаимодействия Delphi с БД лежит Borland Database Engine. Этот инструмент представляет из себя набор функций для работы с БД различных форматов — IDAPI, драйверы наиболее распространенных форматов БД и утилиту настройки драйверов и псевдонимов. Остановимся на этих составных частях BDE более подробно. (см. Рис. 4)
Рисунок 4.
IDAPI (Integrated Database Application Program Interface) насчитывает более 150 функций для доступа к БД. Механизм, лежащий в основе этого API, позволяет единообразно работать как с локальными, так и с удаленными (SQL) данными. В основе этого механизма лежит понятие «курсора». Курсоры позволяют, с одной стороны, работать с удаленными данными, используя навигационные методы, с другой — обращаться к локальным данным через SQL. За счет такой идеологии стираются принципиальные различия в построении desktop-приложений и клиентских приложений. Как следствие, разработчики, использующие IDAPI для доступа к данным, могут позволить себе в одном и том же приложении обращаться к разным форматам данных, формируя «гетерогенные» запросы (heterogeneous joins).
Пример.
Следующее SQL-выражение показывает как связать три таблицы разных форматов (Paradox, Interbase и Sybase) между собой:
select distinct c. cust_no, c.state, o.order_no, i.price from ":Local_alias:customer.db" c, :IB_alias:order o, :SYB_alias:lineitem i where o.cust_no = c.cust_no and o.oder_no = i.order_no
IDAPI не ограничен минимальным набором функций. Общее для разных БД функциональное подмножество расширено в соответствии с возможностями и особенностями каждого из доступных форматов, как локальных, так и удаленных.
Набор функций IDAPI включает в себя также, средства вторичного уточнения результатов запросов — фильтры. Фильтры BDE позволяют динамически ограничивать объемы информации, связанные с курсорами. Функционируя на уровне клиентского приложения, фильтры позволяют уменьшить сетевой траффик при работе с удаленными данными, так как вся информация о фильтруемых данных уже связана с соответствующим курсором клиентского приложения. Фильтры IDAPI поддерживают сложные логические условия, построенные в виде дерева триад5). (см. Рис. 5)
Рисунок 5.
Логика построения фильтра IDAPI
Для реализации единообразия доступа к данным, вне зависимости от их формата, BDE работает со всеми данными через так называемые «драйверы». Разработчику приложений не требуется знание механизма взаимодействия динамических библиотек IDAPI с драйверами. Достаточно лишь уметь их настраивать с помощью утилиты настройки BDE.
Утилита настройки — BDE Configuration Utility — позволяет сконфигурировать такие параметры драйверов, как используемый национальный языковой драйвер, режим разделения при совместном доступе к данным, представления даты, времени и чисел, псевдонимы соединений и многое другое (см. Рис. 6).
Рисунок 6.
Важной составной частью BDE является технология Idapter, разработанная Borland совместно с компанией Q+E Software. Она заключается в трансляции IDAPI-вызовов в вызовы стандартных методов интерфейса ODBC. Это позволяет существенно расширить ряд доступных СУБД.
В BDE поддерживаются два языка запросов — SQL и QBE, опять-таки для всех форматов БД, включая ODBC-драйверы. Кроме того, IDAPI содержит функции для реструктуризации данных.
Стоит упомянуть, что BDE как основа взаимодействия с данными, кроме Delphi, используется в Borland Paradox for Windows и dBase for Windows.
4. Архитектура database — компонент Delphi
Доступ к базам данных из инструментов разработки Borland не ограничивается набором API-функций. Напротив, именно объектно-ориентированная надстройка над IDAPI является основой взаимодействия клиентских приложений с базами данных. В Delphi такой надстройкой являются Visual Data Objects (VDO) — часть VCL, ориентированная на работу с БД.
В соответствии с логикой Visual Component Library компоненты VDO (их более 25) разделены на две основные группы: Data Access components и Data Control components. Как следует из названий этих групп, первая из них является «системной», то есть компоненты, входящие в нее отвечают за организацию доступа к БД, вторая группа отвечает за ввод и отображение данных.
Прежде чем говорить о принципах использования VDO, перечислим основные компоненты VDO.
Компоненты доступа к данным:
- TDatabase — «база данных»;
- TTable — таблица БД;
- TQuery — SQL-запрос;
- TStoredProc — хранимая процедура;
- TDataSource — источник данных;
- TReport — «отчет», взаимодействующий с run-time ReportSmith (см. ниже) через механизм DDE.
Визуальные компоненты:
- TDBNavigator — компонента предоставляющая возможности навигации по «множеству данных»;
- TDBEdit, TDBGrid, TDBListBox, TDBComboBox, TDBImage и др. — наследники стандартных и расширенных интерфейсных элементов Windows (в иерархии VCL), которые ориентированы на работу с БД.
Компоненты TTable и TQuery не отображаются во время выполнения приложения, но они обеспечивают связь с БД через BDE, являясь, по идеологии VDO, рабочим «множеством данных» (dataset). В иерархии классов VDO эти компоненты, вместе с TStoredProc, имеют общего предка — TDBDataSet — «множество данных».
Отображаемые компоненты (Data Control) ссылочно (через свойства экземпляров) связаны с TTable и TQuery и так называемым «источником данных» — TDataSource. Такая инфраструктура стирает различия между работой пользователя с таблицей БД и результатами запроса, не требуя дополнительного программирования передачи данных между интерфейсными элементами и БД.
Интересной особенностью среды визуальной разработки Delphi является возможность работы с «живыми» данными (live-data). Такая возможность подразумевает отображение реальных данных в Data Controls еще на этапе конструирования форм (design-time). Такое свойство среды Delphi облегчает работу по размещению видимых компонентов на форме, в зависимости от формата отображения данных, так как программист, не компилируя и не запуская приложение, может увидеть окончательный результат.
В остальном идеология работы с VDO-компонентами ни чем не отличается от обычных компонентов VCL Delphi.
5. Дополнительные инструментальные средства, входящие в Delphi
Как любое развитое средство разработки приложений, Delphi, кроме среды разработчика, включает в себя и другие инструменты. Остановимся на тех из них, которые связаны с базами данных6).
SQL Links (*) — набор IDAPI-драйверов для связи приложений с удаленными SQL-серверами БД, например Oracle, Sybase,InterBase и Informix.
Генератор отчетов ReportSmith, в зависимости от варианта (Delphi for Windows или Delphi Client/Server) предоставляет соответствующие возможности доступа к данным и обеспечивает интерфейс для создания отчетов с использованием «live-data conception» (просмотр реальной информации из БД на этапе конструирования отчета). Запросы, перекрестные таблицы, графики, шаблоны и мн. др. — все это без ограничений объема получаемого отчета.
ReportSmith Run-Time — среда для доступа к отчетам из приложений, написанных на Delphi, реализованная в виде Windows MDI-приложения. Взаимодействие с приложениями осуществляется через DDE-обмен с приложением (см. выше TReport — Data Access Component).
Local InterBase Server представляет из себя однопользовательский, работающий в среде MS Windows, «desktop»-SQL-сервер, для построения и тестирования Delphi- приложений с последующим масштабированием их на промышленные БД, например Oracle, Sybase, Informix или Interbase. Обладает практически всеми возможностями реального InterBase Workgroup Server 4.0, включая перенос созданных БД на промышленный вариант сервера (см. статью П. Красюка «Borland InterBase …» , СУБД N 2/1995).
Windows ISQL (WinISQL)-интерактивный SQL. Средство, позволяющее строить и выполнять с клиентских, Windows-рабочих мест SQL-запросы к локальному и удаленному InterBase-серверу. С помощью WinISQL вы можете, без написания специальных SQL-скриптов, получить полную информацию по метаданным БД, например триггерам, доменам, хранимым процедурам и т.п.
Interbase Server Manager — клиентское Windows-приложение, предназначенное для администрирования баз данных Interbase 4.0, как локальных, так и серверных.
Database Expert — «эксперт» Delphi, облегчающий построение скелета приложения, работающего с БД.
Visual Query Builder (*) — средство среды Delphi, позволяющее без знания SQL визуально строить сложные запросы к БД, с последующей генерацией текста запроса на SQL.
Database Desktop (DBD), являясь «минимальным» ядром Borland Paradox for Windows, предоставляет возможности по созданию, изменению структуры, построению запросов к удаленным и локальным данным.
6. Delphi: от настольных систем — к архитектуре клиент-сервер
В большинстве случаев Delphi-приложения, созданные для работы с локальными данными, могут получить доступ к данным на удаленном сервере, с минимумом изменений самого приложения. Если конгруэнтный (сравнимый по структуре таблиц) источник данных (data source) настроен на SQL-сервер, вы можете «перенаправить» приложение, имевшее раньше доступ к локальным данным, всего лишь изменив свойство DatabaseName компонент TTable или TQuery. А если, разрабатывая desktop-приложение, вы планировали в перспективе переход на более высокий уровень технологии (upsizing), затраты на перенос системы в архитектуру клиент-сервер могут заключаться только в настройке псевдонимов соединений BDE.
Следует, однако, понимать, что при переходе к технологии клиент-сервер, вы захотите использовать все предоставляемые этой технологией возможности, сложив с клиентских приложений на сервер БД часть функциональности, отвечающую за поддержание целостности данных (триггеры), часто повторяющихся вычислений (хранимые процедуры) и т. п. В этом случае, масштабирование7) системы повлечет за собой только уменьшение исходного кода. Хотя очевидно, что там где больше возможностей, еще больше запросов (уже не в смысле SQL-выражений) …
1) Так как русскоязычная терминолошия в этой обдасти компьютерных технологий еще не сложилась окончательно в статье будут использоваться также англоязычные термины.
2) «Frontend» (в отличие от desktop-приложений) — клиентские приложения, работающие с данными в архитектуре клиент-сервер
3) «two-way tools» — визуальные средства программирования, позволяющие синхронизировать процесс конструирования интерфейсных форм и изменение исходных текстов разрабатываемой программы.
4) GUI — Graphic User Interface, стандарт польовательского интерфейса в оконных графических средах.
5) Триады — понятие теории синтаксического анализа. Под триадой подразумевается конструкция: два параметра и их отношение. В конструкции «CustomerNo» > 2000″ параметрами являются «CustomerNo» и константа «2000», а отношением — операция сравнения «>»
6) В данном случае рассматривается Delphi в варианте Client/Server. Инструменты, не входящие в desktop-версию Delphi for Windows, помечены (*).
7) В данном контексте под «масштабированием» понимаестя как-таковой процессс переноса приложений, работающих с локальными данными, в архитектуру клиент-сервер.
Borland Delphi как средство разработки масштабируемых приложений
Поделитесь материалом с коллегами и друзьями
IBExpert создание и регистрация БД Firebird
Добавил admin | Категория Заметки про IBExpert, Firebird | 14 Декабря 2013
Система для управления базами данных, explorer для Firebird, Interbase и Yaffil. IBExpert является мощным инструментом для проектирования и мониторинга работы Баз данных. Официальный сайт проекта. и так, скачав и установив систему мы должны позаботиться еще о сервере баз данных, будем рассматривать Firebird так как из всех перечисленных это самая перспективная БД. Скачиваем Firebird, устанавливаем. Теперь мы можем начать создавать свою БД и работать с ней. Запускаем IBExpert при первом запуске у нас появляется два окна, окно меню и окно explorer это крайне не удобно поэтому делаем так
В открывшимся окне выставляем параметры как на картинке ниже
Перезапускаем среду и видим следующие
Среда на русском, готова к использованию, идем в База данных – Создать базу
Появляется окно создания базы данных
Нам нужно указать сервер, так как мы создаем БД у себя на ПК мы выбираем параметр – локальный. Указываем файл БД у меня это D:\myDB\test.fdb, test.fdb название Вашей БД. Проверяем что бы клиентская библиотека сервера была – dgs32.dll. имя пользователя, по умолчанию войдем под супер пользователем БД – SYSDBA, пароль – masterkey. Размер страниц БД выбираем 16384 (предложенный по умолчанию) для начального знакомства нам этого вполне хватит. Указываем кодировку, IBExpert по умолчанию использует кодировку WIN1251 поэтому следует указать ее, и в дальнейшем при переносе БД с локального ПК на сервер следует указывать кодировку для подключения WIN1251. Тут же стоит отметить что при подключении к БД с этой кодировкой поля в UNICODE_FSS или UTF8 будут доступны. WIN1251 это только для правильного подключения не более так что замарачиваться тут не стоит. Если отметить галочку «зарегистрировать после создания» то создаваемая БД будет зарегестрирована в explorerе. Поставим галочку и нажмем ОК. БД создана появится окно регистрации БД
При регистрации указываем версию сервера БД, для нашего примера этого достаточно так как остальные обязательные поля заполнены автоматически. Можно еще указать описание БД я написал – тестовая БД. Так же проверьте путь к созданной БД. Если все правильно жмем проверка коннекта
Проверка коннекта прошла успешно, жмем Cancel и в окне регистрации БД жмем Register
БД успешно создана и зарегистрирована в IBExpert. Для того что бы подключиться к созданной БД нужно дваджы щелкнуть левой кнопкой мыши по созданной БД
БД откроется в иерархической структуре будут представлены:
— Домены
— Таблицы
— Представления
— Процедуры
— Триггеры
— Генераторы
— Исключения
— Функции
— Роли
— Индексы
— scripts
По умолчанию у нас уже есть две функции и одна роль, это системные функции они нам пока не понадобятся, на этом знакомство с IBExpert подошло к концу, остальные статьи вы можете найти в этом разделе.
Новая база данных Access из Delphi
Страница 1: Delphi, ADOX и ADOExpress против MS Access.
Глава 11 этого курса (Бесплатный курс по базам данных Delphi для начинающих — основное внимание уделяется методам ADO) включает компонент ADOCommand, который чаще всего используется для выполнения команд SQL языка определения данных (DDL). Мы представили способ переноса ваших существующих таблиц Paradox / BDE в MS Access. Однако несколько вопросов остались без ответа: как создать пустую базу данных Access, как добавить индекс в существующую таблицу, как обеспечить ссылочную целостность,
Подробнее об этой функции
• Страница 2: Создать. База данных
Присоединяйтесь к обсуждению
«Публикуйте свои мнения и комментарии к этой главе бесплатного курса программирования баз данных Delphi» Обсудить!
Связанные ресурсы
- бесплатный курс DB.TOC
- Запросы с ADO
- a href = «http://delphi.about.com/library/weekly/aa060199.htm»> SQL с Delphi
- a href = «http://delphi.about.com/cs/database/index.htm»> другие статьи о базе данных
объединить два стола с
- a href = «http: // delphi.about.com/cs/beginners/»> Начинающие здесь
- a href = «http://delphi.about.com/cs/comoleactivex/»> COM / OLE / ActiveX
База данных
Многие участники этого курса жаловались, что на их компьютере не установлен MS Access, и что они не могут создать образец базы данных (aboutdelphi.mdb), который представлен в первой главе и используется в ходе этого курса.
Распределенный вычис.
В этой главе мы снова сосредоточимся на TADOCommand и
Программирование игр Графика Интернет / Интранет Математика Мультимедиа Delphi Pascal / IDE Screen saver dev.VCL с использованием VCL Write / Enhance Web Services Windows / Shell / API Kylix (D в Linux)
Стандарты кодирования Книги / публикации Dev. Утилиты Часто задаваемые вопросы / Советы / Уловки Проекты бесплатного кода Юмор и забавные значки и символы Работа и предложения по обучению / CD / Видео VCL и инструменты
Предметная библиотека
Все статьи по теме
ADOX, чтобы увидеть, как настроить пустую базу данных MS Access «из ничего».
ADOX
Как указано в упомянутой главе, расширения ADO для языка определения данных и безопасности являются расширением объектов и модели программирования ADO.ADOX предоставляет разработчикам богатый набор инструментов для получения доступа к структуре, модели безопасности и процедурам, хранящимся в базе данных.
Несмотря на то, что ADOX является частью ADO, Delphi не включает его в ADOExpress. Чтобы использовать ADOX с Delphi, вы должны установить ссылку на библиотеку типов ADOX. Описание библиотеки ADOX: «Microsoft ADO Ext. Для DDL и безопасности». Имя файла библиотеки ADOX — Msadox.dll. Вам нужно будет импортировать библиотеку ADOX в среду IDE.
Чтобы использовать ADOX в Delphi, вы должны установить ссылку на библиотеку типов ADOX.
- Выбрать проект | Библиотека типов импорта
- Выберите «Microsoft ADO Ext 2.x для DDL и безопасности (версия 2.x)».
- Измените «TTable» на «TADOXTable» 3b. Измените «TColumn» на «TADOXColumn» 3c. Измените «TIndex» на «TADOXIndex» 3d. Измените «TKey» на «TADOXKey» 3e. Измените «TGroup» на «TADOXGroup» 3f. Измените «TUser» на «TADOXUser» 3g. Измените «TCatalog» на «TADOXCatalog»
- Нажать кнопку Установить (перекомпоновка пакетов)
- Один раз нажмите ОК и дважды Да
- файл | Закрыть все | Да
Этот процесс создает ADOX_TLB.pas и помещает его имя в раздел uses текущего проекта. Этот процесс также помещает 7 новых компонентов на страницу ActiveX палитры компонентов. Очень важно изменить имена классов, как описано в шаге 3. Если вы опустите эту часть, Delphi будет жаловаться, что класс TTable уже определен — это потому, что VCL уже имеет версию компонента TTable для BDE.
aboutdelphi.mdb
Прежде чем мы продолжим, вы должны вспомнить, что в нашем примере базы данных aboutdelphi.mdb есть три таблицы: Application, Authors и Types.И авторы, и типы являются дочерними таблицами для приложений. И у авторов, и у типов есть первичный индекс.
Будьте в курсе!
Подпишитесь на нашу рассылку новостей.
Введите адрес электронной почты
Реклама
> Бесплатный кредитный отчет
> Бесплатные экстрасенсы
Следующая страница> Создать базу данных из Delphi> Страница 1, 2
Курс DB Следующая глава >>
>> Графики с базами данных
Вся графика (если есть) в этой функции создана Зарко Гайичем.
Подробнее Delph
- Изучите другой распорядок каждый день — RTL Quick Reference.
- Загрузите бесплатные приложения и компоненты с исходным кодом.
- Разговор о программировании на Delphi в реальном времени. Начни чат прямо сейчас!
- Ссылка на сайт программирования Delphi со своих веб-страниц.
- Учебники, статьи, техн. советы по дате: 2001120001199
8 или по ТЕМЕ.
- СЛЕДУЮЩАЯ СТАТЬЯ: более мощная форма Delphi.
Возня с процессом создания объекта формы, или как изменить стиль окна по умолчанию, когда оно создается, в соответствии с вашими конкретными потребностями.
Будьте в курсе всего нового и интересного о Delphi (бесплатно).
Подпишитесь на информационный бюллетень о программировании
Имя Электронная почта подписки
Есть код, которым можно поделиться? Есть вопрос? Нужна помощь?
Недавние обсуждения_
Программирование на Delphi
Присоединяйтесь к этим обсуждениям на форуме
Извлечение цифрового звука с компакт-диска Недостатки Delphi по сравнению с VS.Net Сохранение приложения всегда наверху Проблема с adoblob в Delphi7 Поиск в текстовом файле или широкой строке
Отправить эту страницу по электронной почте!
Прочтите здесь: Узнайте больше о сети
Была ли эта статья полезной?
Delphi — Примеры проектов SQLite
Я изучаю SQLite в Delphi.Есть несколько примеров приложений SQLite, которые поставляются с Delphi, если вы выбрали установку примеров во время установки. Я составил список доступных образцов SQLite. Стандартный путь к файлу примеров находится здесь:
.. \ Studio \ 20.0 \ Samples \ Object Pascal \ Database \ FireDAC \ Samples \
FireDAC.SQLiteIniFile Demo Sample
В этом примере используется FireDAC для подключения к базе данных SQLite, которая имитирует структуру и операции INI-файла.
Аддон \ SQLiteIniFile \ Demo \ SQLiteIniDemo. dproj
FireDAC.TFDLocalSQL MegaFMX Пример
В этом примере показаны различные приложения TFDLocalSQL.
Comp Layer \ TFDLocalSQL \ MegaFMX \ LSQLMega.dproj FireDAC.SQLite Encryption Sample
В этом примере показано, как зашифровать / расшифровать базу данных SQLite.
DBMS Specific \ SQLite \ Encryption \ SQLite_Encrypt.dproj Controlling Database Access Rights
SQLite — это встроенная СУБД .Это подразумевает, что это один пользователь , СУБД и не нуждается в таких понятиях, как пользователь, , права доступа, и так далее. Тем не менее, некоторые приложения могут извлечь выгоду из управления правами доступа , например:
- Приложение может ограничивать права в зависимости от лицензии конечного пользователя. Демо-лицензия означает меньше возможностей, полная лицензия предоставляет все возможности.
- Многоуровневый доступ к данным Инфраструктура может использовать собственную концепцию пользователя и управлять правами доступа с использованием некоторого общего подхода.
DBMS Specific \ SQLite \ OnAuthorize \ SQLite_OnAuthorize.dpr oj Перехват обновлений базы данных
SQLite предоставляет уникальный API , позволяющий отслеживать все обновления базы данных.Эту функцию можно использовать, например, для регистрации всех обновлений в DB . Для работы с этим API приложение Delphi должно установить обработчик событий OnUpdate объекта TSQLiteDatabase, который является объектом-оболочкой подключения к базе данных. Перехватить это событие после открытия соединения с базой данных.
DBMS Specific \ SQLite \ OnUpdate \ SQLite_OnUpdate.dproj Custom Collations
SQLite хранит и обрабатывает все символьные данные либо в UTF8, либо в UTF16, в зависимости от параметра подключения OpenMode.Когда SQLite нужно сравнить или отсортировать символьные данные, он должен знать, какие правила для этого использовать. Правила известны как сопоставление.
DBMS Specific \ SQLite \ UserCollation \ SQLite_UserColl.dpro j Пользовательские функции
SQLite не поддерживает концепцию хранимых процедур или функций, поскольку позволяет использовать среду основного языка для расширения функциональных возможностей движка. SQLite позволяет регистрировать функции основного языка в механизме SQLite и использовать их в командах SQL .FireDAC упрощает это, вводя компонент TFDSQLiteFunction.
DBMS Specific \ SQLite \ UserFunc \ SQLite_UserFunc.dproj Модуль SQLite R * Tree
R-Tree — это специальный индекс, предназначенный для выполнения запросов диапазона. R-деревья чаще всего используются в геопространственных системах, где каждая запись представляет собой прямоугольник с минимальными и максимальными координатами X и Y. Учитывая прямоугольник запроса , R-Tree может быстро найти все записи, содержащиеся в прямоугольнике запроса или перекрывающие прямоугольник запроса .
Эта идея легко расширяется до трех измерений для использования в системах САПР. R-деревья также находят применение при поиске диапазона во временной области. Например, предположим, что база данных записывает время начала и окончания для большого количества событий. R-Tree может быстро найти все события, которые были активны в любое время в течение заданного временного интервала, или все события, которые начались в течение определенного временного интервала, или все события, которые и начались, и закончились в течение данного временного интервала. И так далее.
СУБД Конкретный \ SQLite \ UserRTree \ SQLite_UserRTree.dproj
Название: SQLite
Краткое описание: В этом фрагменте показано, как заполнить список из базы данных SQLite с помощью FireDAC и LiveBindings. См. Раздел «Доступ к базе данных» в разделе «Мобильные учебники» документации для получения дополнительной информации и требований к лицензированию.
Поддерживаемые платформы: iOS, Android
.. \ Mobile Snippets \ FireDACSQLite \ FireDAC_SQLite.dproj
Enjoy
Semper Fi,
Gunny Mike
Weiterlesen…
CleverComponents / Database-Comparer-Examples: Эти примеры проектов предназначены для демонстрации функциональности компонентов Database Comparer VCL.
GitHub — CleverComponents / Database-Comparer-Examples: эти примеры проектов предназначены для демонстрации функциональности компонентов Database Comparer VCL.Эти примеры проектов предназначены для демонстрации функциональности компонентов Database Comparer VCL.
Файлы
Постоянная ссылка Не удалось загрузить последнюю информацию о фиксации.Тип
Имя
Последнее сообщение фиксации
Время фиксации
Эти примеры проектов представляют собой простые демонстрации и ни в коем случае не полные приложения.
Они предназначены для демонстрации использования компонентов VCL Database Comparer в вашем коде.
Демонстрационные примеры VCL Database Comparer для Delphi
Название программы | Описание |
---|---|
Средство сравнения баз данных (ADO) | Сравнивает, синхронизирует и обновляет структуру баз данных. Подключается к базе данных MSSQL через ADO. |
Средство сравнения баз данных (FIBPlus) | Сравнивает, синхронизирует и обновляет структуру баз данных.Подключается к базе данных IB через FIBPlus. Эта демонстрация недоступна, начиная с RAD Studio 10 Seattle. |
Средство сравнения баз данных (FireDAC) | Сравнивает, синхронизирует и обновляет структуру баз данных и данные таблиц. Подключается к базе данных Firebird 3.0 через FireDAC. Доступно начиная с RAD Studio XE8. |
Средство сравнения баз данных (IB Express) | Сравнивает, синхронизирует и обновляет структуру баз данных и данные таблиц. Подключается к базе данных IB через IBExpress. |
Извлечь метаданные | Извлекает метаданные базы данных и отображает сценарий. |
Выполнить локальный сценарий SQL | Загружает и выполняет сценарий LocalSQL (BDE) для локальных баз данных (Paradox, dBASE). Эта демонстрация недоступна, начиная с RAD Studio XE7. |
Средство сравнения SQL-скриптов | Сравнивает два сценария базы данных и отображает полученный сценарий обновления. |
Устройство сравнения табличных данных | Сравнивает и синхронизирует данные между двумя таблицами базы данных.Эта демонстрация недоступна, начиная с RAD Studio XE7. Пожалуйста, проверьте демонстрации Database Comparer (FireDAC) и Database Comparer (IB Express). |
Data Comparer Custom SQL | Показывает, как сравнивать и синхронизировать две таблицы БД Firebird с помощью пользовательского сценария SQL для выборки записей. Подключение осуществляется через библиотеку FireDAC. |
Database Comparer VCL Demos for C ++ Builder
Около
Эти примеры проектов предназначены для демонстрации функциональности компонентов Database Comparer VCL.
Ресурсы
Лицензия
Вы не можете выполнить это действие в настоящее время. Вы вошли в систему с другой вкладкой или окном. Перезагрузите, чтобы обновить сеанс. Вы вышли из системы на другой вкладке или в другом окне. Перезагрузите, чтобы обновить сеанс.компонентов базы данных delphi
Когда пользователь изменяет поле, компонент должен учитывать, что имя поля может быть недопустимым; для проверки этого условия компонент использует блок try / finally: элемент управления выполняет тот же тест, когда набор данных включен или отключен: наиболее интересная часть кода этого компонента связана с его пользовательским интерфейсом. Закрытие — это вопрос освобождения списка, количество записей в котором соответствует размеру списка: единственный другой метод сохраняет данные текущей записи в буфере записи, включая информацию о закладках. Вот код: когда набору данных требуются новые данные — например, для выполнения операции Post — он запрашивает их у компонента через событие OnUpdateData класса TFieldDataLink: если соответствующие условия соблюдены, компонент обновляет данные в соответствующем поле таблицы . Этот компонент базы данных Delphi бесплатен для личного использования. См. Дополнительные сведения и загрузите пробную / персональную версию.Теперь давайте создадим компонент, работающий с данными, который работает с набором данных в целом: средство просмотра записей. В этом документе будут подробно рассмотрены многие компоненты и инструменты, составляющие базу данных Delphi … В этом случае данные файла извлекаются из буфера TSearchRec конструктором класса TFileData: этот конструктор вызывается для каждой папки при открытии набора данных. : Следующим шагом является определение полей набора данных, которые в этом случае являются фиксированными и зависят от доступных данных каталога: Наконец, компонент должен переместить данные из объекта списка, на который ссылается текущий буфер записи (значение ActiveBuffer ) в каждое поле набора данных в соответствии с запросом метода GetFieldData.Компоненты доступа к данным MySQL (MyDAC) — это библиотека компонентов, которая обеспечивает прямой доступ к MySQL и MariaDB из Delphi и C ++ Builder, включая Community Edition, а также Lazarus (и Free Pascal) в Windows, Linux, macOS, iOS и Android для 32-битных и 64-битных платформ. Встроенная база данных Delphi. Вы можете отключить эту потоковую передачу, переопределив метод и не вызывая унаследованный (что обычно является плохой техникой), но вы также можете переключить защищенное поле FSaveCellExtents, чтобы отключить эту функцию (как я сделал в коде компонента).ADS 10.1 больше не поддерживается, поэтому компоненты TDataSet, поддерживаемые Delphi 10 Seattle, будут выпущены только для версий 11. 1 и 12. Наши специализированные группы поддержки могут ответить на вопросы, связанные с продуктом. Каждый класс должен избавляться от данных, которые он выделил, и обновлять заголовок файла, при первом добавлении записей и при каждом изменении количества записей: другая связанная функция используется для проверки того, открыт ли набор данных, что вы можете решить, используя соответствующий локальное поле: это методы открытия и закрытия, которые необходимо реализовать в любом настраиваемом наборе данных.Вы должны предоставить единственный параметр: целевой класс, хранящийся в свойстве ObjClass (см. Полное определение класса TMdObjDataSet в листинге 17.5). Этот метод необходим для реализации свойства RecordSize, доступного только для чтения, которое используется только в нескольких особых случаях во всем исходном коде VCL. & quout; Making a Control Data-Aware »в Руководстве по составлению компонентов в файле справки Delphi для дальнейших примеров. Базы данных Delphi Community Edition. Компоненты Apollo Embedded VCL — это собственные компоненты Delphi с поддержкой данных для создания 32-битной и 64-битной Windows приложения, использующие Delphi и C ++ Builder.Два метода, используемые для установки и получения флагов закладок, демонстрируют эту технику: методы, которые вы используете для установки и получения текущей закладки записи, аналогичны двум предыдущим, но они добавляют сложности, поскольку вы получаете указатель на закладку в параметре Data. . Эти методы легко понять, если вспомнить, что диапазон внутреннего поля FCurrentRecord составляет от 0 до количества записей минус 1. Библиотека компонентов для подключения приложений к MySQL из Delphi, C ++ Builder и Lazarus.Ключевая особенность. Компоненты переноса данных для Delphi и C ++ Builder. В этих случаях вы не получаете данные, а возвращаете код ошибки. Типичными примерами компонентов Delphi являются: Delphi PDF, сетка Delphi и элементы управления диаграммой Delphi. В этом примере метод CreateTable создает пустой файл и вставляет информацию в заголовок: фиксированный номер версии, фиктивный размер записи (вы не знаете размер, пока не инициализируете поля) и количество записей (которое равно нулю. для начала): Как упоминалось ранее, каждый набор данных должен реализовывать управление закладками, которое необходимо для навигации по набору данных.Самые быстрые и надежные решения для передачи данных Таким образом, вы можете написать бизнес-правила своего приложения, реализуя правила в методах чтения и записи свойств — определенно более разумный подход ООП, чем привязка кода к объектам поля и их проверка. Вы можете изменить размер двух других столбцов после добавления фиксированной строки. Чтобы проверить это, учтите, что если вы используете DBGrid, система будет выполнять серию вызовов GetRecord, пока либо сетка не заполнится, либо GetRecord не вернет grEOF.Вам не нужно определять, находится ли текущая запись в правильном диапазоне, только если запрошенная запись находится. При обсуждении класса TDataSet и альтернативных семейств компонентов набора данных, доступных в Delphi, в главе 13 «Архитектура базы данных Delphi» я упомянул возможность написания собственного класса набора данных. Вот код для двух методов в производном наборе данных на основе потока: Второй метод, InternalAfterOpen, используется для операций, требуемых после установки определений полей, и за ним следует код, который сравнивает размер записи, прочитанной из файла, с значение, вычисленное в методе InternalInitFieldDefs.Рисунок 17.3: Пример ViewGrid демонстрирует выходные данные компонента RecordView, используя образец таблицы базы данных BioLife от Borland. При возникновении проблем обращайтесь к нам на форумах zeoslib.sourceforge.net. Однако я обнаружил, что буфер — это указатель на необработанные данные объекта поля. Добавлена поддержка Delphi XE6 в компоненты TDataSet. Теперь мы подошли к ядру компонента настраиваемого набора данных. Работа над поддержкой Delphi 10 Seattle продолжается. поддерживает DAO 3.6, DAO 3.5 и ACEDAO, нет необходимости в базе данных Borland… Этот класс включает большую часть кода для сеток, но большинство его свойств, событий и методов защищены.Обращайтесь к нам, мы всегда готовы помочь! Однако самая интересная особенность программы — это то, что вы должны попробовать сами. Предложение заканчивается 28 декабря. Когда вы прокручиваете вверх и вниз записи данных набора данных, вы не прокручиваете строки DBGrid; строки неподвижны, и данные перемещаются из одной строки в другую, создавая видимость движения. Во время выполнения программа ищет таблицу в текущем каталоге. В этом примере я решил основывать определения полей на внешнем файле — файле INI, который предоставляет раздел для каждого поля.Чтобы отличать эти компоненты от других семейств доступа к базе данных, компоненты имеют префикс с буквами SQL, что подчеркивает тот факт, что они используются для доступа к серверам СУБД. Создание приложений Win32 и Win64 с помощью Delphi и C ++ Builder (Borland, Embarcadero, CodeGear) Создание, обновление и управление файлами баз данных CA-Clipper и FoxPro DBF / Xbase из кода; BDE не требуется; Более чем в 30 раз меньше, чем… Например, в ветви gmCurrent оператора case вы используете стандартное выражение CurrentRecord> = InternalRecourdCount.Delphi CE содержит компоненты для TClientDataSet, TFDConnection (база данных FireDac), TDataSource, TDBGrid, TDBEdit и других. Вот определение класса компонента (из модуля MdTrack пакета MdDataPack): по сравнению с созданным ранее элементом управления с поддержкой данных только для чтения, этот класс более сложен, поскольку он имеет три обработчика сообщений, включая обработчики уведомлений компонентов, и два новых обработчика событий для канала передачи данных. Во-вторых, ему нужен настраиваемый метод Paint для рисования вывода в соответствующем объекте холста, который предоставляется в параметре сообщения wm_Paint, если установлен флаг csPaintCopy свойства ControlState.Краткое справочное руководство по почти 100 инструментам для повышения качества, скорости и сложности процессов, использованию DMAIC для повышения скорости, качества и стоимости, инструментов для сопоставления потока создания ценности и потоков процессов, сопоставления потока создания ценности и анализа сложности, Microsoft Office Visio 2007 Step by Step (Step By Step (Microsoft)), Организация фигур в макетах Office с помощью слоев, Настольный справочник Java All-In-One для чайников. Пытаясь решить эту проблему, я также обнаружил, что если вы вызываете IsNull для поля, этот запрос разрешается путем вызова GetFieldData без передачи какого-либо буфера для заполнения, а ищет только результат вызова функции.Мы поддерживаем хорошие партнерские отношения с Embarcadero и сообществом Delphi более 20 лет. С более практической точки зрения, чтобы сделать компонент осведомленным о данных, вам необходимо добавить к нему ссылку на данные и отобразить некоторые свойства этого внутреннего объекта, такие как свойства DataSource и DataField. В листинге 17.3 показан файл Contrib.INI, используемый в демонстрационном приложении компонента. Как вы видели, компонент, поддерживающий данные только для чтения, написать несложно. Компоненты (Delphi) для многоразового, независимого от баз данных программирования бизнес-логики или логики данных.Однако использование такого компонента внутри контейнера DBCtrlGrid становится чрезвычайно сложным. Компоненты dbGo инкапсулируют эти объекты ADO в архитектуре базы данных Delphi. Код также проверяет, совместимо ли количество записей, считываемых из заголовка, с размером файла. Будьте в курсе последних мировых событий. Встроенная база данных Delphi. IBDAC — это библиотека компонентов, которая позволяет подключаться к Firebird 3.x, 2.x, 1.x из Delphi, C ++ Builder и Lazarus (и Free Pascal).В этой статье не рассматриваются компоненты ADO, присутствующие в Delphi 5. Приведен пример кода, а компонент DBCtrlGrid не используется активно, поэтому я решил не сообщать вам здесь полную информацию; вы можете найти полный код и дополнительную информацию в исходном коде. Листинг 17.1. Метод TheDrawCell пользовательского компонента RecordView. В качестве альтернативы вы можете захотеть проверить тип поля, когда метод SetDataField назначает его элементу управления. Основные шаги по созданию компонента просмотра данных В этих буферах хранятся данные, но они также обычно хранят дополнительную информацию для набора данных, который будет использоваться при управлении записями. Учитывая этот выбор, я чувствовал, что для этого примера я мог бы отказаться от поддержки удаления записи. Демонстрационная программа определяет абсолютный путь к файлу таблицы во время разработки, поэтому вам нужно будет исправить это, если вы скопируете примеры на другой диск или в другой каталог. Даже текущая запись может не существовать — например, когда таблица пуста (или в случае внутренней ошибки). Все права защищены. В Delphi нет компонентов, учитывающих данные, которые управляют несколькими полями одной записи без отображения других записей.Что само по себе под вопросом. Компоненты базы данных также обладают универсальностью. Компоненты доступа к данным для MySQL (MyDAC) — это библиотека компонентов, которая обеспечивает прямой доступ к серверам баз данных MySQL из Delphi, Delphi для .NET, C ++ Builder и Kylix. В этом случае возвращается False. Вам необходимо предоставить еще два метода: GetData, который копирует данные из буфера записи в объекты полей набора данных, и SetData, который перемещает данные обратно из полей в буфер записи. Итак, как видите, сочетание баз данных Access и компонентов ADO Delphi упрощает создание приложений для баз данных.Элементы управления с поддержкой данных используют соединение, чтобы запросить текущее значение поля или обновить его, уведомив набор данных об этом событии. Наши квалифицированные и опытные специалисты предоставляют клиентам быстрые и подробные ответы, частые сборки и исправления по запросу, а также многое другое. В обоих случаях вы используете метод InternalPost, но вы можете проверить свойство State набора данных, чтобы определить, какой тип публикации вы выполняете. Исправлена ошибка в 64-битном клиенте Delphi, которая могла привести к нарушению прав доступа при редактировании записи.Таким образом, нет необходимости в методе уведомления для элементов управления с учетом данных, хотя вы увидите книги и статьи, предлагающие его, а VCL включает много этого бесполезного кода. Это альтернатива вставке или добавлению новой записи в набор данных, редактированию значений различных полей и последующей публикации данных, поскольку вызовы InsertRecord и AppendRecord получают значения полей в качестве параметров. Фото Кевина Ку на Unsplash. Код для всех компонентов, созданных в этой главе, находится в папке MdDataPack, которая также включает пакет с аналогичным названием для их установки.В коде метода компонент сначала вызывает унаследованную версию, а затем устанавливает высоту каждой строки. Этот тест может завершиться неудачно, если набор данных не был закрыт должным образом: вы можете изменить этот код, чтобы набор данных в любом случае обновлял размер записи в заголовке. Цель следующего компонента — улучшить DBGrid тем же типом настраиваемого вывода, который я использовал для компонента RecordView, напрямую отображая графические и мемо-поля. Большинство компонентов регулярно обновляются, поэтому вы можете найти здесь их последнюю версию для использования в Delphi 10.3 Рио тоже. Если вы используете один из методов объекта поля для перемещения этих данных, он вызовет метод GetData или SetData набора данных, что, вероятно, вызовет бесконечную рекурсию. Чтобы усложнить задачу, вы также должны учитывать это различие в методе GetFieldData: если вы читаете поля из текущего объекта, вам, возможно, придется использовать его модифицированный клон (в противном случае изменения, внесенные пользователем в другие поля, исчезнут). Я продолжу рассказывать об этом в следующей главе, которая посвящена новому механизму отчетов, доступному в Delphi 7.Вы также можете изменить форму с помощью редактора полей Delphi и установить свойства различных объектов поля. Компонент TADOQuery предоставляет разработчикам Delphi возможность извлекать данные из одной или нескольких таблиц из базы данных ADO с помощью SQL. Важная идея, связанная с наборами данных в Delphi, заключается в том, что они представляют собой набор данных, независимо от того, откуда эти данные поступают. Необходимые инструменты для разработки баз данных, анализа данных, управления данными и администрирования серверов, Широкий выбор решений для подключения к данным мирового уровня для различных технологий и фреймворков подключения к данным, Инструменты, которые помогают разработчикам писать код, проводить обзоры кода, сравнивать источники, Отслеживайте рабочее время и многое другое. Универсальная облачная платформа данных для интеграции данных без кодирования, доступа к данным, резервного копирования из облака в облако и управления.Встроенная поддержка SQL была добавлена в версии 5, в которой появился наш компонент TAdsQuery. Чтобы получить доступ к закладке и флагам, вы можете использовать в качестве смещения размер данных, приведя значение к типу указателя PMdRecInfo, а затем получить доступ к соответствующему полю структуры TMdRecInfo через указатель. Вы используете этот TList для доступа к данным полей в буфере записи, как вы можете видеть в листинге кода. Вот результат работы тестовой программы, использующей этот компонент: Следующий шаг — написать компонент, который позволяет пользователю изменять данные в базе данных, а не просто просматривать их.Эти компоненты позволили разработчикам Delphi быстро внедрить Advantage, используя уже имеющиеся у них навыки программирования. Добавлена поддержка Delphi XE6 в компоненты TDataSet. Рисунок 17.6: Форма примера StreamDSDemo. TmySQL использует одну клиентскую DLL, которая предоставляется большинством скомпилированных под Windows версий MySQL. Некоторые из представленных здесь идей были обсуждены в статье, которую я написал для веб-сайта сообщества Borland, опубликованной в июне 2000 г. по адресу bdn.borland.com/article/0,1410,20587,00.html.Лейдаго! Ноабеб — программист из Намибии. В качестве примера второй набор данных, представленный в этой главе, представляет собой список файлов. Ваша подписка не может быть сохранена. Чтобы открыть или закрыть таблицу, вы можете установить флажок: Наконец, я создал метод, который проверяет код управления закладками пользовательского набора данных (он работает). Компоненты dbExpress. Этот компонент в настоящее время игнорирует эти настройки. Причины для написания настраиваемого набора данных связаны с тем фактом, что вам не нужно развертывать ядро базы данных, но вы все равно сможете в полной мере использовать архитектуру базы данных Delphi, включая такие вещи, как постоянные поля базы данных и элементы управления с учетом данных. .Если это удастся, говоря «соединение выполнено успешно», вы, вероятно, захотите проверить, является ли база данных, полученная по данному имени, той, которую вы ищете. Один из них — компонент TFDDataMove. Вот два метода. В дополнение к только что описанным методам управления закладками вы можете использовать несколько других методов навигации для перехода к определенным позициям в наборе данных, таким как первая или последняя запись. Ключевые особенности: замена BDE — нет BDE, не требуются библиотеки DLL, поддержка SQL, сжатие полей BLOB, быстрые индексы, таблица, а также весь импорт / экспорт базы данных в памяти, Unicode, потокобезопасность, исчерпывающая помощь.Результат может быть не идеальным, но этот компонент может быть полезен во многих случаях. Учить больше. В этой главе мы углубились в архитектуру базы данных Delphi, сначала изучив разработку элементов управления с учетом данных, а затем изучив внутреннее устройство класса TDataSet для написания нескольких пользовательских компонентов набора данных. В заключительной части метода компонент рассматривает мемо и графические поля. Исправлена ошибка, из-за которой поля Unicode могли перезаписывать значения соседних полей. Сначала я попытался установить DefaultRowHeight, а затем высоту первой строки, но этот подход усложнил код, используемый для вычисления количества видимых строк в сетке (свойство VisibleRowCount, доступное только для чтения).Однако, чтобы этот пример работал, мне пришлось считать пустыми каждое поле даты / времени с начальным нулем. У него есть панель с двумя кнопками, флажком и компонентом навигатора, а также DBGrid, заполняющий его клиентскую область. Это общий метод InternalOpen: вы заметите, что метод устанавливает большинство локальных полей класса, а также поле BookmarkSize базового класса TDataSet. Я уже подготовил файл INI с определением таблицы (файл, указанный ранее при обсуждении инициализации набора данных), и я выполнил программу, чтобы добавить некоторые данные в файл.Delphi поставляется с более чем 40 готовыми компонентами базы данных и предоставляет среду визуального программирования, которая включает в себя интегрированный редактор кода, мастер форм базы данных, который ускоряет шаги по созданию просматриваемой формы данных, и конструктор модулей данных, который можно использовать для совместного доступа к данным между После создания При успешном подключении к базе данных вы можете захотеть вставить / отредактировать / удалить данные из вашего приложения delphi . . Мы … Этот элемент управления настроен для работы только с файлами, установив для его свойства Root значение C :.Это то же поведение, что и у компонента TTable (который выполняет этот шаг с помощью метода CreateTable). Компонент средства просмотра записей, который я опишу в этом разделе, основан на сетке из двух столбцов; в первом столбце отображаются имена полей таблицы, а во втором столбце отображаются соответствующие значения полей. Database Comparer VCL представляет собой 100% компоненты Delphi VCL для Borland Delphi / C ++ Builder. Кроме того, вам необходимо инициализировать буфер с помощью соответствующего флага закладки и значения закладки (или номера записи).Затем InternalSetToRecord вызывает InternalGotoBookmark. Это тот же подход, который используется VCL для некоторых конкретных каналов передачи данных. Эти компоненты позволяют сравнивать и синхронизировать объекты базы данных SQL и записи таблиц для многих популярных баз данных. Кросс-платформенное решение для Delphi, C ++ Builder и Lazarus, разработка с использованием базы данных, модели и кода, Visual ORM Model Designer с генерацией кода, независимое от базы данных хранилище данных в памяти, отображение данных с использованием любой базы данных. осведомленные элементы управления. Основные данные — это позиция текущей записи, которая соответствует индексу списка (а также закладке): производный класс набора данных каталога должен обеспечивать способ загрузки объектов в память при открытии набора данных, чтобы определить правильные поля. , а также для чтения и записи значений этих полей.Пример упрощен тем, что это набор данных только для чтения, поэтому вы можете найти его более простым, чем предыдущий набор данных. Преобразуя значение, на которое указывает этот указатель, к целому числу, вы получаете значение закладки: ключевым методом управления закладками является InternalGotoBookmark, который ваш набор данных использует, чтобы сделать данную запись текущей. RiversoftAVG предоставляет ряд наборов компонентов, включая библиотеку компонентов SVG, набор компонентов диаграмм, генетические алгоритмы, нечеткую логику и библиотеки компонентов механизма вывода. TurboDB for VCL — это база данных для Delphi, написанная на Delphi, которая поддерживает большой набор функций SQL и предлагает его через хорошо известные компоненты VCL для Database, Table, Query и BatchMove. Обратите внимание, что в методе AllocRecordBuffer компонент выделяет память для буфера записи, включая как данные базы данных, так и информацию о записи. Компоненты доступа к данным SQL Server (SDAC) — это библиотека компонентов, которая обеспечивает встроенное подключение к SQL Server из Delphi и C ++ Builder, включая Community Edition, а также Lazarus (и Free Pascal) для Windows, Linux, macOS, iOS и Android как для 32-битных, так и для 64-битных платформ.Поддержка базы данных является ключевой функцией и обеспечивается FireDAC (компоненты доступа к базе данных). Этот компонент набора данных наследуется от TMdListDataSet, как в предыдущем примере. Все компоненты Rosi являются производными от стандартных компонентов и могут просто заменить стандартные компоненты без потери текущих настроек и без изменения кода. Разработчики могут начать использовать его немедленно, без длительного обучения. Типичными примерами компонентов Delphi являются: Delphi PDF, сетка Delphi и элементы управления диаграммой Delphi.Если во время выбора записи все идет нормально, компонент загружает данные из потока, перемещаясь в позицию текущей записи (заданную размером записи, умноженным на номер записи). Вот весь код для метода GetRecord: Если есть ошибка и параметр DoCheck имеет значение True, GetRecord вызывает исключение. Я использовал два локальных поля, названных EofCrack и BofCrack, чтобы упростить чтение этого кода: Метод InternalRecordCount — это виртуальный метод, представленный в моем классе TMdCustomDataSet, потому что разные наборы данных могут иметь локальное поле для этого значения (как в случае набор данных на основе потока, который имеет поле FRecordCount) или вычислить его на лету.Вместо этого он был написан для Delphi 4 и предназначен для демонстрации того, как получить доступ к ADO, если у вас нет компонентов Delphi ADO. Альтернативное решение — сделать копию всего файла без данной записи, а затем заменить исходный файл копией. Вы также заметите еще одно объявление записи в начале: структуру, используемую для хранения дополнительных данных для каждой записи данных, которую вы помещаете в буфер. Чтобы улучшить графический вывод, элемент управления делает строки для BLOB-полей в два раза выше, чем для текстовых полей.Вызывая Add, код создает новый пустой объект целевого класса и добавляет его во внутренний список: Чтобы продемонстрировать использование этого компонента, я написал пример ObjDataSetDemo. Все элементы управления с учетом данных, которые я создал к этому моменту, относятся к определенным полям набора данных, поэтому я использовал объект TFieldDataLink, чтобы установить соединение с источником данных. для любой базы данных. Этот метод вызывается методом AddRecord, который, в свою очередь, вызывается InsertRecord и AppendRecord. Запутанным элементом этих двух методов является то, что они оба принимают параметр поля и параметр буфера.Вот пример переопределенного метода, который запускает соответствующее событие, если доступно: Класс TFieldDataLink также содержит свойства Field и FieldName, которые позволяют подключать элемент управления с поддержкой данных к определенному полю набора данных. Вы можете установить свойство Default-RowHeight, но в этом случае строка заголовка, вероятно, будет слишком высокой.
Создание простого приложения VCL для данных XML
Embarcadero RAD Studio предоставляет среду разработки для приложений Delphi и C ++ Builder.С помощью компонентов CData FireDAC для XML вы получаете доступ к живым данным XML в RAD Studio, абстрагируя данные в таблицах, представлениях и хранимых процедурах, которые можно использовать для извлечения и обновления данных XML. В этой статье будет рассмотрено подключение к XML и создание простого приложения VCL с помощью Form Designer.
Создание приложения VCL для данных XML
Следующие инструкции показывают, как использовать конструктор форм для создания простого приложения VCL Forms, которое показывает основные объекты FireDAC, необходимые для подключения к XML из любого приложения.
В следующем примере заполняется элемент управления TDBGrid .
- Создайте новое приложение VCL Forms.
- Перетащите на форму объекты TFDPhysXMLDriverLink и TFDConnection .
Дважды щелкните объект TFDConnection . Откроется редактор соединений FireDAC. Выберите «CData.XML» в меню DriverId и настройте свойства подключения.
См. Главу «Начало работы» в документации поставщика данных для проверки подлинности в источнике данных: поставщик данных моделирует XML API в виде двунаправленных таблиц базы данных и XML-файлов в виде представлений только для чтения (локальные файлы, файлы, хранящиеся в популярных облачных сервисах, и FTP-серверы) .Поддерживаются основные схемы аутентификации, включая HTTP Basic, Digest, NTLM, OAuth и FTP. Руководства по аутентификации см. В главе «Начало работы» в документации поставщика данных.
После установки URI и предоставления любых значений аутентификации установите DataModel для более точного соответствия представления данных структуре ваших данных.
Свойство DataModel — это управляющее свойство над тем, как ваши данные представлены в таблицах, и переключает следующие основные конфигурации.
- Документ (по умолчанию): моделируйте представление документа верхнего уровня для ваших данных XML. Поставщик данных возвращает вложенные элементы как агрегаты данных.
- FlattenedDocuments : неявно объединить вложенные документы и их родительские документы в единую таблицу.
- Реляционный : возврат отдельных связанных таблиц из иерархических данных. Таблицы содержат первичный ключ и внешний ключ, который ссылается на родительский документ.
См. Главу «Моделирование XML-данных» для получения дополнительной информации о настройке реляционного представления.Вы также найдете образцы данных, которые используются в следующих примерах. Данные включают записи о людях, автомобилях, которыми они владеют, и различных услугах по техническому обслуживанию, выполненных для этих автомобилей.
- Перетащите на форму объект TFDQuery и установите следующие свойства:
- Соединение — Установите это свойство для объекта TFDConnection , если этот объект еще не указан.
- SQL — Нажмите кнопку в свойстве SQL и введите запрос.
- Активный — Установите для этого свойства значение true.
- Перетащите на форму объект TDataSource и установите следующее свойство:
- DataSet — в меню этого свойства выберите имя объекта TFDQuery .
- Перетащите на форму элемент управления TDBGrid и установите следующее свойство:
- DataSource — Выберите имя TDataSource .
Перетащите на форму TFDGUIxWaitCursor . Это необходимо, чтобы избежать ошибки во время выполнения.
Теперь у вас есть исполняемое приложение, которое отображает результаты SQL-запроса, заданного в объекте TFDQuery .
Советы Delphi
В этом документе описаны минимальные шаги, необходимые для создания системы с учетом данных. Компонент просмотра, который отображает данные для одного поля.Пример компонент является потомком TPanel с DataSource и DataField свойств, аналогичных компоненту TDBText . & quout; Making a Control Data-Aware »в Руководстве по составлению компонентов в дополнительные примеры можно найти в файле справки Delphi.
Основные шаги по созданию компонента просмотра данных
Создайте или создайте компонент, который позволяет отображать, но не вводить данные. Например, вы можете использовать TMemo с ReadOnly установлено значение true. В примере, приведенном в этом документе, мы будем использовать TCustomPanel . Это позволит отображать, но не вводить данные.
- Добавьте в компонент объект связи с данными. Этот объект управляет связью между компонентом и таблицей базы данных.
- Добавьте свойства DataField и DataSource в составная часть.
- Добавьте методы для получения и установки DataField и Источник данных .
- Добавьте метод DataChange компонент для обработки ссылки данных событие OnDataChange объекта .
- Переопределите конструктор компонента, чтобы создать канал данных и подключить DataChange метод.
- Переопределите деструктор компонента, чтобы очистить канал данных.
Создание TDBPanel
Создайте или создайте компонент, который позволяет отображать, но не вводить данные.Мы будем использовать TCustomPanel в качестве отправной точки для этого. пример.
В Delphi выберите соответствующий пункт меню, чтобы создать новый компонент (это будет варьироваться в зависимости от редакции Delphi), и укажите TDBPanel как имя класса и TCustomPanel в качестве типа предка. Вы можете указать любая страница палитры.
Добавьте DB и DBTables к вашему использует пункт.
Добавьте объект ссылки на данные в личный раздел компонента.Этот пример будет отображать данные для одного поля, поэтому мы будем использовать TFieldDataLink для обеспечить связь между нашим новым компонентом и источником данных. Назовите новый объект канала передачи данных FDataLink . Пример:
частный FDataLink: TFieldDataLink;
Добавьте свойства DataField и DataSource в составная часть. Мы добавим вспомогательный код для методов get и set в следующие шаги. Обратите внимание, что наш новый компонент будет иметь DataField и DataSource свойства и FDataLink также будут иметь собственные свойства DataField и Datasource .Пример:
опубликовано свойство DataField: чтение строки GetDataField запись SetDataField; свойство DataSource: TDataSource читать GetDataSource писать SetDataSource;
Добавьте частные методы, чтобы получить и установить DataField и DataSource значения свойств в и из DataField и DataSource для FDataLink . Пример:
... частный FDataLink: TFieldDataLink; функция GetDataField: String; функция GetDataSource: TDataSource; процедура SetDataField (значение константы: строка); процедура SetDataSource (Значение: TDataSource); ... выполнение функция TDBPanel.GetDataField: String; начинать Результат: = FDataLink.FieldName; конец; функция TDBPanel.GetDataSource: TDataSource; начинать Результат: = FDataLink.DataSource; конец; процедура TDBPanel.SetDataField (значение константы: строка); начинать FDataLink.FieldName: = Значение; конец; процедура TDBPanel.SetDataSource (Значение: TDataSource); начинать FDataLink.DataSource: = Значение; конец;
Добавьте частный метод DataChange , который будет назначен каналу передачи данных. OnDataChange событие.В методе DataChange добавьте код в отображать фактические данные полей базы данных, предоставленные объектом связи с данными. В этом Например, мы назначаем значение поля FDataLink заголовку панели. Пример:
... частный процедура DataChange (Sender: TObject); ... выполнение процедура TDBPanel.DataChange (Sender: TObject); начинать если FDataLink.Field = nil, то Подпись: = ''; еще Подпись: = FDataLink. Field.AsString; конец;
Переопределите конструктор компонента Создайте метод .в реализация Create , создать объект FDataLink , и назначьте частный метод DataChange для FDataLink OnDataChange событие. Пример:
... общественный конструктор Create (AOwner: TComponent); переопределить; ... выполнение конструктор TMyDBPanel.Create (AOwner: TComponent); начинать унаследованный Create (AOwner); FDataLink: = TFieldDataLink.Create; FDataLink.OnDataChange: = DataChange; конец;
Переопределить деструктор компонента Метод уничтожения .в реализация Уничтожить , установить OnDataChange в ноль (избегает GPF), и бесплатный FDatalink . Пример:
... общественный деструктор Destroy; переопределить; ... выполнение деструктор TDBPanel.Destroy; начинать FDataLink.OnDataChange: = ноль; FDataLink.Free; унаследованный Destroy; конец;
Сохраните устройство и установите компонент (см. Руководство пользователя и Руководство для разработчиков компонентов в справке Delphi для получения дополнительных сведений о сохранении модулей и установке составные части).
Чтобы проверить работоспособность компонента, добавьте TTable , TDatasource , TDBNavigator и TDBPanel к форма. Установите TTable DatabaseName и TableName на DBDemos и BioLife соответственно, а Active property to True . Установить TDatasource.Dataset в Table1 . Установить TDBNavigator и TDBPanel.DataSource свойство в Источник данных1 . Необходимо указать имя TDBPanel.DataField как «Common_Name». Запустите приложение и используйте навигатор для перехода между записи, демонстрирующие способность TDBPanel обнаруживать изменения в данных и отобразите соответствующее значение поля.
Полный список источников
unit Mydbp; интерфейс использует SysUtils, WinTypes, WinProcs, сообщения, классы, графика, Элементы управления, формы, диалоги, ExtCtrls, DB, DBTables; тип TDBPanel = класс (TCustomPanel) частный FDataLink: TFieldDataLink; функция GetDataField: String; функция GetDataSource: TDataSource; процедура SetDataField (значение константы: строка); процедура SetDataSource (Значение: TDataSource); процедура DataChange (Sender: TObject); общественный конструктор Create (AOwner: TComponent); переопределить; деструктор Destroy; переопределить; опубликовано свойство DataField: чтение строки GetDataField запись SetDataField; свойство DataSource: TdataSource читать GetDataSource писать SetDataSource; конец; Реестр процедур; выполнение Реестр процедур; начинать RegisterComponents ('Примеры', [TDBPanel]); конец; функция TDBPanel.GetDataField: String; начинать Результат: = FDataLink.FieldName; конец; функция TDBPanel.GetDataSource: TDataSource; начинать Результат: = FDataLink.DataSource; конец; процедура TDBPanel.SetDataField (значение константы: строка); начинать FDataLink.FieldName: = Значение; конец; процедура TDBPanel.SetDataSource (Значение: TDataSource); начинать FDataLink.DataSource: = Значение; конец; процедура TDBPanel.DataChange (Sender: TObject); начинать если FDataLink.Field = nil, то Подпись: = '' еще Подпись: = FDataLink.Field.AsString; конец; конструктор TDBPanel.Create (AOwner: TComponent); начинать унаследованный Create (AOwner); FDataLink: = TFieldDataLink.Create; FDataLink.OnDataChange: = DataChange; конец; деструктор TDBPanel.Destroy; начинать FDataLink.Free; FDataLink.OnDataChange: = ноль; унаследованный Destroy; конец; конец.
Оригинальный ресурс: | Бассейн Дельфи |
---|---|
Автор: | Неизвестно |
Добавлен: | 08. 07.2012 |
Последнее обновление: | 2012-07-08 |
| Глава 1: Delphi 7 и его IDE
Глава 2: Язык программирования Delphi
Глава 3: Библиотека времени выполнения
Глава 4: Классы базовой библиотеки
Глава 6: Создание пользовательского интерфейса
Глава 8: Архитектура приложений Delphi
Глава 9: Написание компонентов Delphi
Глава 10: Библиотеки и пакеты
Глава 11: Моделирование и программирование ООП (с ModelMaker)
Глава 13: Архитектура базы данных Delphi
Глава 14: Клиент / сервер с dbExpress
Глава 16.Многоуровневые приложения DataSnap
Глава 17: Написание компонентов базы данных
Глава 19. Интернет-программирование: сокеты и Indy
Глава 20. Веб-программирование с помощью WebBroker и WebSnap
Глава 21. Веб-программирование с помощью IntraWeb
Глава 22: Использование технологий XML
|