Часто задаваемые общие вопросы по Borland Delphi

Часть 1


Введение
  1. Какова цель этого FAQ?
  2. Как я могу получить последнюю версию FAQ?
Вопросы общего характера
  1. Что такое Delphi?
  2. Для кого предназначен Delphi?
  3. Преимущества Delphi по сравнению с аналогичными программными продуктами.
  4. Какие есть версии Delphi?
  5. Сколько дискового пространства, памяти, и т.д., нужно для работы Delphi?
  6. Сколько места занимает программа, выводящая текст "Hello World!"?
  7. Hасколько трудно научиться работе с Delphi?
  8. Можно ли создавать многопользовательские приложения для баз данных в Delphi Desktop или Developer?
  9. Какова история появления Delphi?
  10. Где можно приобрести копию Delphi?
  11. Приведите сравнение производительности IDAPI и других продуктов.
  12. Как можно войти в контакт с представителями Borland?
  13. Какую техническую поддержку может получить покупатель Delphi?
  14. Выйдет ли версия Delphi, где в качестве компилятора будет использоваться BC++?
  15. Сколько стоит Delphi в России?
  16. Что можно, и чего нельзя разработать в среде Delphi? В частности, можно ли разработать в Delphi внутреннюю структуру данных для SQL-cервера, хранимые процедуры и пр.?
  17. Чем можно воспользоваться для создания инсталляционных версий приложений, разработанных в Delphi?
  18. Должен ли я знать все относительно Windows API, чтобы использовать Delphi?
  19. Должен ли я знать объектно-ориентированное программирование, чтобы использовать Delphi?
Совместимость
  1. Какие операционные системы Delphi поддерживает?
  2. Какие средства управления проектом совместимы с Delphi?
  3. Можно ли в Delphi использовать DLL, разработанные в C или C ++?
  4. Можно ли вызывать код, созданный в  Delphi из C или C ++?
  5. Что известно о пакетах других фирм, которые работают (или не работают) с Delphi?
  6. Есть ли поддержка Dynamic Data Exchange (DDE), VBX, OLE, OCX, OpenDoc?
  7. Можно ли на Delphi написать VBX или OCX?
  8. Какие генераторы отчетов можно использовать с Delphi кроме ReportSmith?
Базы данных - Interbase и локальные данные
  1. Каково определение IDAPI? Что такое SQL Links?
  2. Hеобходим ли IDAPI для доступа к данным в Delphi? Можно ли включить IDAPI внутрь EXE, чтобы распространять программу без установки IDAPI на пользовательском компьютере?
  3. Где можно найти описание функций и типов данных BDE?
  4. Можно ли программным образом добавить псевдоним (alias) в IDAPI.CFG?
  5. Я получаю сообщение от BDE при редактировании записи 'Multiple records found but only one expected'. Что бы это значило?
  6. Обработка исключений (exceptions) BDE.
  7. Какому стандарту SQL соответствует SQL в InterBase?
  8. Как удалить генераторы (GENERATORS) из базы данных InterBase?
  9. Как выбрать протокол при соединении с InterBase из Delphi?
  10. Можно ли использовать какие-нибудь ODBC драйверы, которые получены с другими СУБД?
  11. Проблемы с именами таблиц в ODBC-драйверах.
  12. Какой формат данных предпочесть в Delphi? dBase или Paradox?
  13. Как нужно писать функцию "change password"  для таблицы Парадокса?
  14. Есть ли какая-нибудь процедура для перестройки разрушенного индекса, типа TUTILITY.EXE из PdoxWin?
  15. Есть ли какая-нибудь процедура для упаковки таблицы dBase?
  16. Как для .dbf таблицы создать индекс по выражению?
  17. Как создать в Paradox вторичный индекс с упорядочиванием по убыванию?
  18. Хочу узнать номер текущей записи, как это сделать?
  19. Как посмотреть удаленные записи в таблице .dbf? А как их восстановить?
  20. Упаковка таблицы.
  21. Почему я получаю ошибку 'Index out of range' когда использую TTable.FindNearest и TTable.FindKey для таблицы dBase с индексом по выражению?
  22. Как программным образом создать таблицу Paradox с автоинкрементным полем?
  23. Почему я не могу использовать опцию ixUnique при создании индекса в таблице Paradox с помощью метода AddIndex компонента TTable?
  24. Генерация уникальных идентификаторов для таблиц.
  25. Можно-ли использовать Crystal Report с таблицами формата Paradox 5.0?
  26. Как открыть таблицу dBase, у которой поврежден (утерян) индексный MDX файл?
  27. Как определить номер текущей записи для набора данных?
Базы данных - прочие SQL сервера
  1. Как осуществляется доступ к базе данных из Delphi?
  2. Какие серверы данных поддерживает Delphi?
  3. Cуществует ли способ работать из Delphi с AS/400, исключая ODBC?
  4. Cуществует ли способ работать из Delphi с Lotus Notes (IBM Notes), за исключением ODBC?
  5. Можно ли создавать с помощью Delphi сетевые приложения не для схемы клиент-сервер, а для схемы с разделяемыми файлами (как, например, в FoxPro)?
  6. Можно ли работать при помощи Delphi не с IDAPI - или ODBC-драйверами, а с "родными" API каких-либо СУБД?
  7. Какие версии Informix (Online, I-NET) поддерживают SQL Links?
  8. Как работать с таблицами в виде текстовых файлов (ASCII)?
  9. Как правильно указать имя сервера Oracle?
  10. Что такое транзакции (Transactions)?
  11. Как в Delphi управлять транзакциями?
  12. Использование формата Access 2.0 в Delphi.
  13. Можно ли при помощи Delphi реализовывать проекты, не имеющие отношения к базам данных? Если да, то имеет ли это смысл?

