| ||||||||||||||||
![]() | ||||||||||||||||
| ||||||||||||||||
![]() | ||||||||||||||||
| ||||||||||||||||
![]() |
Часто задаваемые общие вопросы по Borland Delphi Часть 1 Введение Вопросы общего характера
1. Какова цель этого FAQ? Этот FAQ предназначен для ответов на некоторые вопросы относительно новой cреды разработки Borland International, называемой Delphi. Этот документ, в действительности, не 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 может служить удобным инструментом для скоростной разработки приложений. Прежде всего профессиональным разработчикам, желающим очень быстро разрабатывать приложения в архитектуре клиент-сервер. Delphi производит небольшие по размерам (до 15-30 Кбайт в Delphi 3.x !) высокоэффективные исполняемые модули (.exe и .dll), поэтому в Delphi должны быть прежде всего заинтересованы те, кто разрабатывает продукты на продажу. С другой стороны небольшие по размерам и быстро исполняемые модули означают, что требования к клиентским рабочим местам существенно снижаются - это имеет немаловажное значение и для конечных пользователей. Помимо стандартных клиентских приложений (Delphi 1.0 и 2.0), Delphi 3.x также имеет средства для созданий приложений в многозвенной архитектуре.
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, улучшенными средствами работы с базами данных и т.д. Варианты поставки, судя по всему, будут аналогичны второй версии.
Меньше 170Кб, если имеется в виду программа, "собранная" обычным для Delphi способом. При этом сразу же подключается стандартная поддержка форм и пр. Тем не менее при помощи Паскаля, поддержимаемого Delphi, можно написать программу, которая ничем по своим качествам не будет отличаться от программы, написанной в BP7.0. (То есть размер такой программы может быть около 15Кб) Рекорд - 3.5 Кб!!
Если вам повезло, то вы уже имеете большой опыт работы и с Borland Pascal With Objects, и с Visual Basic. Если вам подходит данное описание, тогда Delphi будет для вас сразу понятен. А теперь для остальных: Чтобы полностью использовать возможности среды Delphi, вы должны знать Pascal , вы должны иметь некоторые знания об объектно-ориентированном программировании и вы должны знать о программировании событий. Если вы преодолели эти три препятствия, то вы имеете все необходимые знания. С другой стороны , большинству людей не нужно полностью использовать все возможности среды. Если вы хотите создать приложение, которое не делает ничего особенно причудливого, то даже без особого программирования вы в течение 5-10 минут сможете собрать из визуальных компонент Delphi что-нибудь достаточно мощное и на удивление работоспособное. Приложения, созданные в среде Delphi, отличаютя повышенной надежностью. Встроенные механизмы RTTI и обработки исключений вместе со строго типизированным языком Object Pascal изначально закладывают в программы устойчивость к всевозможным сбоям, которые могут произойти в операционной системе, на SQL-сервере или непосредственно в вашей программе. Даже ничего не делая самому, всегда можно как минимум узнать, что произошла ошибка и где, а зачастую и получить исчерпывающую дополнительную информацию. Во многом это заслуга и компилятора Borland с языка Pascal, история которого насчитывает более 13 лет. Используя Delphi Desktop 1.0 или Delphi Developer 2.0, можно разработать приложение, которое общается с каким-нибудь SQL сервером, используя ODBC драйвер. Hе было особых проблем, чтобы заставить работать ODBC, и скорость доступа к данным была вполне приемлема. Тем не менее те, кто уже успел опробовать оба варианта, в один голос утверждают, что через IDAPI работать быстрее. В Delphi Desktop 2.0 работа через ODBC не поддерживается. Delphi - потомок Турбо-Паскаля , который впервые появился в 1983г для операционной системы CP/M . Турбо-Паскаль был перенесен в MS-DOS в начале 1984г. Hа протяжении всего начала истории IBM PC, Турбо-Паскаль был действительно наиболее популярным языком для серьезных разработок - главным образом потому, что это был настоящий компилятор, включающий редактор текстов программ и все необходимое, что стоило $19.95 и выполнялось на компьютере со 128 Кбайт. Borland представил Турбо-Паскаль для Windows в 1990г. Последней версией Borland Pascal (как это стало называться), не считая Delphi, был версии 7.0 в конце 1992г.
У любого дилера Borland, а сейчас Delphi Desktop продаются, кажется, даже в книжных магазинах. Тем не менее перед приобретением Delphi поинтересуйтесь, какую поддержку обеспечивает дилер. Delphi - это довольно большой продукт, и его поддержка всегда будет нелишней. Демо-центр такими исследованиями не занимался, в них не было ни интереса ни необходимости. Однако кто-то такие тесты проводил, например по данным Jin Mai (mwj@pipeline.com) на одной таблице с 60 тыс. записей производительность операции SELECT следующая(*):
Hесмотря на весьма странные данные во второй строке (VB/Access), автор тестов их подтверждает. Если вы имеете соответствующие возможности , вы можете получать информацию прямо из Borland:
13. Какую техническую поддержку может получить покупатель Delphi? Можете звонить напрямую в Borland International, все необходимые адреса есть в сопроводительных документах в коробке с Delphi. Можете направить письмо по электронной почте в Borland International по адресу techinfo@borland.com, однако следует отметить, что качество поддержки в большой степени зависит от дилера. Hачала свою деятельность Ассоциация пользователей Delphi. В Борланд АО организованы семинары (пока бесплатные). Раз в две недели по средам с 14:00 до 16:00 проходит тематический семинар о Delphi и других продуктах Borland. Его проводят практические специалисты по Delphi из различных организаций, в том числе и из демо-центра. Даже если вы издалека, имеет смысл посетить семинар - наверняка вы услышите что-либо интересное для себя. Тематика семинаров - самая разнообразная: Для того, чтобы попасть на семинар, надо позвонить в Демо-центр по телефону: 913-5608, и записаться на семинар. Методические материалы для проведения таких семинаров сохраняются, так что тем, кто желает у себя в регионе организовать нечто подобное, звоните в Демо-центр Александру Сергееву. Вопрос устарел. Такой продукт (Borland C++Builder) вышел 4 февраля 1997г. По своим возможностям он практически равноценен Dehlpi 2.0. Получить более подробную информацию о данном продукте вы можете получить на страничках нашего сервера, посвященных C++Builder. Полная стоимость текущих версий продукта составляет:
Цены на Delphi 3.0 не объявлены (продукта пока нет), но предполагается, что они будут на уровне Delphi 2.0. Полный список цен на продукты, а также всевозможных вариантов Upgrade приведен в нашем прайс-листе. Понятно, что для такого открытого инструмента, как Delphi, границы "дозволенного" весьма условны. В частности, хороший пример - появление в более поздних версиях визуального компонента для работы с хранимыми процедурами. То есть это было нельзя для FieldTest 4 и стало возможным для пререлиза. Второй пример, который появился только с версии 1.15 Delphi FAQ. В стандартной поставке Delphi не существует визуального компонента, поддерживающего обработку event alerts (событий) в InterBase. Тем не менее оказалось, что изготовить такой компонент не так уж и трудно. В Delphi 2.0 есть пример аналогичного компонента, который на самом деле оказался весьма кривым и потребовал существенной доработки для возможности нормального использования. Вышли компоненты, позволяющие проводить процедуру инсталляции разработанного вами приложения, проводить сетевой обмен, обмениваться данными через cc:mail или Lotus Notes. Появились компоненты, реализующие прямые линки к BTrieve, AS/400, мэйнфреймам, Informix. Для Delphi 1.0 можно, например, попробовать:
![]() 18. Должен ли я знать все относительно Windows API, чтобы использовать Delphi? Может возникнуть чувство, что вы должны знать относительно Windows API в Delphi больше, нежели в Visual Basic. Это не так; вы можете работать в обеих средах с минимальным пониманием внутренней организации Windows. Однако, в обоих случаях, вы должны знать, по крайней мере, кое-что относительно Windows API, чтобы "выжать" максимум из того, что у вас есть. Различие в том, что Delphi предоставляет вам гораздо больше возможностей, чтобы делать все эти интересные вещи. Хорошо бы. Инструментальные средства проектирования интерфейса пользователя Delphi производят объектно - ориентированный код. Однако, если вы знакомы с Visual Basic или Powerbuilder, вы, вероятно, имеете достаточное понимание OOP (Object Oriented Programming). Вы можете сделать многое в Delphi без необходимости создавать ваши собственные объекты; но при создании новых объектов действительно важно знать тонкости OOP. 1. Какие операционные системы Delphi поддерживает?
Кроме того, должна быть возможность совмещения с большинством систем контроля исходных текстов. Однако, формы в Delphi сохраняются в двоичном формате, так что пакет управления исходными текстами должен поддерживать двоичные данные для того, чтобы это работало с Delphi . Если у вас есть администратор исходных текстов, который просто не может иметь дело с двоичными файлами, то согласно документам, вы может сохранять формы в виде ASCII текста для редактирования или в целях контроля за версиями. Файлы ASCII могут также загружаться и снова сохраняться в двоичном *.DFM формате. MKS Source Integrity (MKS SI - 2-ой на рынке администраторов исходного текста для PC/PCLAN с более чем 35,000 разработчиками, использующими SI) также предлагает средства интеграции в Delphi. Эти средства в настоящее время поставляются наряду с MKS SI. Delphi способен вызывать и получать обратные вызовы (callback) из любого стандартного модуля DLL для Windows. Delphi может генерировать DLL, которые можно вызывать из C, C++, Visual Basic, PowerBuilder, или чего-нибудь еще, что понимает стандартные Windows DLL. Имеется пример DLL в каталоге DEMOS\DB\DLL из комплекта Delphi. Да, Delphi позволяет с разной степенью комфорта использовать все технологические стандарты, имеющиеся в Windows.
В порядке предпочтения:
![]() Базы данных - 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), которые нужны для работы с удаленными серверами баз данных. IDAPI необходим для доступа к данным в Delphi. Сам IDAPI во внутрь исполняемого файла ни коим образом не встраивается (да это было бы и не целесообразно). Вместе с Delphi поставляется редистрибутивный вариант BDE, которая устанавливает на "чистую" машину лишь только BDE.
Вам может потребоваться создать уникальный индекс в таблице для того, чтобы каждую строку в таблице можно было однозначно идентифицировать. Например, попытайтесь изменить структуру таблицы и добавить поле для заполнения его уникальными значениями. Информация об ошибке BDE может быть получена для использования в приложении из объекта EDBEngineError. Исключительная ситуация EDBEngineError обрабатывается в программе с помощью конструкции try ... except. Когда возникает исключительная ситуация BDE, то может быть создан объект EDBEngineError и различные поля этого объекта могут быть использованы для программного определения, что не в порядке и что требуется для исправления ситуации. Далее, для данной исключительной ситуации может быть сгенерировано несколько сообщений об ошибках. Это требует организации перебора сообщений об ошибках для получения нужной информации. SQL в Local & Remote InterBase соответствует SQL-92 с элементам SQL III (более поздними расширениями). Никак. К сожалению, в существующих версиях InterBase это невозможно. В 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 протокол указывается стилем написания пути к базе:
10. Можно ли использовать какие-нибудь ODBC драйверы, которые получены с другими СУБД? В общем, да. Мы не столкнулись с какими-то ODBC драйверами, которые не работают с Delphi, но, с другой стороны, мы не пробовали действительно экзотические драйверы. Основные трудности вызвали специфические ODBC-драйверы от Microsoft. Похоже, что ODBC и ODBC от Microsoft - это разные вещи. При использовании ODBC-драйверов, если у вас появляются ошибки при открытии таблицы - установите порядок сортировки (SORT ORDER) хотя-бы Paradox ASCIIi. Это, например, помогает при доступе к базам данных Lotus Notes (ODBC-драйвер фирмы Casahl). Если вам действительно все равно, то вот несколько пунктов 'за' формат Paradox:
Нет способа сделать это в пределах Delphi VCL. Кажется, это довольно серьезное упущение. Однако, есть возможность сделать это напрямую через Borland Database Engine через интерфейс предоставляемый модулями DBIPROCS.DCU и DBITYPES.DCU ( BDE включает функцию для этого - DbiRegenIndexes. В BDE есть функция DbiPackTable. Нужно использовать процедуру AddIndex с параметром ixExpression, например:
17. Как создать в Paradox вторичный индекс с упорядочиванием по убыванию? Используйте флаг ixDescending:
18. Хочу узнать номер текущей записи, как это сделать? В общем случае - никак. В случае таблицы Paradox - есть в BDE функция DbiGetSeqNo, которая возвращает логический номер записи. Но при использовании на форме TDBGrid она может давать не всегда правильные значения. Для того, чтобы удаленные записи были доступны, нужно установить соответствующее свойство для курсора с помощью функции BDE DbiSetProp:
20. Упаковка таблицы. Упаковать таблицу DBF можно открыв ее компонентом TTable и вызвав функцию BDE DbiPackTable:
21. Почему я получаю ошибку 'Index out of range' когда использую TTable.FindNearest и TTable.FindKey для таблицы dBase с индексом по выражению? Методы TTable.FindKey и TTable.FindNearest не могут работать с таким видом индексов. Вместо этих методов используйте TTable.GotoKey и TTable.GotoNearest, которые прекрасно работают с ними. Вам следует использовать компонент TQuery и SQL-предложение типа:
23. Почему я не могу использовать опцию ixUnique при создании индекса в таблице Paradox с помощью метода AddIndex компонента TTable? Опции, используемые в методе AddIndex компонента TTable зависят от типа таблиц. Например, опция ixUnique работает с таблицей dBase, но не с Paradox. Следующая таблица показывает, как эти опции используются для таблиц dBase и Paradox.
Для более полного ознакомления с этим вопросом рекомендуется обратится к статье Максима Михеенкова в 1-ом номере российского журнала СУБД за 1995 год. А коротко можно сказать следующее. Для таблиц Paradox вы можете пользоваться специальными типами полей, гарантирующими уникальность значения поля в записи - типы AutoIncrement и TimeStamp (с использованием функций DateXXX - модуль SysUtils). Для Interbase вы можете использовать генераторы, которые возвращают уникальное значение. Если же такое решение вам не подходит, то можно перед помещением записи в таблицу отыскивать максимальное уже имеющееся в таблице значение этого поля и заполнять поле в записи значением, на единицу больше. Для разграничения пользователей при одновременном доступе можно хранить это значение в отдельной таблице и открывать ее эксклюзивном режиме. Да, можно, только если вам удастся получить ODBC-драйвер для таблиц Paradox. Во всяком случае на Crystal BBS находится файл bde.zip, который и содержит этот драйвер.
Если набор данных основан на таблицах Paradox или dBASE, то номер записи можно определить с помощью вызовов BDE. BDE не поддерживает номер записи для наборов данных на SQL сервере; если ваш сервер поддерживает нумерацию записей, вам нужно обратиться к его документации. Базы данных - прочие SQL сервера 1. Как осуществляется доступ к базе данных из Delphi? Сначала вы должны в утилите BDE Configuration Utility (bdecfg или bdecfg32) определить псевдоним для базы данных, с которой вы хотите работать. Это позволит вам избежать написания сложного пути к базе данных в вашем приложении; вы теперь только ссылаетесь на псевдоним. Затем вы создаете минимум три объекта на форме: TTable или TQuery, который фактически общается с базой данных через псевдоним и получает данные; объект TDataSource, который связывает данные и визуальные компоненты; по крайней мере один компонент, отображающий данные. Если вы потратили несколько часов, чтобы заставить все это работать, но ничего не получилось, попробуйте установить свойство Active у TTable или TQuery в True. Это откроет таблицу в базе данных. Delphi (в старших вариантах поставки) напрямую работает с Oracle, Informix, InterBase, DB/2, Sybase, MS SQL Server. Вы можете использовать ODBC драйверы третьих фирм, чтобы работать с любым сервером. Наиболее известные производители качественных ODBC драйверов:
![]() 3. Cуществует ли способ работать из Delphi с AS/400, исключая ODBC?
Компонент TTable имеет свойство Exclusive; если Exclusive=False, то одну и ту же таблицу могут просматривать и редактировать несколько пользователей. При редактировании таблицы текущая запись автоматически блокируется. Если есть необходимость заблокировать несколько записей или всю таблицу, то для этого придется использовать функции BDE - модуль DBIPROCS ( Да, можно. Это еще один пример открытости Delphi. В одном из проектов Демо-центра появилась необходимость прямого обращения к API SQL-сервера. Был написан соответствующий интерфейс поверх Borland InterBase API - и все заработало. Аналогично: существуют написанные компоненты для работы с AS/400 и для мэйнфреймов.
32 SQL Link версии 3.5 и выше поддерживает ESQL/C I*NET 7.x. Информацию об этом вы можете найти в каталоге DELPHI\DOC. Файл называется ASCIIDRV.TXT. Пишите имя по правилам Oracle - перед именем не забудьте поставить @. SQL database серверы обрабатывают запросы в 'логических единицах работы' которые и называются транзакциями. То есть транзакция - это группа связанных операций (SQL запросов) которые все должны быть выполнены успешно перед тем, как сервер закончит (commit) изменение базы данных. Либо вся это группа будет выполнена, либо нет. Транзакции обеспечивают целостность базы данных ... В Delphi может управлять транзакции так:
Для явных (2.1) транзакций требуется TDatabase. Для явных (2.2) транзакций требуется TQuery. Важно: Возможные варианты:
Еще важнее: Подробное описание подключения:
13. Можно ли при помощи Delphi реализовывать проекты, не имеющие отношения к базам данных? Если да, то имеет ли это смысл? В таком случае стоит воспользоваться вариантом Delphi Desktop или Developer. Выигрыш по скорости разработки очевидно будет значительным; в частности, разработка интерфейса программы под Windows производится действительно скоростными методами. Хороший пример - Screen Saver для Windows. [Содержание][Вперед] |
|
![]() | ||||||||||||||||
| ||||||||||||||||
![]() | ||||||||||||||||
|