Введение



1. Какова цель этого FAQ?

Этот FAQ предназначен для ответов на некоторые вопросы относительно новой cреды разработки Borland International, называемой Delphi. Этот документ, в действительности, не FAQ в полном смысле этого термина , потому что некоторые из вопросов, на которые здесь есть ответы, не очень часто задают на самом деле.
Вначале мы выпускали FAQ, куда помещали все доступные сведения о Delphi в текстовом виде. Далее была промежуточная версия в формате WinHelp. Теперь, после ряда трансформаций FAQ обличен в форму HTML.

2. Как я могу получить последнюю версию FAQ?

Проще всего зайти на наш WWW-сервер (www.demo.ru) и загрузить оттуда свежие версии всех имеющихся материалов, которые, кстати, помимо Delphi, охватывают весь спектр продуктов, выпускаемых фирмой Borland International. Также вы можете получить текстовую версию данных материалов, загрузив файл delfaqs.zip.

Вопросы общего характера



1. Что такое Delphi?

Delphi - это достаточно новый продукт Borland International для быстрого создания приложений (RAD). Высокопроизводительный инструмент визуального построения приложений, работающих с базами данных в архитектуре клиент-сервер, Internet/Intranet, а также для локальных машин и файл-серверной архитектуры. Этот инструментарий включает в себя настоящий компилятор кода и предоставляет средства визуального программирования, несколько похожие на те, что можно обнаружить в Microsoft Visual Basic или в других инструментах визуального проектирования. Лежащий в основе Delphi язык - Object Pascal, который является расширением
объектно-ориентированного языка Pascal (Turbo/Borland Pascal, начиная с версии 5.5). В Delphi также входят локальный SQL-сервер InterBase 4.0, генераторы отчетов, библиотеки визуальных компонентов, и прочее хозяйство, необходимое для того, чтобы чувствовать себя совершенно уверенным при профессиональной разработке информационных систем или просто программ для Windows-среды. Поскольку в архитектуре клиент-сервер де-факто сложилось такое положение, что клиентские станции работают, как правило, в Windows-среде, а SQL-сервер - в операционной системе UNIX, Delphi Client-Server может служить удобным инструментом для скоростной разработки приложений.

2. Для кого предназначен Delphi?

Прежде всего профессиональным разработчикам, желающим очень быстро разрабатывать приложения в архитектуре клиент-сервер. Delphi производит небольшие по размерам (до 15-30 Кбайт в Delphi 3.x !) высокоэффективные исполняемые модули (.exe и .dll), поэтому в Delphi должны быть прежде всего заинтересованы те, кто разрабатывает продукты на продажу. С другой стороны небольшие по размерам и быстро исполняемые модули означают, что требования к клиентским рабочим местам существенно снижаются - это имеет немаловажное значение и для конечных пользователей. Помимо стандартных клиентских приложений (Delphi 1.0 и 2.0), Delphi 3.x также имеет средства для созданий приложений в многозвенной архитектуре.

3. Преимущества Delphi по сравнению с аналогичными программными продуктами.


4. Какие есть версии Delphi?

В феврале 1995 года была выпущена первая версия Delphi, которая генерировала код, исполняемый под операционной системой Windows 3.1x.

В начале февраля 1996 года объявлено о выходе второй версии продукта, которая генерирует уже 32-разрядный код для Windows 95 и Windows NT и использует все преимущества 32-разрядных приложений - более высокая скорость обработки данных, большее количество возможностей для приложения и др. Вторая версия Delphi предлагается уже в трех вариантах: Delphi Desktop, Delphi Developer и Delphi Client/Server Suite. Версии Desktop и Developer включают в себя Delphi Desktop 1.0, а Client/Server Suite - Delphi Client/Server 1.0.

В ближайшем будущем ожидается версия Delphi 3.0, которая также будет создавать 32-разрядные приложения со встроенной поддержкой стандартов COM/DCOM, ActiveX, улучшенными средствами работы с базами данных и т.д. Варианты поставки, судя по всему, будут аналогичны второй версии.

5. Сколько дискового пространства, памяти, и т.д., нужно для работы Delphi?

1.0Минимальная установка Delphi 1.0 требует приблизительно 30 Мбайт на диске, и полная установки - 80 Мбайт. Чтобы Delphi работал хорошо, нужен 486 процессор с 8 Мбайт ОЗУ, хотя мы рекомендовали бы 16 Мбайт. Практика показывает, что скорость CPU не является критическим параметром.

2.0Для 32-разрядных версий Delphi требования увеличиваются. Полная установка занимает чуть более 100 Мбайт, оперативной памяти желательно иметь не менее 16 Мбайт. 32 Мбайт ОЗУ достаточно, чтобы комфортно работать и отлаживать программы в Delphi, используя при этом загруженный на этой же машине Local Interbase.

6. Сколько занимает места программа, выводящая текст "Hello, World!", изготовленная на Delphi?

Меньше 170Кб, если имеется в виду программа, "собранная" обычным для Delphi способом. При этом сразу же подключается стандартная поддержка форм и пр. Тем не менее при помощи Паскаля, поддержимаемого Delphi, можно  написать программу, которая ничем по своим качествам не будет отличаться от программы, написанной в BP7.0. (То есть размер такой программы может быть около 15Кб) Рекорд - 3.5 Кб!!

3.0Но и это еще не все. Концепция пэкиджей (paсkages), введенная в Delphi 3.0, позволяет создавать программы, код которых будет составлять всего несколько килобайт + разделяемые между всеми приложениями библиотеки времени выполнения, оформленные в виде DLL.

7. Hасколько трудно научиться работе с Delphi?

Если вам повезло, то вы уже имеете большой опыт работы и с Borland Pascal With Objects, и с Visual Basic. Если вам подходит данное описание, тогда Delphi будет для вас сразу понятен. А теперь для остальных: Чтобы полностью  использовать возможности среды Delphi, вы должны знать Pascal , вы должны иметь некоторые знания об объектно-ориентированном программировании и вы должны знать о программировании событий. Если вы преодолели эти три препятствия, то вы имеете все необходимые знания. С другой стороны , большинству людей не нужно полностью использовать все возможности среды. Если вы хотите создать приложение, которое не делает ничего особенно причудливого, то даже без особого программирования вы в течение 5-10 минут сможете собрать из визуальных компонент Delphi что-нибудь достаточно мощное и на удивление работоспособное.

Приложения, созданные в среде Delphi, отличаютя повышенной надежностью. Встроенные механизмы RTTI и обработки исключений вместе со строго типизированным языком Object Pascal изначально закладывают в программы устойчивость к всевозможным сбоям, которые могут произойти в операционной системе, на SQL-сервере или непосредственно в вашей программе. Даже ничего не делая самому, всегда можно как минимум узнать, что произошла ошибка и где, а зачастую и получить исчерпывающую дополнительную информацию. Во многом это заслуга и компилятора Borland с языка Pascal, история которого насчитывает более 13 лет.

8. Можно ли создавать многопользовательские приложения для баз данных в Delphi Desktop или Developer?

Используя Delphi Desktop 1.0 или Delphi Developer 2.0, можно разработать приложение, которое общается с каким-нибудь SQL сервером, используя ODBC драйвер. Hе было особых проблем, чтобы заставить работать ODBC, и скорость доступа к данным была вполне приемлема. Тем не менее те, кто уже успел опробовать оба варианта, в один голос утверждают, что через IDAPI работать быстрее. В Delphi Desktop 2.0 работа через ODBC не поддерживается.

9. Какова история появления Delphi?

Delphi - потомок Турбо-Паскаля , который впервые появился в 1983г для операционной системы CP/M . Турбо-Паскаль был перенесен в MS-DOS в начале 1984г. Hа протяжении всего начала истории IBM PC, Турбо-Паскаль был действительно наиболее популярным языком для серьезных разработок - главным образом потому, что это был настоящий компилятор, включающий редактор текстов программ и все необходимое, что стоило $19.95 и выполнялось на компьютере со 128 Кбайт. Borland представил Турбо-Паскаль для Windows в 1990г. Последней версией Borland Pascal (как это стало называться), не считая Delphi, был версии 7.0 в конце 1992г.

1.0Delphi 1.0 разрабатывался что-то около 18 месяцев или двух лет. Выпускались различные beta-версии и пререлизы, включая несколько сотен копий, которые отдали во время выставки Software Development '95. Delphi официально анонсирован в США 14 февраля 1995г, и первые копии были разосланы 28 февраля. В России Delphi появился в первых числах апреля, хотя ранее действовала программа раннего ознакомления (EEP) в рамках которой те, кто спешил начать осваивать новый продукт, получали бета-версию Delphi и пререлиз документации.

2.0После выпуска первой версии продукта компания Borland направила свои усилия на перенос Delphi в 32-разрядные операционные системы - Windows 95 и Windows NT. Этот процесс успешно завершился и 10 февраля 1996г. Borland Intrenational объявил о выходе второй версии продукта, которая генерирует уже 32-разрядный код для Windows 95 и Windows NT и использует все преимущества 32-разрядных приложений - более высокая скорость обработки данных, большее количество возможностей для приложения и др.

3.0На данный момент ожидается выход третьей версии Delphi, окончательный которой предположительно появится в конце весны-начале лета 1997г. На основании предварительных версий можно сказать, что Delphi 3.0 - это еще более мощный продукт, чем Delphi 2.0, который позволяет использовать в своих разработках все основные стандарты, имеющиеся на платформе Win32/Intel - ActiveX, COM/DCOM, ISAPI/NSAPI и т.д.

10. Где можно приобрести копию Delphi?

У любого дилера Borland, а сейчас Delphi Desktop продаются, кажется, даже в книжных магазинах. Тем не менее перед приобретением Delphi поинтересуйтесь, какую поддержку обеспечивает дилер. Delphi - это довольно большой продукт, и его поддержка всегда будет нелишней.

11. Приведите сравнение производительности IDAPI и других аналогичных продуктов.

Демо-центр такими исследованиями не занимался, в них не было ни интереса ни необходимости. Однако кто-то такие тесты проводил, например по данным Jin Mai (mwj@pipeline.com) на одной таблице с 60 тыс. записей производительность операции SELECT следующая(*):

Инструмент   Формат базы данных  Время в секундах 
Delphi  Paradox  22 
VB  Access  60 
Delphi  ODBC to Access  30 
Access  ODBC to local Watcom  48 
VB  ODBC to local Watcom  33 
* использовались только версии ODBC 2.0 и Access 2.0.

Hесмотря на весьма странные данные во второй строке (VB/Access),  автор тестов их подтверждает.

12. Как можно войти в контакт с представителями Borland?

Если вы имеете соответствующие возможности , вы можете получать информацию прямо из Borland:

 Телефоны Borland АО - российского представительства Borland International:  Вы можете поговорить с представителями Демо-центра по клиент-серверным технологиям Borland (компания Epsylon Technologies) по телефонам: Можете отправить письмо с вопросами по адресу:
13. Какую техническую поддержку может получить покупатель Delphi?

Можете звонить напрямую в Borland International, все необходимые адреса есть в сопроводительных документах в коробке с Delphi.

Можете направить письмо по электронной почте в Borland International по адресу techinfo@borland.com, однако следует отметить, что качество поддержки в большой степени зависит от дилера.

Hачала свою деятельность Ассоциация пользователей Delphi. В Борланд АО организованы семинары (пока бесплатные). Раз в две недели по средам с 14:00 до 16:00 проходит тематический семинар о Delphi и других продуктах Borland. Его проводят практические специалисты по Delphi из различных организаций, в том числе и из демо-центра. Даже если вы издалека, имеет смысл посетить семинар - наверняка вы услышите что-либо интересное для себя. Тематика семинаров - самая разнообразная:

Для того, чтобы попасть на семинар, надо позвонить в Демо-центр по телефону: 913-5608, и записаться на семинар.

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

14. Выйдет ли версия Delphi, где в качестве компилятора будет использоваться BC++?

Вопрос устарел. Такой продукт (Borland C++Builder) вышел 4 февраля 1997г. По своим возможностям он практически равноценен Dehlpi 2.0. Получить более подробную информацию о данном продукте вы можете получить на страничках нашего сервера, посвященных C++Builder.

15. Сколько стоит Delphi в России?

Полная стоимость текущих версий продукта составляет:

 Delphi 1.02 Client/Server 
 Delphi 1.02 for Windows (Desktop) 
 Delphi 2.01 Client/Server Suite 
 Delphi 2.0 Developer 
 Delphi 2.0 Desktop 

Цены на Delphi 3.0 не объявлены (продукта пока нет), но предполагается, что они будут на уровне Delphi 2.0. Полный список цен на продукты, а также всевозможных вариантов Upgrade приведен в нашем прайс-листе.

16. Что можно, и чего нельзя разработать в среде Delphi? В частности, можно ли разработать в Delphi внутреннюю структуру данных для SQL-cервера, хранимые процедуры и пр.?

Понятно, что для такого открытого инструмента, как Delphi, границы "дозволенного" весьма условны. В частности, хороший пример - появление в более поздних версиях визуального компонента для работы с хранимыми процедурами. То есть это было нельзя для FieldTest 4 и стало возможным для пререлиза.

Второй пример, который появился только с версии 1.15 Delphi FAQ. В стандартной поставке Delphi не существует визуального компонента, поддерживающего обработку event alerts (событий) в InterBase. Тем не менее оказалось, что изготовить такой компонент не так уж и трудно. В Delphi 2.0 есть пример аналогичного компонента, который на самом деле оказался весьма кривым и потребовал существенной доработки для возможности нормального использования.

Вышли компоненты, позволяющие проводить процедуру инсталляции разработанного вами приложения, проводить сетевой обмен, обмениваться данными через cc:mail или Lotus Notes.

Появились компоненты, реализующие прямые линки к BTrieve, AS/400, мэйнфреймам, Informix.

17. Чем можно воспользоваться для создания инсталляционных версий приложений, разработанных в Delphi?

Для Delphi 1.0 можно, например, попробовать:

  1. Wise. Он неплохо подходит и для VB, и для BC++.
  2. Kurt. Создает иконы, меняет INI, распаковывает сжатые файлы.
  3. Существует несколько компонентов, которые помогают в создании инсталляторов и Shareware-версий продукта.
2.0Однако, последнее время практически стандартом стал инсталлятор InstallShield. Его 32-разрядный вариант для Delphi (InstallShield Express for Delphi) входит в стандартную поставку всех версий Delphi 2.0.
18. Должен ли я знать все относительно Windows API, чтобы использовать Delphi?

Может возникнуть чувство, что вы должны знать относительно Windows API в Delphi больше, нежели в Visual Basic. Это не так; вы можете работать в обеих средах с минимальным пониманием внутренней организации Windows. Однако, в обоих случаях, вы должны знать, по крайней мере, кое-что относительно Windows API, чтобы "выжать" максимум из того, что у вас есть. Различие в том, что Delphi предоставляет вам гораздо больше возможностей, чтобы делать все эти интересные вещи.
19. Должен ли я знать объектно-ориентированное программирование, чтобы использовать Delphi?

Хорошо бы. Инструментальные средства проектирования интерфейса пользователя Delphi производят объектно - ориентированный код. Однако, если вы знакомы с Visual Basic или Powerbuilder, вы, вероятно, имеете достаточное понимание OOP (Object Oriented Programming). Вы можете сделать многое в Delphi без необходимости создавать ваши собственные объекты; но при создании новых объектов действительно важно знать тонкости OOP.

Совместимость


1. Какие операционные системы Delphi поддерживает?

1.0Версия Delphi 1.0 предназначается для Windows 3.1x. Hет причин, по которым Delphi 1.0 не работал бы в системах, которые обеспечивают эмуляцию Windows 3.1, подобно OS/2 Warp, Windows NT, UnixWare 2.0 и т.д.

2.0Delphi 2.0 предназначена для работы под Win32/Intel - на данный момент это Windows 95 (в т.ч. OSR2), Windows NT (3.5 и 4.0).

3.0Delphi 3.0 также работает под Win32, но на данный момент некоторые возможности, предоставляемые продуктом можно использовать только в ОС Windows NT 4.0. Возможно, очередная версия Windows 95 (Windows 97), будет обладать этими функциями.

2. Какие средства управления проектом совместимы с Delphi?

1.0Delphi 1.0 Client/Server поддерживает совместимость с PVCS компании InterSolv.

2.0Delphi 2.0 Client/Server Suite включает в себя комплект PVCS, интегрированный в IDE.

Кроме того, должна быть возможность совмещения с большинством систем контроля исходных текстов. Однако, формы в Delphi сохраняются в двоичном формате, так что пакет управления исходными текстами должен поддерживать двоичные данные для того, чтобы это работало с Delphi . Если у вас есть администратор исходных текстов, который просто не может иметь дело с двоичными файлами, то согласно документам, вы может сохранять формы в виде ASCII текста для редактирования или в целях контроля за версиями. Файлы ASCII могут также загружаться и снова сохраняться в двоичном *.DFM формате.

MKS Source Integrity (MKS SI - 2-ой на рынке администраторов исходного текста для PC/PCLAN с более чем 35,000 разработчиками, использующими SI) также предлагает средства интеграции в Delphi. Эти средства в настоящее время поставляются наряду с MKS SI.

3. Можно ли в Delphi использовать DLL, разработанные в C или C ++?

Delphi способен вызывать и получать обратные вызовы (callback) из любого стандартного модуля DLL для Windows.

4. Можно ли вызывать код, созданный в  Delphi из C или C ++?

Delphi может генерировать DLL, которые можно вызывать из C, C++, Visual Basic, PowerBuilder, или чего-нибудь еще, что понимает стандартные Windows DLL. Имеется пример DLL в каталоге DEMOS\DB\DLL из комплекта Delphi.

5. Что известно о пакетах других фирм, которые работают (или не работают) с Delphi?

6. Есть ли поддержка Dynamic Data Exchange (DDE), VBX, OLE, OCX, OpenDoc?

Да, Delphi позволяет с разной степенью комфорта использовать все технологические стандарты, имеющиеся в Windows.

7. Можно ли на Delphi написать VBX или OCX?

1.0Можно. Ведь по сути дела VBX - это .dll, написанная по определенным правилам. Однако скорее всего вам потребуется дополнительно соответствующий SDK от компании Microsoft. Существует даже статья, где обсуждаются все аспекты такой работы.

2.0Относительно OCX все то же самое, что и относительно VBX.

3.0Delphi 3.0 позволяет визуально создавать элементы ActiveX.

8. Какие генераторы отчетов можно использовать с Delphi кроме ReportSmith?

В порядке предпочтения:

  1. Имеется QuickReport - генератор отчетов, сделанный в виде компонентов и встраиваемый непосредственно в приложение. Успех 16-разрядной верси привел к тому, что начиная с версии Delphi 2.0 32-разрядный QuickReport входит в стандартный вариант поставки.
  2. Crystal Reports - подключается через VBX.
  3. R&R Report Writer - хорошо работает с Delphi, позволяет выполнять запросы, preview, вызовы DLL, передачу параметров. (производитель - Concentric Data Systems)
  4. Также есть еще несколько генераторов отчетов, выполненных аналогично QuickReport в виде компонентов..
3.0Следует также заметить, что на данный момент Borland International продал ReportSmith другой фирме, так что его присутствие в Delphi 3.0 под вопросом.

Базы данных - Interbase и локальные данные



1. Каково определение IDAPI? Что такое SQL Links?

IDAPI это Integrated Database Application Program Interface. BDE (Borland Database Engine) - средство доступа ко множеству источников данных через один API. IDAPI - это просто API для BDE. IDAPI включает все функции, необходимые для доступа к данным , манипулирования ими и т.д. Delphi, Borland C++, C++Builder, Intrabulder, dBASE for Windows, и Paradox for Windows используют эти функции. Вы можете использовать их в своих программах. Вы получите документацию, если купите BDE. Там перечислены все доступные функции и что они делают. Если посмотреть на исходники VCL в Delphi, то можно увидеть, как они используются. Они начинаются с "Dbi" (e.g. DbiCreateTable).

SQL Links - набор родных драйверов (native drivers), которые нужны для работы с удаленными серверами баз данных.

2. Hеобходим ли IDAPI для доступа к данным в Delphi? Можно ли включить IDAPI внутрь EXE, чтобы распространять программу без установки IDAPI на пользовательском компьютере?

IDAPI необходим для доступа к данным в Delphi. Сам IDAPI во внутрь исполняемого файла ни коим образом не встраивается (да это было бы и не целесообразно). Вместе с Delphi поставляется редистрибутивный вариант BDE, которая устанавливает на "чистую" машину лишь только BDE.

2.0InstallShield Express for Delphi может создавать инсталляторы, которые устанавливают на машину как ваше приложение, так и BDE.

3.0Delphi 3.0 включает средства для создания "тонких" клиентов, работающих на машине, на которой не установлен BDE. Подробности смотрите в FAQ по Delphi 3.0.

3. Где можно найти описание функций и типов данных BDE?

1.0DBIPROCS.INT в директории DELPHI\DOC\ содержит список функций BDE, передаваемые параметры, возвращаемое значение и краткое описание каждой. DBITYPES.INT - список типов, используемых функциями BDE. Для вызова любой функции BDE добавьте следующие модули в раздел uses: DBITYPES, DBIPROCS и DBIERRS.

2.0Delphi 2.0 включает в себе описание функций BDE в формате WinHelp. Также все три модуля из Delphi 1.0 (DBITYPES.DCU, DBIPROCS.DCU и DBIERRS.DCU) теперь объединены в единый BDE.DCU.

4. Можно ли программным образом добавить псевдоним (alias) в IDAPI.CFG?

1.0В BDE есть для этого функция DbiAddAlias.

2.0В Delphi 2.0 данная функциональность находится внутри компонента TSession (методы AddAlias, AddStandardAlias).

5. Я получаю сообщение от BDE при редактировании записи 'Multiple records found but only one expected'. Что бы это значило?

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

6. Обработка исключений (exceptions) BDE.

Информация об ошибке BDE может быть получена для использования в приложении из объекта EDBEngineError. Исключительная ситуация EDBEngineError обрабатывается в программе с помощью конструкции try ... except. Когда возникает исключительная ситуация BDE, то может быть создан объект EDBEngineError и различные поля этого объекта могут быть использованы для программного определения, что не в порядке и что требуется для исправления ситуации. Далее, для данной исключительной ситуации может быть сгенерировано несколько сообщений об ошибках. Это требует организации перебора сообщений об ошибках для получения нужной информации.

7. Какому стандарту SQL соответствует SQL в InterBase?

SQL в Local & Remote InterBase соответствует SQL-92 с элементам SQL III (более поздними расширениями).

8. Как удалить генераторы (GENERATORS) из базы данных InterBase?

Никак. К сожалению, в существующих версиях InterBase это невозможно.

9. Как выбрать протокол при соединении с InterBase из Delphi?

В Server Manager (ibmgr.exe), Windows interactive SQL (wisql.exe) и Communication Diagnostic Tool (comdiag.exe) Вы отдельно задаете имя сервера, протокол и 'путь на базу' (локальный путь на сервере, а не путь до базы с Вашей машины)

А в BDE Configuration Utility все немного не так - на странице Drivers у драйвера Interbase есть параметр SERVER NAME, заполненный как IB_SERVER:/PATH/DATABASE.GDB, а у любого InterBase Alias есть параметры SERVER NAME и PATH, но ни у драйвера ни у алиаса нет протокола. Для Interbase протокол указывается стилем написания пути к базе:

Протокол  SERVER NAME  Пример 
TCP/IP  IB_SERVER:PATH\DATABASE.GDB  nt:c:\ib\base.gdb; unix:/ib/base.gdb 
IPX/SPX  IB_SERVER@PATH\DATABASE.GDB  nw@sys:ib\base.gdb 
NETBEUI  \\IB_SERVER\PATH\DATABASE.GDB  \\nt\c:\ib\base.gdb 

10. Можно ли использовать какие-нибудь ODBC драйверы, которые получены с другими СУБД?

В общем, да. Мы не столкнулись с какими-то ODBC драйверами, которые не работают с Delphi, но, с другой стороны, мы не пробовали действительно экзотические драйверы. Основные трудности вызвали специфические ODBC-драйверы от Microsoft. Похоже, что ODBC и ODBC от Microsoft - это разные вещи.

11. Проблемы с именами таблиц в ODBC-драйверах.

При использовании ODBC-драйверов, если у вас появляются ошибки при открытии таблицы - установите порядок сортировки (SORT ORDER) хотя-бы Paradox ASCIIi. Это, например, помогает при доступе к базам данных Lotus Notes (ODBC-драйвер фирмы Casahl).

12. Какой формат данных предпочесть в Delphi? dBase или Paradox?

Если вам действительно все равно, то вот несколько пунктов 'за' формат Paradox:

  1. Широкий выбор типов полей, включая автоинкремент, BLOBs, и т.п.
  2. Соблюдение целостности данных, контроля данных, обновления индексов на уровне ядра BDE.
  3. Первичный индекс таблицы автоматически соблюдает уникальность записей, вторичные индексы обеспечивают отсортированный "вид" на записи таблицы.
13. Как нужно писать функцию "change password"  для таблицы Парадокса? 

Нет способа сделать это в пределах Delphi VCL. Кажется, это довольно серьезное упущение. Однако, есть возможность сделать это напрямую через Borland Database Engine через интерфейс предоставляемый модулями DBIPROCS.DCU и DBITYPES.DCU (1.0) или BDE.DCU (2.0). Нужно использовать функцию DbiDoRestructure.
14. Есть ли какая-нибудь процедура для перестройки разрушенного индекса, типа TUTILITY.EXE из PdoxWin?

BDE включает функцию для этого - DbiRegenIndexes.
15. Есть ли какая-нибудь процедура для упаковки таблицы dBase?

В BDE есть функция DbiPackTable.

16. Как для .dbf таблицы создать индекс по выражению?

Нужно использовать процедуру AddIndex с параметром ixExpression, например:


17. Как создать в Paradox вторичный индекс с упорядочиванием по убыванию?

Используйте флаг ixDescending:


18. Хочу узнать номер текущей записи, как это сделать?

В общем случае - никак. В случае таблицы Paradox - есть в BDE функция DbiGetSeqNo, которая возвращает логический номер записи. Но при использовании на форме TDBGrid она может давать не всегда правильные значения.

19. Как посмотреть удаленные записи в таблице .dbf? А как их восстановить?

Для того, чтобы удаленные записи были доступны, нужно установить соответствующее свойство для курсора с помощью функции BDE DbiSetProp:

Проверка удалена запись или нет производится через функцию чтения записи DbiGetRecord. Для восстановления записи применяется функция DbiUndeleteRecord.

20. Упаковка таблицы.

Упаковать таблицу DBF можно открыв ее компонентом TTable и вызвав функцию BDE DbiPackTable:


21. Почему я получаю ошибку 'Index out of range' когда использую TTable.FindNearest и TTable.FindKey для таблицы dBase с индексом по выражению?

Методы TTable.FindKey и TTable.FindNearest не могут работать с таким видом индексов. Вместо этих методов используйте TTable.GotoKey и TTable.GotoNearest, которые прекрасно работают с ними.

22. Как программным образом создать таблицу Paradox с автоинкрементным полем?

Вам следует использовать компонент TQuery и SQL-предложение типа:


23. Почему я не могу использовать опцию ixUnique при создании индекса в таблице Paradox с помощью метода AddIndex компонента TTable?

Опции, используемые в методе AddIndex компонента TTable зависят от типа таблиц. Например, опция ixUnique работает с таблицей dBase, но не с Paradox. Следующая таблица показывает, как эти опции используются для таблиц dBase и Paradox.

Index Options  dBase  Paradox 
ixUnique 
ixExpression 
ixDescending 
ixNonMaintained 
ixPrimary 
ixCaseInsensitive 


24. Генерация уникальных идентификаторов для таблиц.

Для более полного ознакомления с этим вопросом рекомендуется обратится к статье Максима Михеенкова в 1-ом номере российского журнала СУБД за 1995 год. А коротко можно сказать следующее.

Для таблиц Paradox вы можете пользоваться специальными типами полей, гарантирующими уникальность значения поля в записи - типы AutoIncrement и TimeStamp (с использованием функций DateXXX - модуль SysUtils).

Для Interbase вы можете использовать генераторы, которые возвращают уникальное значение.

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

25. Можно-ли использовать Crystal Report с таблицами формата Paradox 5.0?

Да, можно, только если вам удастся получить ODBC-драйвер для таблиц Paradox. Во всяком случае на Crystal BBS находится файл bde.zip, который и содержит этот драйвер.

26. Как открыть таблицу dBase, у которой поврежден (утерян) индексный MDX файл?

Как я могу использовать таблицу dBase без необходимого для нее MDX файла?

При создании таблицы dBASE с индексным файлом MDX в заголовке DBF файла устанавливается байт со смещением 28 (десятичное) от начала файла. При открытии таблицы, у которой данный байт установлен, также происходит попытка открыть MDX файл; если это не удается, то возникает исключение (exception). Для решения проблемы достаточно прописать в DBF файл 0 по указанному смещению.

27. Как определить номер текущей записи для набора данных?

Если набор данных основан на таблицах Paradox или dBASE, то номер записи можно определить с помощью вызовов BDE. BDE не поддерживает номер записи для наборов данных на SQL сервере; если ваш сервер поддерживает нумерацию записей, вам нужно обратиться к его документации.

Базы данных - прочие SQL сервера


1. Как осуществляется доступ к базе данных из Delphi?

Сначала вы должны в утилите BDE Configuration Utility (bdecfg или bdecfg32) определить псевдоним для базы данных, с которой вы хотите работать. Это позволит вам избежать написания сложного пути к базе данных в вашем приложении; вы теперь только ссылаетесь на псевдоним. Затем вы создаете минимум три объекта на форме: TTable или TQuery, который фактически общается с базой данных через псевдоним и получает данные; объект TDataSource, который связывает данные и визуальные компоненты; по крайней мере один компонент, отображающий данные.

Если вы потратили несколько часов, чтобы заставить все это работать, но ничего не получилось, попробуйте установить свойство Active у TTable или TQuery в True. Это откроет таблицу в базе данных. 
2. Какие серверы данных поддерживает Delphi?

Delphi (в старших вариантах поставки) напрямую работает с Oracle, Informix, InterBase, DB/2, Sybase, MS SQL Server. Вы можете использовать ODBC драйверы третьих фирм, чтобы работать с любым сервером. Наиболее известные производители качественных ODBC драйверов:

2.0Есть специализированный вариант Delphi 2.0 - Delphi/400, который ориентирован исключительно на работу с AS/400.

3. Cуществует ли способ работать из Delphi с AS/400, исключая ODBC?

1.0В состав Delphi 1.0 не входит, но доступен отдельно визуальный 16-разрядный компонент компании Gerald Limited.

2.0Есть специализированный вариант Delphi 2.0 - Delphi/400, который ориентирован исключительно на работу с AS/400.

4. Cуществует ли способ работать из Delphi с Lotus Notes (IBM Notes), за исключением ODBC?

1.0Существует только 16-разрядный линк для Notes. В состав Delphi он не входит (разработан компанией Brainstorm) и поставляется отдельно по каналам Borland. Спрашивайте дилеров Borland.

5. Можно ли создавать с помощью Delphi сетевые приложения не для схемы клиент-сервер, а для схемы с разделяемыми файлами (как, например, в FoxPro)?

Компонент TTable имеет свойство Exclusive; если Exclusive=False, то одну и ту же таблицу могут просматривать и редактировать несколько пользователей. При редактировании таблицы текущая запись автоматически блокируется. Если есть необходимость заблокировать несколько записей или всю таблицу, то для этого придется использовать функции BDE - модуль DBIPROCS (1.0) или BDE (2.0). Кстати, существенно, что это можно делать и на Delphi Desktop - отсюда вывод: сетевые приложения (в файл-серверной архитектуре) можно делать и на Delphi Desktop.

6. Можно ли работать при помощи Delphi не с IDAPI - или ODBC-драйверами, а с "родными" API каких-либо СУБД?

Да, можно. Это еще один пример открытости Delphi. В одном из проектов Демо-центра появилась необходимость прямого обращения к API SQL-сервера. Был написан соответствующий интерфейс поверх Borland InterBase API - и все заработало. Аналогично: существуют написанные компоненты для работы с AS/400 и для мэйнфреймов.

7. Какие версии Informix (Online, I-NET) поддерживают SQL Links?

1.0BDE версии до 2.51 поддерживает работу с клиентской частью Informix ESQL/C I*NET 4.x. BDE версии 2.51-2.52 поддерживается ESQL/C I*NET 5.x.

32 SQL Link версии 3.5 и выше поддерживает ESQL/C I*NET 7.x.

8. Как работать с таблицами в виде текстовых файлов (ASCII)?

Информацию об этом вы можете найти в каталоге DELPHI\DOC. Файл называется ASCIIDRV.TXT.

9. Как правильно указать имя сервера Oracle?

Пишите имя по правилам Oracle - перед именем не забудьте поставить @.

10. Что такое транзакции (Transactions)?

SQL database серверы обрабатывают запросы в 'логических единицах работы' которые и называются транзакциями. То есть транзакция - это группа связанных операций (SQL запросов) которые все должны быть выполнены успешно перед тем, как сервер закончит (commit) изменение базы данных. Либо вся это группа будет выполнена, либо нет. Транзакции обеспечивают целостность базы данных ...

11. Как в Delphi управлять транзакциями?

В Delphi может управлять транзакции так:

  1. Implicitly - сам стартует и коммитит транзакции по необходимости, когда программа вызывает метод Post.
  2. Explicitly -
    1. StartTransaction, Commit & RollBack методы TDatabase.
    2. При помощи SQL запросов через TQuery - это зависит от конкретного SQL сервера.
Неявные (1) транзакции выполняют TTable & TQuery.
Для явных (2.1) транзакций требуется TDatabase.
Для явных (2.2) транзакций требуется TQuery.

Важно:
При определении параметров драйвера SQLPASSTHRU MODE - определяет будут ли passthrough SQL (PSQL) & стандартные вызовы BDE (BDEC) использовать один и тот же connect к SQL серверу.

Возможные варианты:

  1. NOT SHARED - PSQL & BDEC используют разные соединения с базой и следовательно влияют (интерферируют) друг на друга также как разные пользователи одной базы (см. Transaction isolation levels)
  2. SHARED:
    1. SHARED AUTOCOMMIT - PSQL & BDEC используют одно соединение с базой, каждый PSQL запрос автоматически коммитятся.
    2. SHARED NOAUTOCOMMIT - PSQL & BDEC используют одно соединение с базой, PSQL запросы коммитятся 'вручную' (способом 2.1).

Еще важнее:
Если Вы все-таки решили управлять транзакциями при помощи SQL запросов через TQuery, то SQLPASSTHRU MODE должно быть NOT SHARED, иначе Implicit & Explicit транзакции могут влиять друг на друга и привести к 'неожиданным результатам'!

12. Использование формата Access 2.0 в Delphi.

Подробное описание подключения:

Примечание: избегайте русских названий имен таблиц, использования пробела в именах таблиц, а также русских имен полей в DB Access. 
13. Можно ли при помощи Delphi реализовывать проекты, не имеющие отношения к базам данных? Если да, то имеет ли это смысл?

В таком случае стоит воспользоваться вариантом Delphi Desktop или Developer. Выигрыш по скорости разработки очевидно будет значительным; в частности, разработка интерфейса программы под Windows производится действительно скоростными методами. Хороший пример - Screen Saver для Windows.

[Содержание][Вперед]

 

Hosted by uCoz