Советы по Delphi

         

Как исправить проблемы с вызовом помощи при одновременно стоящих Delphi 1 и Delphi 2?


Nomadic отвечает:

A: (AP): Решаются так...

В regedit убейте из секции HKLM\SOFTWARE\Microsoft\Windows\Help все, что равно "...\help".

Изменив соответствующие пути, импортируйте в реестр следующий файлик: REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppPaths\ delphi32.exe] @="C:\\DELPHI2\\BIN\\delphi32.exe" "Path"="C:\\DELPHI2\\HELP" [001486]



Как мне обнаружить, что программа запущена из-под IDE?


Решение 1



    if csDesigning in ComponentState then
.....

Вы этого хотели, не правда ли...

Решение 2

Вот программка, работающая с Delphi 1. Если вы пользуетесь Delphi 2 и она работает и там, сообщите мне об этом удивительном факте.

    function LaunchedFromDelphiIDE: Boolean;
{----------------------------------------------------------------}
{ Проверка того, запущено ли приложение из-под IDE или без него. }
{----------------------------------------------------------------}
begin LaunchedFromDelphiIDE := Bool(PrefixSeg) {т.е. не DLL} and Bool(PWordArray(MemL[DSeg:36])^[8]); end; {LaunchedFromDelphiIDE}

Решение 3 (также для Delphi 1)

Предположим, это вызывается из Delphi16-приложения, не DLL, данная функция возвращает True, если приложение работает под отладчиком и False в противном случае. Если вызов происходит из DLL, возвращается False. Комментарии излишни <g>.

- Brian Long

    function DebuggerRunning: Boolean; begin Result := Bool(PrefixSeg) and Bool(PWordArray(MemL[DSeg:36])^[8]); end;

[000134]



Как определить, что запущена Delphi или C++ Builder?


Олегом Кулабухов отвечает:

Все по прежнему решается через FindWindow. Учтите, что основной класс указанных программ - TappBuilder.

    if FindWindow('TAppBuilder', Nil) <> 0 Then
ShowMessage('Delphi and or C++ Builder is running');

[001875]



Как перевести *.dfm в *.txt и обратно?


Олегом Кулабухов отвечает:

В каталоге с Дельфи есть соответствующая утилита. \Delphi\convert enum.dfm enum.txt \Delphi\convert enum.txt enum.dfm [001824]



Как поменять ширину и высоту IDE-редактора по-умолчанию?


Олегом Кулабухов отвечает:

Все соответсвующие значения находятся в реестре в следующих ключах HKEY_CURRENT_USER\Software\Borland\Delphi\2.0\Editor HKEY_CURRENT_USER\Software\Borland\Delphi\3.0\Editor HKEY_CURRENT_USER\Software\Borland\Delphi\4.0\Editor HKEY_CURRENT_USER\Software\Borland\C++Builder\1.0\Editor В этих ключах находятся DefaultHeight DefaultWidth, определяющие высоту и ширину окна редактора соответственно. [001782]



Как предотвратить повисание Windows


Олегом Кулабухов отвечает:

Когда возникнет сообщение об ошибке, не торопитесь нажимать Done. Сначала переключитесь на окно IDE и выполните Run->Program reset (либо нажмите Ctrl-F2). После чего можно вернуться и нажать Done. [001889]



Копирование проекта в новый каталог


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

Самый простой путь сделать это: "Save Project As" (сохранить проект как) в ваш новый каталог. Для каждого PAS-файла проекта сделайте операцию "Save As" (сохранить как) Запустите View/ProjectManager для проверки отсутствия ссылок на старый каталог Если вы уже скопировали PAS-файлы в новый каталог, то в качестве альтернативы к п.(2) могу предложить воспользоваться кнопками плюс/минус в Менеджере Проекта (Project Manager), это поможет вам удалить старое и добавить файлы из нового каталога.

- Mike Orriss [001060]



Невидимые элементы управления


...но я не могу дважды щелкнуть по компоненту TTable для вызова редактора полей, поскольку компонент не виден...

Выберите TTable в Инспекторе Объектов.
Щелкните один раз на заголовке формы, чтобы передать ей фокус.
Нажмите Ctrl-X
Нажмите Ctrl-V
Ваш TTable как по-волшебству снова появится в позиции 0,0.

- Ralph Friedman [000993]



Общий доступ к Хранилищу Объектов (ObjectRepository)


Процесс распространения форм и шаблонов проекта среди пользователей Delphi 2.0 немного более сложен, чем для Delphi 1.0, но основная идея та же. Самое большое различие заключается в том, что вы можете в Хранилище Объектов добавить форму, расположенную в другом каталоге, нежели само Хранилище. Из-за этой ситуации Delphi 2.0 не может предположить (как это делало Delphi 1.0), что все формы или файлы шаблонов будут в том же каталоге или его подкаталогах. (Это факт имеет важный смысл для форм и проектов, которые вы желаете распространять из Объектного Хранилища. Мы опишем этот смысл немного позже.)

Для создания общего доступа к Хранилищу Объектов вы должны сделать следующее: Скопируйте файлы Object Repository, которые вы хотите распространять, в новый каталог Скопируйте файл Delphi32.Dro из каталога \Delphi 2.0\Bin в новый каталог Хранилища Объектов Найдите и замените в файле Delphi32.Dro все пути к старым каталогам Хранилища на путь к новому каталогу
В системных регистрах в секции Repository для Delphi 2.0 добавьте строку "BaseDir = значение", чтобы обозначить месторасположение Object Repository. Перезапустите Delphi 2.0 у каждого пользователя Как вы можете догадаться, проблема в этом процессе может возникнуть, если вы попытаетась распространить форму или проект, расположенный вне структуры каталогов по умолчанию \OBJREPOS. Если вы добавили проекты или формы в Объектное Хранилище, и каталог не существует в подкаталогах основного каталога Хранилища, вам понадобиться скопировать необходимые файлы для тех проектов и форм в новый каталог. Вдобавок, чтобы отразить новые пути, вы должны в файле Delphi32.Dro отредактировать пути, на которые ссылаются эти файлы.

Если вы не сделаете эти изменения, то у любого пользователя локальная копия Delphi 2, после загрузки файла Delphi32.Dro, начнет искать проекты и формы на локальном диске по несуществующему у данного пользователя пути. (Эти проекты и формы существуют только на компьютере, где их создали).

Пример

Теперь давайте определим коллективное Хранилище Объектов для Delphi 2.0. Для начала создайте новый каталог с именем C:\Object Repository 2 и скопируйте все файлы и каталоги из каталога \OBJREPOS в новый каталог. Кроме того, скопируйте файл Delphi32.Dro из каталога \Delphi 2.0\Bin также в новый каталог. Запустите текстовый редактор и откройте файл Delphi32.Dro. Найдите в этом файле все старые пути Хранилища Объектов, например такие:

    C:\PROGRAM FILES\BORLAND\DELPHI 2.0\OBJREPOS

и замените на

    C:\Object Repository 2

Этим вы найдете и измените пути с указанием на новое месторасположение файлов в Delphi32.Dro. Затем запустите редактор регистров (REGEDT32.EXE) и найдите ключ с именем

    Software/Borland/Delphi/2.0/Repository

в секции HKEY_CURRENT_USER. Добавьте новую строковую величину (тип REG_SZ) с именем BaseDir и значением

    C:\Object Repository 2

Закройте редактор регистров. После перезапуска Delphi 2.0 новый каталог будет содержать проект и шаблоны форм вашего Хранилища Объектов. [000133]



Описание типов файлов для Delphi


Формат .CAB-файлов

Это формат файлов, который Delphi предлагает теперь своим пользователям для размещения в Интернете. Cabinet-формат является эффективным средством для упаковки нескольких файлов. Cabinet-формат имеет две ключевых характеристики: в отдельном кабинете (.cab-файл) могут храниться несколько файлов, и сжатие данных выполняется в зависимости от типа файлов, что значительно увеличивает коэффициент сжатия. Создание Cabinet-файла зависит также от количества упаковываемых файлов и ожидаемого к ним типа доступа (последовательный, произвольный, одновременный ко всем файлам или доступ к нескольким файлам в одно и тоже время). Delphi не пользуется преимуществами сжатия файлов в зависимости от их типа.

Формат .LIC-файлов

В действительности, как такового, формата .lic-файла не существует. Обычно это такие же текстовые файлы, содержащие одну или две ключевых строки.

Формат .INF-файлов

Все inf-файлы состоят из секций и пунктов. Каждая именованная секция содержит соответствующие пункты. Все inf-файлы начинаются с заголовочной секции. После заголовка включенные секции могут располагаться в любом порядке. Каждый заголовок представляет собой строку с [Именем Заголовка]. Далее следуют пункты: ItemA = ItemDetail. Для получения дополнительной информации обратитесь к документу "Device Information File Reference".

Формат .dpr-файлов

.dpr-файл является центральным файлом delphi-проекта. Для программы он является первой точкой входа. dpr содержит ссылки на другие файлы проекта и связывает формы с соответствующими модулями. Данный файл нужно редактировать с предельной осторожностью, так как неумелые действия могут привести к тому, что вы не сможете загрузить ваш проект. Этот файл является критическим при загрузке и перемещении (копировании) проекта.

Формат .pas-файлов

Это стандартный текстовый файл, который можно редактировать в текстовом редакторе. Данный файл нужно редактировать с некоторой долей осторожности, поскольку это может закончиться потерей некоторых преимуществ двух других инструментов. К примеру, добавление кода для кнопки с декларацией типа никак не отразится на соответствующем .dfm-файле формы. Все pas-файлы являются критическими при пересборке проекта.

Формат .dfm-файлов

Данный файл содержит описание объектов, расположенных на форме. Содержимое файла можно увидеть в виде текста, вызвав правой кнопкой мыши контекстное меню и выбрав пункт "view as text", или же с помощью конвертора convert.exe (расположенного в каталоге bin), также позволяющего перевести файл в текстовый вид и обратно. Данный файл нужно редактировать очень осторожно, поскольку это может закончиться тем, что IDE не сможет загрузить форму. Этот файл является критическим при перемещении и пересборке проекта.

Формат .DOF-файлов

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

Формат .DSK-файлов

Данный текстовый файл хранит информацию относительно состояния вашего проекта, как например, открытое окно и его координаты. Подобно .DOF-файлу, данный файл создается на основе текущей обстановки проекта.

Формат .DPK-файлов

Данный файл содержит исходный код пакета (аналогично .DPR-файлу стандартного проекта Delphi). Подобно файлу .DPR, .DPK-файл также является простым текстовым файлом, который можно редактировать (см. предупреждение выше) в стандартном редакторе. Одной из причин, по которой вы можете это сделать - использование компилятора командной строки.

Формат .DCP-файлов

Данный бинарный image-файл состоит фактически из реально скомпилированного пакета. Информация о символах и дополнительных заголовках, требуемых IDE, полностью содержится в .DCP-файле. Чтобы собрать (build) проект, IDE должен иметь доступ к этому файлу.

Формат .DPL-файла

В действительности это выполняемый runtime-пакет. Данный файл является Windows DLL с интегрированными Delphi-специфическими характеристиками. Данный файл необходим в случае развертывания приложения, использующего пакеты.

Формат .DCI-файла

Данный файл содержит как стандартные, так и определенные пользователем шаблоны кода, используемых в IDE. Файл может редактироваться стандартным текстовым редактором, или в самой IDE. Как и любой текстовый файл данных, используемый Delphi, редактировать его самостоятельно не рекомендуется.

Формат .DCT-файла

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

Формат .TLB-файла

.TLB-файл является "частным" двоичным файлом библиотеки типов. Обеспечивает информацией для идентификации типов объектов и интерфейсов, доступных в ActiveX сервере. Подобно модулю или заголовочному файлу, .TLB служит в качестве хранилища для необходимой символьной информации приложения. Поскольку данный файл является "личным", то совместимость с последующими версиями Delphi не гарантируется.

Формат .DRO-файла

Данный текстовый файл содержит информацию об объектном хранилище. Каждый пункт данного файла содержит специфическую информацию о каждом доступном элементе в хранилище объектов. Хотя этот файл и является простым текстовым файлом, мы настоятельно не рекомендуем править его вручную. Хранилище может редактироваться только с помощью меню Tools|Repository в самом IDE.

Формат .RES-файла

Это стандартный двоичный windows-формата файл ресурсов, включающий в себя информацию о приложении. По умолчанию, Delphi создает новый .RES-файл при каждой компиляции проекта в исполняемое приложение.

Формат .DB-файла

Файлы с таким расширением - стандартные файлы Paradox.

Формат .DBF-файла

Файлы с таким расширением - стандартные dBASE-файлы.

Фомат .GDB-файла

Файлы с таким расширением - стандартные Interbase-файлы.

Формат .DMT-файла

Этот "частный" бинарный файл содержит встроенные и определенные пользователем шаблоны меню. Данный файл не может быть отредактирован никакими способами через IDE. Поскольку данный файл является "личным", то совместимость с последующими версиями Delphi не гарантируется.

Формат .DBI-файла

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

Формат .DEM-файла

Данный текстовый файл содержит некоторые стандартные, привязанные к стране, форматы компонента TMaskEdit. Как и любой текстовый файл данных, используемый Delphi, редактировать его самостоятельно не рекомендуется.

Формат .OCX-файла

.OCX-файл является специализированной DLL, которая содержит все или несколько функций, связанных с элементом управления ActiveX. Файл OCX задумывался как "обертка", которая содержала бы сам объект, и средства для связи с другими объектами и серверами. [001438]



Определение работы Delphi I


...если вы говорите о компонентах VCL, и вам необходимо их различное поведение взависимости от факта их работы под IDE или в конечной программе, то это совсем просто.

В секции implementation:

    Const
InIDE: Boolean := False;

И в процедуре Register:

    InIDE := True;

Теперь, когда вам необходимо проверить "запущенность" компонент в среде Delphi, просто проверьте данный флаг. [000604]



Определение работы Delphi II


При работе Delphi существует несколько открытых окон, не просто "Delphi". Следовательно, ваше приложение должно проверять больше одного окна, чтобы сделать имитацию работы Delphi очень трудной. Для примера:

    function DelphiIsRunning : boolean; var H1, H2, H3, H4 : Hwnd; const A1 : array[0..12] of char = 'TApplication'#0; A2 : array[0..15] of char = 'TAlignPalette'#0; A3 : array[0..18] of char = 'TPropertyInspector'#0; A4 : array[0..11] of char = 'TAppBuilder'#0; T1 : array[0..6] of char = 'Delphi'#0; begin H1 := FindWindow(A1, T1); H2 := FindWindow(A2, nil); H3 := FindWindow(A3, nil); H4 := FindWindow(A4, nil); Result := (H1 <> 0) and (H2 <> 0) and (H3 <> 0) and (H4 <> 0); end;

initialization if not DelphiIsRunning then begin AboutBox := TAboutBox.Create(nil); AboutBox.ShowModal; AboutBox.Free; Halt; end; end.

Самая большая каверза, которую я обнаружил в данном методе, заключается в том, что когда вы запускаете программу с данным кодом, она работает из-под Delphi (что, в прочем, нам необходимо), но она будет работать и в том случае, когда программа запущена не из-под Delphi, а Delphi также загружена и работает параллельно. [000748]



Определение работы Delphi III


    function DelphiLoaded : boolean;
{ Определение работающей Delphi. Во всяком случае, дает правильный результат если Delphi минимизирован, или имеет открытый проект. Также, правильный результат получается, если вызывающее приложение автономно, или запущено из-под IDE. Код написан на основе идей Wade Tatman wtatman@onramp.net - Mike O'Hanlon, The Pascal Factory, найденных в Delphi-Talk List. }

function WindowExists(ClassName, WindowName: string): boolean;
{ Проверяем наличие определенного окна Window, используя для этого паскалевские строки вместо PChars. }

var PClassName, PWindowName: PChar; AClassName, AWindowName: array[0..63] of char; begin if ClassName = '' then PClassName := nil else PClassName := StrPCopy(@AClassName[0], ClassName); if WindowName = '' then PWindowName := nil else PWindowName := StrPCopy(@AWindowName[0], WindowName); if FindWindow(PClassName, PWindowName) <> 0 then WindowExists := true else WindowExists := false; end;  {WindowExists}
begin {DelphiLoaded} DelphiLoaded := false; if WindowExists('TPropertyInspector', 'Object Inspector') then if WindowExists('TMenuBuilder',     'Menu Designer') then if WindowExists('TApplication',   'Delphi')    then if WindowExists('TAlignPalette','Align') then if WindowExists('TAppBuilder','')  then DelphiLoaded := true; end; {DelphiLoaded}

Следующая программа возвращает TRUE при запуске в Delphi IDE (ПРИМЕЧАНИЕ: это _не_ сработает, если подпрограмма в DLL).

    function InIDE: Boolean;
begin
Result := Bool(PrefixSeg) and Bool(PWordArray(MemL[DSeg:36])^[8])); end;  { InIDE }

[001442]



Ошибка 1157 cmplib32.dll


Cannot open c:\delphi 2.0\bin\cmplib32.dll Error code 1157 (Не могу открыть c:\delphi 2.0\bin\cmplib32.dll, код ошибки 1157).

Что за ошибка такая с кодом 1157? Я пробовал удалить все DCU-файлы и переустановить PAS- и DFM-файлы, но ошибка не исчезла. Как это исправить?

Убедитесь в том, что все требуемые DLL находятся в search-пути.

- Mike Orriss [001095]



Outline ошибка


Да, вы правы насчет Datasafe. Я получил ее, выполняя приложение, и когда это случилось, я смог включить интегрированную отладку в Delphi и выяснить в чем дело. Итак, сообщение для пользователей Datasafe - закомментарьте строчку DRIVERS=C:\....\DATASAFE.DLL в секции [BOOT] вашего System.ini, этим вы дезактивируете Datasafe. Естественно, если там имеются другие строчки с драйверами, они должны быть загружены. [000337]



Перехват IDE


Да, есть возможность перехватывать работу Delphi IDE. Это подтверждается в модуле TOOLINTF.PAS, включенным в исходный код VCL. [000441]



Почему Delphi 4 запускается медленнее чем Delphi 3?


Олегом Кулабухов отвечает:

Убедитесь в наличии установленного у вас второго Update pack. Обработчик прерываний отладчика немного поправлен, что влияет на скорость запуска и работы. Третий Update pack не почти не влияет на скорость работы Дельфи. [001921]



Под Windows 98 перестали появляться


Олегом Кулабухов отвечает:

Я тоже сначала искал. Нашел таки.

Это новая особенность Windows 98. Чтобы избавиться от нее, просто впишите/измените следующий ключ в win.ini [Compatibility95] DELPHI32=0X00000002 [001918]



Поиск процедуры/функции в IDE


Поместите курсор на имени функции и нажмите правую клавишу мыши. Выберите "Browse Symbol At Cursor". В появившимся окне просмотра выберите страницу ссылок (References). ОДНА из ссылок - определение функции/метода, если метод, то обычно она следует второй (первой идет строка декларации в определении объекта).

Это, конечно, не Shift+F2 в VB, но тоже работает... [000438]



Потеря сохраненных файлов?


Будьте осторожными при работе с файлами за пределами каталога проекта. Очередной сохраняемый файл может оказаться совсем в другой директории. В случае, если проект использует файлы из разных каталогов, пользуйтесь командой "Save As". [000327]



Проблема блокировки ресурсов


Большое приложение может зависнуть при запуске из-под IDE.

В частности, если форма содержит много элементов управления.

В этом случае при запуске попробуйте закрыть такую форму. Это должно значительно освободить память и ресурсы GUI. [000437]



Проблемы с цветами в IDE


Да, действительно, некоторые части Delphi IDE имеют назначенные, а не системные цвета. [000336]



Работа с IDE из программы


Вот три подпрограммы, работающие у меня в связке D1 и Win 3.1x:

    function LaunchedFromDelphiIDE: Boolean; {----------------------------------------------------------------}
{ Осуществляем проверку запущенности приложения из-под Delphi    }
{ IDE. Идея взята из сообщения в Delphi-Talk от Ed Salgado       }
{ из Eminent Domain Software.                                    }
{----------------------------------------------------------------}
begin LaunchedFromDelphiIDE := Bool(PrefixSeg) {т.е. не DLL} and Bool(PWordArray(MemL[DSeg:36])^[8]); end; {LaunchedFromDelphiIDE}

function DelphiLoaded: Boolean; {----------------------------------------------------------------}
{ Проверяем, загружена ли Delphi. Дает правильные результаты     }
{  - если вызывающее приложение запущено отдельно, или из-под IDE}
{  - если Delphi имеет открытый проект                           }
{  - если Delphi минимизирована.                                 }
{ Автор идеи Wade Tatman (wtatman@onramp.net).                   }
{----------------------------------------------------------------}
begin DelphiLoaded := false; if WindowExists('TPropertyInspector', 'Object Inspector') then if WindowExists('TMenuBuilder',      'Menu Designer') then if WindowExists('TAppBuilder',      '(AnyName)') then if WindowExists('TApplication',    'Delphi') then if WindowExists('TAlignPalette',  'Align') then DelphiLoaded := true; end;  {DelphiLoaded}

function DelphiInstalled: Boolean; {----------------------------------------------------------------}
{ Проверяем наличие Delphi.ini, ищем в нем путь к Библиотеке     }
{ Компонентов, после чего проверяем ее наличие по этому пути.    }
{----------------------------------------------------------------}
var IniFile: string; begin DelphiInstalled := false; IniFile := WindowsDirectory + '\Delphi.ini'; if FileExists(IniFile) then if FileExists(GetIni(IniFile, 'Library', 'ComponentLibrary')) then DelphiInstalled := true; end; {DelphiInstalled}

Я уверен, что один из приведенных выше методов вам поможет. Последние две подпрограммы используют некоторые другие инкапсуляции Windows API и классов Delphi, и они определены следующим образом:

    function WindowExists (WindowClass, WindowName: string): Boolean; {----------------------------------------------------------------}
{ С помощью паскалевских строк проверяем наличие определенного   }
{ окна. Для поиска только имени окна (WindowName), используем    }
{ WindowClass '(AnyClass)'; для поиска только класса окна        }
{ (WindowClass), используем WindowName '(AnyName)'.              }
{----------------------------------------------------------------}
var PWindowClass, PWindowName: PChar; AWindowClass, AWindowName: array[0..63] of Char; begin if WindowClass = '(AnyClass)' then PWindowClass := nil         else PWindowClass := StrPCopy(PChar(@AWindowClass), WindowClass);
if WindowName  = '(AnyName)' then PWindowName := nil         else PWindowName := StrPCopy(PChar(@AWindowName), WindowName);
if FindWindow(PWindowClass, PWindowName) <> 0 then WindowExists := true                        else WindowExists := false; end; {WindowExists}

function WindowsDirectory: string; {----------------------------------------------------------------}
{ Возвращаем путь к каталогу Windows (без обратной косой черты)  }
{----------------------------------------------------------------}
const BufferSize = 144; var ABuffer: array[0..BufferSize] of Char; begin if GetWindowsDirectory(PChar(@ABuffer), BufferSize) = 0 then WindowsDirectory := '' else WindowsDirectory := StrPas(PChar(@ABuffer)); end; {WindowsDirectory}

function GetIni (const IniFile, Section, Entry: string): string; {----------------------------------------------------------------}
{ Получаем инициализационную 'profile' строку из определенного   }
{ пункта (Entry) определенной секции [Section] определенного     }
{ INI-файла (дополняем '.ini', если отсутствует). Возвращаем     }
{ нулевую строку, если IniFile, Section или Entry не найден.     }
{----------------------------------------------------------------}
var IniFileVar: string; IniFileObj: TIniFile; begin if StrEndsWith(IniFile, '.ini') then IniFileVar := IniFile else IniFileVar := IniFile + '.ini'; IniFileObj := TIniFile.Create(IniFileVar); GetIni := IniFileObj.ReadString(Section, Entry, ''); IniFileObj.Free; end; {GetIni}

[001443]



Размер библиотек и скорость загрузки IDE


DELPHI _очень_ увеличивает время своей загрузки после добавления VBX-ов и компонентов в палитру VCL.

DELPHI компилит ваши компоненты и оболочку VBX С ПОЛНЫМ ОТЛАДОЧНЫМ КОДОМ независимо от того, какие установки вы задали в OPTIONS | ENVIRONMENT LIBRARY DELPHI НЕ ОПТИМИЗИРУЕТ complib.dcl по размеру и времени загрузки Чтобы отделаться от этого суперумного отладочного кода, оптимизировать ваш DCL, получить самую быструю загрузку Delphi и уменьшить размер EXE-файла (ненамного), следуйте за этими шагами:

перед тем, как компилировать коммерческую версию, первой строкой включите директивы компилятора {$D-,L-,Y-} во модулях всех ваших компонентов и исходного кода оболочек VBX запустите W8LOSS.EXE с вашим complib.dcl [000360]



Регулярные выражения


Я не понимаю как работают REGULAR EXPRESSIONS (регулярные выражения) в Delphi-диалоге Replace dialog.

R e g u l a r E x p r e s s i o n s (Взято из файла помощи и переведено) Регулярные выражения являются специальными символами, употребляемые при поиске или переводе строки, позволяющие создавать шаблоны поиска вместо точного побуквенного ввода искомого текста.

Регулярные выражения подобны шаблонам DOS, но являются более мощным инструментом.

Регулярные выражения
Выражение Описание
?Любой символ кроме конца строки
* Ноль или более символов (за исключением символа конца строки)
\t Символ табулятора
\n Символ конца строки
\c Позиция курсора после сравнения
\\ Символ обратной косой черты
Символ Описание
< или %Начало строки
> или $ Конец строки
@ Ноль или более последних выражений
+ Один или более последних выражений
  Или последнее или следующее выражение
{} Определение группы выражений
[ ] Любой из символов в [ ]
[~ ] Любой символ за исключением указанного в [~ ]
[a-z] Любой символ между a и z включительно

В тексте замены допускаются \t, \n, \c, а также:

\<n> замещающий текст сравнивается с <n>-ной группой (0 <= n <= 9)

Примеры
Выражение Результат
theПоиск следующего включения "the"
{him} {her} Поиск следующего включения "him" или "her"
<alone> или %alone$ Поиск следующего включения "alone" в данной строке
stuff*between Поиск следующего включения "stuff", сопровождающегося "between" на той же строке
th[eo]se Поиск следующего включения "these" или "those"
[A-Z][a-z]@; Поиск следующего слова, начинающегося с большой буквы и заканчивающегося точкой с запятой
[0-9]+Поиск одной или более последовательных цифр
[~ \t\n] Поиск любого символа за исключением пробела, символа табулятора или новой строки

Имейте в виду, что выражения, содержащие символы *, @, и + всегда являются сочетанием нескольких выражений, имеющих цель найти по возможности запрос, максимально близкий к искомому.

Скобки {} определяют группу в диалоге поиска, необходимую для поиска и(или) замены. Вы можете создать несколько групп и обращаться к ним по их номеру, закрепляемого за группой с помощью обратной косой черты и номером, стоящим за ней (счет начинается с 0, поиск ведется по группам слева направо).

Сложные примеры использования регулярных выражений при поиске и замене:

Поиск FString\[{*}\]

Замена Ord(FString[\0])

или

Поиск {FString\[*\]}

Замена Ord(\0)

[000259]



Решение проблемы с BORDBK50.dll


Сергей Филатов делится своим опытом:

У меня возникла проблема с Delphi 5 на WIN95 и WIN98: Debugger Kernel BORDBK50.dll is missing or not registered.

Решение её заключалось в следующем. Есть специальный файл для регистрации dll, а именно REGSVR32.EXE. Для регистрации: REGSVR32.EXE и полностью путь к dll. Всё заработало. [001987]



Шрифты редактора Delphi


Загрузите Панель Управления Windows и выберите "Шрифты". Убедитесь, что доступен по крайней мере один непропорциональный шрифт (например, Courier).

Редактор Delphi откажется работать, если не доступен хотя бы один непропорциональный шрифт. [000338]



Delphi из вашей системы. Хорошей


Удаление Delphi (16 бит)

Содержание

Введение
A) Удаление каталогов
B) Удаление Программной Группы (Program Group)
C) Удаление .INI-файлов
D) Редактирование WIN.INI
E) Редактирование WINHELP.INI
F) Редактирование вашего AUTOEXEC.BAT
G) Удаляем файлы, расположенные в каталогах WINDOWS и WINDOWS\SYSTEM

Введение

Данный документ описывает процесс "удаления" Delphi из вашей системы. Хорошей идеей является сохранение ваших системных файлов, поскольку нам частенько понадобиться использовать команду 'удалить'.

Данный документ подразумевает, что продукт был установлен на диске "C:", с каталогами, заданными по умолчанию и полными (также по умолчанию) опциями установки. Любые отклонения от опций установки, заданных по умолчанию, может потребовать установок или изменений в приведенной инструкции.

A) Удаление каталогов

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

Если вы хотите удалять каталоги с помощью соответствующих команд DOS, смотрите расположенную ниже секцию 1, если с помощью Windows, смотри секцию 2.

Чтобы стереть каталоги на вашем жестком диске в системе с DOS версии 6.0 и выше, вам необходимо перейти в корневой каталог (например, C:\> ), ввести команду DELTREE <DIR NAME> и нажать Enter (Пример: C:\>deltree delphi). Нажмите Yes в появившейся подсказке на вопрос об удалении вложенных каталогов (смотрите ниже список подлежащий удалению каталогов). Для версий DOS ниже 6.0, вам необходимо переходить внутрь каждого каталога и набирать DEL *.* до тех пор, пока все каталоги не опустеют. После этого DOS позволит вам удалить имя каталога с помощью команды RD <DIR NAME>. Для Windows загрузите File Manager. Используя File Manager, выберите каталог <DIR NAME>. Нажмите клавишу Delete. Нажмите Yes в появившейся подсказке на вопрос об удалении вложенных каталогов.

Каталоги, подлежащие удалению: C:\Delphi C:\Rptsmith C:\Rs_run C:\Dbd C:\Iblocal C:\Idapi * C:\Informix * - только для версии Client/ Server B) Удаление Программной Группы (Program Group)

Для удаления программной группы 'Delphi' в Windows 3.1 или Windows NT, выделите группу, не открывая ее, и нажмите клавишу Delete. В Windows 95 каталоги были удалены в предыдущей секции.

C) Удаление .INI-файлов

Удалите следующие .INI-файлы из вашего каталога \WINDOWS (ПРЕДУПРЕЖДЕНИЕ: если вы имеете любые другие продукты Borland или любые программы, использующие ODBC, сохраните указанные в списке ниже .INI-файлы перед тем как их удалить. После этого протестируйте все другие программы на предмет их нормальной работы!): DELPHI.INI BORHELP.INI DBD.INI INTERBAS.INI * ODBC.INI * ODBCINST.INI * ODBCISAM.INI RPTSMITH.INI RS_RUN.INI RS_SQLIF.INI VSL.INI MULTIHLP.INI * - файлы, используемые ODBC-приложениями D) Редактирование WIN.INI

Сохраните ваш WIN.INI-файл. Затем, в каталоге \WINDOWS, удалите следующие секции из вашего WIN.INI-файла (ПРЕДУПРЕЖДЕНИЕ: Если любая другая программа использует Paradox Engine, IDAPI, или Database Desktop, удаляйте перечисленные строки в соответствии с их потенциальным использованием!): [DDE Servers] DBD=C:\DBD\DBD [DBD] WORKDIR=C:\DBD PRIVDIR=C:\DBD\DBDPRIV [Interbase] RootDirectory=C:\IBLOCAL * [IDAPI] DLLPATH=C:\IDAPI CONFIGFILE01=C:\IDAPI\IDAPI.CFG * [Borland Language Drivers] LDPath=C:\IDAPI\LANGDRV * - НЕ удаляйте это, если другие программы используют IDAPI Не забудьте сохранить ваш новый WIN.INI.

E) Редактирование WINHELP.INI

Удалите следующие строки из WINHELP.INI, расположенного в вашем каталоге WINDOWS: BDECFG.HLP=C:\IDAPI DBD.HLP=C:\DBD DELPHI.HLP=C:\DELPHI\BIN WINAPI.HLP=C:\DELPHI\BIN CWG.HLP=C:\DELPHI\BIN CWH.HLP=C:\DELPHI\BIN LOCALSQL.HLP=C:\DELPHI\BIN VQB.HLP=C:\DELPHI\BIN SQLREF.HLP=C:\IBLOCAL\BIN WISQL.HLP=C:\IBLOCAL\BIN RPTSMITH.HLP=C:\rptsmith RS_DD.HLP=C:\rptsmith SBL.HLP=C:\rptsmith RS_RUN.HLP=C:\rptsmith RCEXPERT.HLP=C:\DELPHI\RCEXPERT DRVDBASE.HLP=C:\WINDOWS\SYSTEM DRVPARDX.HLP=C:\WINDOWS\SYSTEM ODBCINST.HLP=C:\WINDOWS\SYSTEM F) Редактирование вашего AUTOEXEC.BAT

Во-первых, сохраните ваш AUTOEXEC.BAT файл. Затем редактируйте ваш AUTOEXEC.BAT и удалите C:\IBLOCAL\BIN; и C:\IDAPI; из переменной PATH, если, конечно, они присутствуют. (Пример: (OLD) PATH = C:\;C:\WINDOWS;C:\DOS;C:\IDAPI;C:\IBLOCAL\BIN; (NEW) PATH = C:\;C:\WINDOWS;C:\DOS;) Не забудьте сохранить ваш новый AUTOEXEC.BAT.

G) Удаляем файлы, расположенные в каталогах WINDOWS и WINDOWS\SYSTEM

Пожалуйста помните: Данные файлы указаны ТОЛЬКО для ссылки. Удалять их настоятельно НЕ рекомендуется. Удаление некоторых файлов, используемых другими программами, может привести к нестабильной работе вашей системы или даже к ее разрушению.

ПРЕДУПРЕЖДЕНИЕ!!!!ПРЕДУПРЕЖДЕНИЕ!!!!ПРЕДУПРЕЖДЕНИЕ!!!!ПРЕДУПРЕЖДЕНИЕ!!!!ПРЕДУПРЕЖДЕНИЕ!!!!ПРЕДУПРЕЖДЕНИЕ!!!!

Множество файлов, указанных в данной секции, являются общими для многих программ. Удалив их, можно лишить работоспособности другие программы, ВКЛЮЧАЯ WINDOWS. Если вы все же хотить удалить файлы из данных каталогов, то делайте это ТОЛЬКО на свое собственное усмотрение. Возможным решением данной проблемы является удаление файла с последующей проверкой работоспособности ВСЕХ программ вашей системы. Копии всех указанных ниже файлов располагаются на Delphi CD в каталоге runimage. Вы можете в дальнейшем скопировать файлы с CD, если это потребуется после их случайного удаления. Пожалуйста, будьте осторожными.

ПРЕДУПРЕЖДЕНИЕ!!!!ПРЕДУПРЕЖДЕНИЕ!!!!ПРЕДУПРЕЖДЕНИЕ!!!!ПРЕДУПРЕЖДЕНИЕ!!!!ПРЕДУПРЕЖДЕНИЕ!!!!ПРЕДУПРЕЖДЕНИЕ!!!!

Файлы, расположенные или обновленные Delphi в вашем каталоге \WINDOWS: DELPHI.CBT M3OPEN.DLL M3OPEN.EXE MBW.EXE MFTP.EXE MHPARPA.DLL MNETONE.EXE MNOVLWP.DLL MPATHWAY.DLL MPCNFS.EXE MPCNFS2.EXE MPCNFS4.DLL MSOCKLIB.DLL MVWASYNC.EXE MWINTCP.EXE WINSOCK.DLL Файлы, расположенные или обновленные Delphi в вашем каталоге \WINDOWS\SYSTEM: BIBAS04.DLL BIFLT04.DLL BIMDS04.DLL BIPDX04.DLL BIPDX04.HLP BIUTL04.DLL BIVBX11.DLL BLBAS04.DLL BLINT04.DLL BLINT04.HLP BLMDS04.DLL BLODBC.LIC BLUTL04.DLL BOLE16D.DLL BTRV110.DLL BWCC.DLL CHART2FX.VBX COMPOBJ.DLL * COREWIN.DLL CTL3D.DLL CTL3DV2.DLL * DBNMP3.DLL DRVACCSS.HLP DRVBTRV.HLP DRVDBASE.HLP DRVEXCEL.HLP DRVFOX.HLP DRVTEXT.HLP GAUGE.VBX * LDLLSQLW.DLL MSJETDSP.DLL MULTIHLP.DLL NWCALLS.DLL NWIPXSPX.DLL * NWNETAPI.DLL ODBC.DLL ODBCADM.EXE ODBCCURS.DLL ODBCINST.DLL ODBCINST.HLP OLE2.DLL OLE2.REG OLE2CONV.DLL OLE2DISP.DLL OLE2NLS.DLL OLE2PROX.DLL * ORA6WIN.DLL * ORA7WIN.DLL PICT.VBX PXENGCFG.EXE PXENGWIN.DLL QEBI.LIC RED110.DLL SIMADMIN.DLL SIMBA.DLL STDOLE.TLB STORAGE.DLL STRESS.DLL SWITCH.VBX TXTISAM.DLL TYPELIB.DLL * W3DBLIB.DLL XBS110.DLL XLSISAM.DLL * - только для версии Client/ Server Все .BOR-файлы являются сохраненными первоначальными файлами, Delphi переименовывает их и заменяет обновленными или измененными, поэтому вы можете в дальнейшем ими воспользоваться, сравнить с текущими и, при необходимости, восстановить. Если вы установили любое программное обеспечение после того, как файл .BOR был создан, он может быть удален.

[000834]


Вывод окна CPU (дизассемблер)


Delphi 2.0

    HKEY_CURRENT_USER\Software\Borland\Delphi\2.0\Debugging\EnableCPU = "1"

Delphi 3.0

Используя редактор регистров найдите каталог

    HKEY_CURRENT_USER\Software\Borland\Delphi\3.0\Debugging

и добавьте ключ ENABLECPU со значением "1".

После перезагрузки вы обнаружите в меню "View" пункт CPU Window. При щелчке на нем появится окно, где вы можете проверить работу программы и самой системы на более низком уровне.

[000129]



Запуск Delphi с CD-ROM


Инструкции для запуска Delphi с CD-ROM

Delphi может быть запущена непосредственно с CD-ROM. Тем не менее, перед запуском Delphi с CD-ROM, настоятельно рекомендуем соблюсти требования минимальной инсталляции Delphi.

Для минимальной установки требуется 33Мб свободного дискового пространства.

Для запуска с CD-ROM требуется 9MB свободного дискового пространства.

Для конфигурирования системы для запуска Delphi с CD-ROM,

Скопируйте все файлы, находящиеся в каталоге компакта \RUNIMAGE\WINDOWS, в каталог Windows вашего жесткого диска. Скопируйте все файлы, находящиеся в каталоге компакта \RUNIMAGE\WINDOWS\SYSTEM, в системный каталог Windows вашего жесткого диска. Откройте файл DELPHI.INI в любом текстовом редакторе, например Windows Notepad. Найдите секцию с именем [Globals]. Создайте строчку с переменной PrivateDir и значением, указывающим на записываемый диск, желательно на локальный. Для примера, если в качестве значения переменной с именем DELPRIV выбран диск C:, соответствующая секция файла DELPHI.INI должна выглядеть примерно так: [Globals] PrivateDir=C:\DELPRIV\ Теперь Delphi может быть запущен с каталога \RUNIMAGE\DELPHI\BIN directory вашего CD-ROM.

Изменение компонентов

Чтобы получить возможность изменения библиотеки компонентов при запуске Delphi с CD-ROM, на записываемом диске должна существовать копия библиотеки компонентов. Используйте в качестве руководства следующие шаги:

Скопируйте COMPLIB.DCL с каталога CD \RUNIMAGE\DELPHI\BIN в подходящий каталог на вашем жестком диске. Запустите Delphi. Войдите в меню Options и выберите пункт Open Library. Задайте каталог и имя файла для скопированного на жесткий диск COMPLIB.DCL. [000777]



Зависание Delphi 4(5)


Сергей Сахаров советует:

Delphi 4(5) виснут при запуске. Видеокарта S3 Virge.
Решение:

Добавьте в реестр строку: [HKEY_CURRENT_CONFIG\Display\Settings] "BusThrottle"="on" Если не помогает, то попробуйте добавить в system.ini: [Display] "BusThrottle"="On" Эта проблема устранена в Delphi 4sp3.

Дополнение

Олегом Кулабухов дополняет:

Запускаю Дельфи, но система виснет, в чем может быть дело?

Чаще всего такое происходит, когда у вас установлена видеокарта, основанная на чипсете S3. Есть несколько путей решения данной проблемы. Поставить третий сервис пак для Дельфи. В нем эта проблема решена за счет изменения способа загрузки палитры. Установить новый видеодрайвер, в котором данная проблема решена. Запустить Дельфи с параметром -ns ("delphi32.exe" -ns) В настройках видеокарты поставить ползунок графического ускорения в None. Под Windows 95 - загрузиться в Safe mode Под Windows 98 - внести следующие изменения в файл SYSTEM.INI [Display] BusThrottle=1 По другим вопросам, связанным с видеодрайверами, обращайтесь на http://www.borland.com/devsupport/delphi/qanda/1296.html

Второй причиной подобного зависания может быть то, что у вас установлена системная палитра с количеством цветов равным 16 или менее. Увеличьте цветность. [001066]



Хитрость вывода изображения


Попробуйте установить:

    Image1.ControlStyle := Image1.ControlStyle + [csOpaque];

в обработчике события формы OnCreate (или, по крайней мере прежде, чем вы покажете форму). Компоненты TImage изначально прозрачные (за исключением области, занятой изображением), поэтому сообщая Delphi, что компонент непрозрачен, вы тем самым помешаете что-либо "рисовать" на области, не занятой собственно изображением (типа клиентской области формы). [000407]



Изменение палитры при выводе изображения


Да, это не тривиальная задача! Палитра дочернего MDI-окна попортила нервов не одному мне.

В обработчике сообщения WM_PaletteChanged вы можете убедиться, что видимая TImage.Picture.Bitmap.Palette всегда "реализована". Так..

    private procedure WMPaletteChanged(var Msg: TWMPaletteChanged); message WM_PaletteChanged;
...
...

procedure Form1.WMPaletteChanged(var Msg: TWMPaletteChanged);
begin
if Msg.PalChg <> Form1.Handle then begin PaletteChanged(true); Msg.Result := 0; end; end;

Теперь вы можете масштабировать неотображенное изображение как вы хотите и не иметь проблем. Единственное, о чем вам необходимо помнить, если вы хотите вывести неотображенное изображение на видимый TImage, вам необходимо вызвать PaletteChanged снова после того, как изображение выведено. С кодом, который мы использовали...

    Image1.Picture.Bitmap := obitmap; PaletteChanged(true);

Если вы не делаете этот вызов, изображение отобразится с неправильной палитрой. [000386]



Изображение не масштабируется


Если вы разместили изображение на форме, присвойте свойству Scaled значение False. Изображение не масштабируется. [000318]



Рисование прямоугольника на изображении


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

Создайте логическое поле ImageMouse, для рисования прямоугольника ImageRect используйте метод холста drawfocusrect. Следующий код работает одинаково для левой и правой кнопок мыши:

    procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ImageMouse := True; ImageRect.Left := X; ImageRect.Top  := Y; ImageRect.Right := X; ImageRect.Bottom  := Y; Image1.Canvas.DrawFocusRect(ImageRect); end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer); Var NewRect : tRect; begin if ImageMouse then If (X > ImageRect.Left) AND (Y > ImageRect.Top) then  begin {Восстанавливаем фон} Image1.Canvas.DrawFocusRect(ImageRect); {Меняем прямоугольник} ImageRect.Right := X; ImageRect.Bottom := Y; {Рисуем прямоугольник фокуса} Image1.Canvas.DrawFocusRect(ImageRect); end; end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin {Восстанавливаем фон} if ImageMouse then begin ImageRect.Right := X; ImageRect.Bottom := Y; Image1.Canvas.DrawFocusRect(ImageRect); ImageMouse := False; Image1.Canvas.CopyRect(Image1.Canvas.ClipRect, Image1.Canvas,ImageRect) end; end;

[000672]



Вопросы палитры


Не используйте свойство stretch для масштабирования в меньшую сторону, для этого используйте свойство stretchdraw холста изображения. Не используйте выходящие за рамки экрана изображения без масштабирования их до размера экрана. Если вы хотите изменить изображение, используйте метод update после метода hide. К сожалению, это не указано в документации. [000326]



Изменение директории установки по умолчанию в InstallShield


Значение по умолчанию для Express Directory Specifier <INSTALLDIR> [WindowsDrive]:\Program Files\[CompanyName]\[AppName]. Вы можете изменить это значение по-умолчанию. (Это означает, что любая группа программ (Program Group) назначит директорию назначения (Destination Directory) <INSTALLDIR>, и вместе с файлами деинсталляции, которые Express включает в ваш дистрибутив, будут установлены в этот каталог по-умолчанию.)

Вызовите диалог Express Dialog Boxes, выберите Choose Destination Location и щелкните на закладке Settings. В поле редактирования введите ваш каталог по-умолчанию. Можно не вводить путь к каталогу вручную, а воспользоваться кнопкой выбора каталога "Directory Specifiers".

Например, строка "<WINDISK>\Test" должна указать установке создать корневой каталог с именем "Test," а сам каталог необходимо расположить на диске, где у пользователя расположен каталог Windows (обычно это диск C:). Данная опция действует даже тогда, когда вы не включаете диалог Destination Location в ваш дистрибутив.

Примечание: Не используйте для назначения каталога по-умолчанию описатель <INSTALLDIR> из диалога Choose Destination Location.

(Для получения дополнительной информации по описателю Express Directory Specifiers, пожалуйста обратитесь к главе "Express Directory Specifiers" электронной справке Express Help.) [001961]



Советы по Delphi


Я пытаюсь преобразовать мою базу


Delphi 1

Переход с Oracle на Interbase Я пытаюсь преобразовать мою базу данных на Oracle в базу данных local Interbase server. Все таблицы Oracle ссылаются на имя схемы. Interbase поддерживает такого типа имена схем?

Нет, Interbase не использует понятие классификатора таблицы (владельца), как это делают другие сервера, например, Oracle или Sybase. Наилучшее решение в этом случае - использование директив компиляции, позволяющее контролировать соглашение о стиле имен Oracle или Interbase, используемое в генерируемом .exe-файле.

Также, Delphi читает все атрибуты Oracle типа Number и конвертирует их в FloatField. Interbase при этом использует тип SmallIntField. Так, для преобразования необходимо пройтись по всем таблицам, удалить поля и затем снова их добавить. Можно это сделать как-то по-человечески?

Если я правильно понял то, что вы хотели сказать, то этот вопрос относится к специфике Interbase. Например, Interbase использует короткое поле (short field) с масштабированием вместо реального типа, если заданная при создании таблицы точность не превышает 10. [например, CREATE TABLE xxx (FLOATFIELD NUMERIC (5, 2)) обычно означает реальный тип с точностью 5 цифр с 2-мя цифрами после запятой. Но Interbase знает, что сможет поместить 5 цифр в короткое поле, поэтому она создаст короткое поле и запись и смасштабирует его с коэффициентом 2.] Проблема в следующем: BDE "спрашивает" Interbase о полях таблицы и их типах, Interbase честно рапортует, что поля имеют тип short, т.е. они "короткие". Но BDE ничего не знает о масштабировании.

Чтобы обойти этот неприятный момент, необходимо создать поле с точностью более 10, заставляя Interbase делать поля реального, а не короткого типа.

Могу ли я менять один тип SQL на другой, или это - несбыточная мечта?

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

Существует ли возможность инкапсуляции общего кода для работы с базой данных от специфических реализаций конкретных версий баз, что позволило бы клиенту легко переходить от одного типа таблиц к другому?

Как я уже говорил выше: директивы компилятора.

Shawn Wu [000699]


Затем установите свойство компонента TDataBase


Delphi 1

Автоматический logon к локальной InterBase Используйте компонент TDatabase. В строках Params пропишите:

USER NAME=sysdba PASSWORD=masterkey Затем установите свойство компонента TDataBase LoginPrompt в False.

После этого, с помощью свойства DataBaseName, вы должны создать прикладной псевдоним (Alias) и связать TQuery/TTable с вашим компонентом TDataBase. [000517]


before insert" срабатывает только после


Delphi 1

Автоинкрементальные поля и Interbase I Оказывается, что Interbase триггер " before insert" срабатывает только после того, как запись "запостится" из Delphi приложения. В связи с чем становится невозможным увеличение автоинкрементальных ключевых полей. Есть решение?

Большинство программистов решило эту проблему созданием хранимой процедуры (stored procedure), позволяющей от InterBase получить следующий номер и поместить его в вашу запись посредством метода onBeforePost или onNewRecord. [000559]


поля отличаются от полей другого


Delphi 1

Interbase BLOB-поля InterBase BLOB- поля отличаются от полей другого типа. Реально BLOB-поле имеет несколько подтипов (sub-type). Знание подтипа BLOB-поля существенно при создании приложения для работы с базами данных, которые включают в себя InterBase BLOB-поля. BLOB-поля могут быть трех подтипов: подтип 0, подтип 1 (два встроенных подтипа), и пользовательский подтип.

Подтип 0 BLOB-поля создается при выполнении команды CREATE, когда подтип не определен. Для ясности, в синтаксисе SQL все же рекомендуется явно указывать, что BLOB-поле относится к подтипу 0. Данный подтип BLOB-поля используется для хранения бинарных данных. InterBase не производит никакого анализа хранимых данных, он просто хранит данные в BLOB-поле байт-за-байтом. Наиболее частое применение BLOB-полей в приложениях Windows - хранение двоичных данных изображения, обычно отображаемое впоследствие компонентом TDBImage. Для этой цели подходит или BLOB-поле подтипа 0, или BLOB-поле пользовательского подтипа.

Второй встроенный подтип - 1. Данный подтип BLOB-поля разрабатывался для хранения текста. Обычно это данные свободного формата типа memo или заметок, отображаемых и редактируемых компонентом TDBMemo. Данный подтип BLOB-поля лучше подходит для хранения данных типа текст, чем поле, имеющее тип VARCHAR, поскольку, в отличие от поля типа VARCHAR, в режиме проектирования возможно задание ограничения по используемой областью памяти.

С помощью SQL-синтаксиса, подтип 1 BLOB-поля создается с указанием типа BLOB-поля, использованием ключевого слова SUB_TYPE и числа, указывающего на номер необходимого подтипа:

CREATE TABLE WITHBLOB ( ID CHAR(3) NOT NULL PRIMARY KEY, MEMO BLOB SUB_TYPE 1, AMOUNT NUMERIC ) Помимо двух встроенных подтипов BLOB-поля, существует также подтип, определяемый пользователем. Такой подтип задается отрицательным целым значением совместно с ключевым словом SUB_TYPE. Фактически учитывается только "отрицательность" целого числа, его значение может быть произвольным и остается на усмотрение того, кто создает таблицу. Указание числа -1 идентично указанию числа -2. Единственная рекомендация для использования подтипа, определяемого пользователем - гарантия того, что в каждой строке таблицы BLOB-поле будет иметь только данный подтип, определяемый пользователем. InterBase не имеет критерия для оценки хранимого подтипа, поэтому вся ответственность по определению подходящего типа двоичных данных ложится на приложение. Никакой ошибки со стороны InterBase при загрузке неверного типа двоичных данных в пользовательский подтип BLOB-поля быть не может, но приложение может столкнуться с трудностями, если оно ожидает один тип данных, но ей передают другой.

BLOB-поле пользовательского подтипа может создаваться следующим синтаксисом SQL: CREATE TABLE IMAGE_DATA ( FILENAME CHAR(12) NOT NULL PRIMARY KEY, BITMAP BLOB SUB_TYPE -1, EXEs BLOB SUB_TYPE -2, ) При пользовании таблицей, созданной с помощью приведенной выше команды, поле BITMAP может использоваться для хранения одного типа двоичных данных для всех записей. В нашем случае хранятся данные изображения. Поле EXEs подразумевает хранение выполнимых файлов, загружаемых с диска. Если приложение, использующее данную таблицу, по ошибке сохранит двоичные данные в поле BITMAP вместо EXEs, InterBase ошибки не выдаст, но приложение при этом столкнется с серьезными трудностями при отображении в компоненте TDBImage сохраненного выполнимого файла.

InterBase BLOB-поля и Delphi

При определении объектов TField для InterBase BLOB-полей в Delphi, следует относить различные подтипы BLOB-поля к производным типам TField следующим образом: Подтип 0: TBlobField Подтип 1: TMemoField Пользовательский: TBlobField Поскольку, как встроенный подтип 0, так и пользовательский подтип, относятся к объектам TBlobField, то забота об определении используемого подтипа во время проектирования приложения ложится на программиста. Единственный способ отличить подтип 0 от пользовательского подтипа заключается в просмотре информации о метаданных таблицы, что не может быть сделано с помощью Delphi. Для просмотра метаданных таблицы может быть использована утилита Local InterBase Server под названием WISQL.

InterBase BLOB-поля и Database Desktop

Утилита Database Desktop, поставляемая с Delphi (DBD), не создает пользовательские подтипы. При создании в Database Desktop BLOB-полей для хранения бинарных данных, включая данные изображения, используйте тип поля "BLOB". Этим вы создадите BLOB-поле встроенного подтипа 0.

В DBD также возможно создание BLOB-поля типа TEXT BLOB. Это эквивалент встроенного подтипа 1 и может использоваться для хранения текста свободного формата. Так как он только функционален встроенному подтипу 1 BLOB-поля, то при просмотре таблицы утилитой WISQL, обозначение его подтипа может отличаться от действительного.

[000639]


Я пытаюсь сгенерировать последовательный ключ


Delphi 1

Автоинкрементальные поля и Interbase II Я пытаюсь сгенерировать последовательный ключ для первичной ключевой колонки, но LIBS мне отвечает "nested select is not support in this context." (вложенный выбор не поддерживается в данном контексте.)

Как насчет: CREATE TRIGGER AUTOINCREMENT FOR MYTABLE BEFORE INSERT AS DECLARE VARIABLE new_key INTEGER; BEGIN UPDATE AUTOKEYS SET KEY_VALUE = KEY_VALUE + 1 WHERE (KEY_ID = "A"); SELECT KEY_VALUE FROM AUTOKEYS WHERE KEY_ID = "A" INTO :new_key; new.my_key_column = new_key; END ^ Steve Koterski (Borland) [000713]


Вот как прочесть из таблицы


Delphi 1

OLE Interbase Вот как прочесть из таблицы Interbase:

    procedure TForm1.ReadOLE; var BS:    TBlobStream; begin BS := TBlobStream.Create(Table1BLOBFIELD_BLOB, bmRead); OLEContainer1.LoadFromStream(BS); BS.Free; end;
и вот как записать это:

    procedure TForm1.WriteOLE; var BS:    TBlobStream; begin BS := TBlobStream.Create(Table1BLOBFIELD_BLOB, bmWrite); OLEContainer1.SaveToStream(BS); BS.Free; end;
- Rob Minte [000731]


в таблицу InterBase, содержащую триггеры


Delphi 1

Автоинкрементальные поля и Interbase III Я пытаюсь добавить запись в таблицу InterBase, содержащую триггеры и blob-поля, тем не менее, всякий раз при выполнении метода "post" после установки ("append") значений, я получаю ошибку: 'Record/Key deleted.' (запись/ключ удален).

Вот реальный пример того, как я обошел эту проблему:

Определение хранимой процедуры: Create Procedure NewEmployeeKey Returns ( EmployeeKey Integer ) as begin EmployeeKey = Gen_Id( gnEmployeeKey, 1 ) ; end Определение триггера: Create Trigger SetEmployeeKey for tbEmployee Active Before Insert Position 0 as begin if ( New.EmployeeKey is Null ) then begin Execute Procedure NewEmployeeKey Returning_Values New.EmployeeKey ; end end Код Delphi для использования в обработчике события OnNewRecord, или AfterInsert, или BeforePost:

    { qyProviderData - это tQuery }
{ spProviderKey - это tStoredProc }

if qyProviderData.State in [dsInsert] then begin spProviderKey.ExecProc ; qyProviderData.FieldByName( 'ProviderKey' ).AsInteger := spProviderKey.ParamByName( 'ProviderKey' ).AsInteger ; end ; { if }
Это все, что вам необходимо. Хранимая процедура возвращает следующее сгенерированное значение. Триггер это гарантирует, даже если бы данные не были доступны из вашей Delphi-программы, первичный ключ все еще назначает значение. В Delphi-коде, я полагаю, вы могли бы проверять наличие пустого поля первичного ключа вместо .State in [dsInsert], хотя это то же работает.

- Mike Downey [000872]


Мой InterBase сервер загружается при


Delphi 2

Автоматический запуск сервера Interbase Мой InterBase сервер загружается при запуске Win95. Но я не вижу иконки программы в группе автозапуска. Как мне его выключить?

В системных регистрах имеется один ключ: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run Вы можете отключить автоматическую загрузку сервера, удаляя соответствующую переменную.

-Steve Schafer [000962]


Ответы на наиболее часто задаваемые


FAQ по InterBase Ответы на наиболее часто задаваемые вопросы по InterBase (09/27/1996)

Если вы имеете дополнения, исправления или пожелания, шлите мне письма по адресу rlove@pobox.com.

Текущая версия данного FAQ'а доступна по адресу http://www.xmission.com/~uldata/ib/faq.txt.

Авторские права: 1996 Robert J. Love
Данный FAQ свободен для копирования, распространения и изменения формата.

Многие из этих вопросов и ответов взяты непосредственно из документов Borland. Авторские права таких ответов остаются у Borland.

Авторские права: Borland International, Inc.
-----------------------------------------------

Вопросы 1. Что мне необходимо для распространения InterBase/Delphi приложения, созданного для нашего InterBase сервера? 2. Что мне необходимо для распространения InterBase/Delphi приложения, созданного дла работы с Local InterBase? 3. Что юридически необходимо для распространения Local InterBase Server (LIBS)? 4. Я не могу подключить мои 32-битные приложения к моему серверу Novel... 5. Мое подключение к Интернет (Internet Connection) стартует всякий раз, когда я пробую соединиться с InterBase. 6. При попытке соединения я получаю следующее сообщение: Statement failed, SQLCODE = -902 (запрос потерпел неудачу) Unable to complete network request to host "DEV". (Невозможно завершить сетевой запрос для хоста "DEV".) -Failed to locate host machine. (невозможно найти хост-машину) -Undefined service gds_db/tcp. (сервис gds_db/tcp неопределен) 7. Мое соединение с InterBase, похоже, очень медленно... 8. Какие существуют Интернет-сервера, посвященные InterBase? 9. Существуют ли 16-битные драйвера ODBC, позволяющие подключаться к InterBase NT, Netware или любому из серверов UNIX? 10. Почему Delphi 1.00 поставляется с 16-битными драйверами ODBC для InterBase? 11. Существуют ли 32-битные драйвера ODBC, позволяющие подключаться к InterBase NT, Netware или любому из серверов UNIX? 12. Поддерживают ли 32-битные драйвера ODBC DSN? 13. Почему Borland решил взимать плату за Local 32-битную версию? 14. Как мне подписаться на список рассылки InterBase Mailing List? 15. Если в этом FAQ'е нет ответа на мой вопрос, куда мне обратиться? Вопросы и ответы по InterBase 4.2 16. Что такое InterBase 4.2? 17. Что нового в InterBase 4.2? 18. Для чего нужен Local InterBase? 19. Кто может быть пользователем InterBase Server под Windows 95? 20. Что включает в себя сервер InterBase под Windows 95? 21. Что включает в себя InterBase Server 4.2 for Windows NT? 22. Как осуществляется лицензирование InterBase? 23. Могу ли я свободно копировать ODBC драйвера InterBase? 24. Сколько стоит обновление до 4.2? Вопросы/Ответы Что мне необходимо для распространения InterBase/Delphi приложения, созданного для нашего InterBase сервера?

Вам необходимо следующее: BDE. SQL Links Клиентская лицензия

Что мне необходимо для распространения InterBase/Delphi приложения, созданного дла работы с Local InterBase?

Вам необходимо следующее: BDE SQL Links Local InterBase Server (смотри вопрос #3)

Что юридически необходимо для распространения Local InterBase Server (LIBS)?

Реально это зависит от версии, которую вы пытаетесь распространить. Delphi C/S 1.0 поставляется с неограниченной лицензией (Unlimited Distribution License), позволяющей распространять неограниченное число копий 16-битной версии LIBS. Тем не менее, для 32-битной версии лицензия Unlimited Distribution License недоступна. По 408-431-1000 вы сможете узнать текущие условия лицензирования.

Я не могу подключить мои 32-битные приложения к моему серверу Novel...

В настоящий момент соединение с помощью 32-битного SPX к InterBase невозможен, если вам необходимо подключить ваше 32-битное приложение к вашему серверу Novel, вы должны установить на нем поддержку протокола TCP/IP. (Это является следствием неготовности библиотеки 32 SPX Novel Libraries к моменту выхода SQL Links)

Мое подключение к Интернет (Internet Connection) стартует всякий раз, когда я пробую соединиться с InterBase.

Вам необходимо выключить флажок Auto Dial, который вы можете найти в Control Panel на страничке настройки Internet.

При попытке соединения я получаю следующее сообщение:
Statement failed, SQLCODE = -902 (запрос потерпел неудачу)
Unable to complete network request to host "DEV".
(Невозможно завершить сетевой запрос для хоста "DEV".)
-Failed to locate host machine. (невозможно найти хост-машину)
-Undefined service gds_db/tcp. (сервис gds_db/tcp неопределен)

Следующая строчка должна присутствовать в services-файле как в вашем клиенте, так и на сервере:

gds_db 3050/tcp Services-файлы могут располагаться в следующих каталогах:
Windows95 -> C:\<WINDOWS95> (Где у вас установлен Win95)
Windows NT -> C:\\System32\drivers\etc

Мое соединение с InterBase, похоже, очень медленно...

Это очень вероятно, если вы пользуетесь Netbeui, входящей в состав NT версии 4.0. Данная версия имеет ошибку, очень замедляющую работу Netbeui. Для решения проблемы попробуйте один из следующих рецептов: Обновите InterBase до самой последней версии. Установите, как вы обычно делаете, TCP/IP, это будет работать быстрее с любой версией InterBase.

Примечание: Тестирование NT 4.0 и InterBase 4.2 с протоколами Netbeui и TCP/IP показало их равную производительность, а в некоторых случаях Netbeui был быстрее.

Какие существуют Интернет-сервера, посвященные InterBase?

На сегодняшний день я знаю 4 таких Интернет-сервера:

InterBase Development
http://www.xmission.com/~uldata/ib

Mers Systems
http://www.mers.com

Dunstan Thomas InterBase Links
http://www.demon.co.uk/dtuk/dtinterbaselinks.html

Borland International
http://www.borland.com/interbase

Существуют ли 16-битные драйвера ODBC, позволяющие подключаться к InterBase NT, Netware или любому из серверов UNIX?

Borland в настоящее время делает доступными 16-битные драйверы ODBC как часть продукта PC Client/Developer Toolkit [данное программное обеспечение также включается в пакеты InterBase для NT и сервера Netware]. Пользователи, приобредшие лицензии на PC Client/Developer Toolkit, имеют право устанавливать эти 16-битные драйвера. Цена за приобретаемый отдельно Client/Toolkit составляет $295, Borland использует для него товарный индекс ICL1140WWFN350.

Почему Delphi 1.00 поставляется с 16-битными драйверами ODBC для InterBase?

Delphi 1.00 содержал 16-битные драйвера ODBC для IB для того, чтобы все компоненты Delphi могли без проблем подключаться к серверу. Delphi 1.0 также включал SQL Link для InterBase, натив-драйвер с высокими скоростными характеристиками. Вопросы лицензирования не были явно или неявно отражены при пакетировании и в файлах deploy.txt драйвера ODBC, поэтому легальным пользователям продукта Delphi Client/Server не запрещается распространять продукты SQL Link и Local InterBase.

В Delphi 1.02 драйверы InterBase ODBC были удалены, поскольку в необходимость в них компонентов Delphi отпала. Упоминание о драйверах остались в нескольких текстовых файлах, но это больше не требуется, так как в файлах deploy.txt содержится информация о правилах их распространения.

Существуют ли 32-битные драйвера ODBC, позволяющие подключаться к InterBase NT, Netware или любому из серверов UNIX?

Сегодня InterBase включает в себя 32-битные драйвера ODBC для Windows 95 и NT. Данные драйвера включены в InterBase 4.1 под NT и InterBase 4.2 под NT. Они были разработаны компанией Visigenic [смотри сообщение для прессы "Visigenic/Borland" на сервере www.borland.com]. Они также включены в Local InterBase под Win95/NT, который продается отдельно от Delphi. Драйвера также доступны как натив-драйвера для таких клонов UNIX, как Solaris, AIX и HP-UX. Никаких правил лицензирования не предусмотрено, а из существующих документов нельзя сделать выводы отностильно получения разработчикам доступа к драйверам путем покупки продуктов InterBase.

Поддерживают ли 32-битные драйвера ODBC DSN?

В настоящее время пока нет, в InterBase 4.2 возможность ODBC "DSN" была добавлена для поддержки соединений с серверными приложениями, такими, как сервера Web. Тем не менее, при использовании InterBase с серверами Web Server, для сервера необходимо иметь нужное число лицензий. Скоро Borland огласит свою политику отностительно лицензирования InterBase при работе с Интернет.

Почему Borland решил взимать плату за Local 32-битную версию?

(Смотри ниже подробное объяснение)

Как вы, вероятно, уже знаете, Delphi C/S 1.0 включает в себя неограниченный в распространении Local InterBase [16-бит]. Мы [группа разработчиков InterBase] решили предложить эти беспрецендентные условия для распространения нашего продукта в среде разработчиков, демонстрации великолепия сервера и для увеличения полезности Delphi как средства разработки в среде Клиент/Сервер. Delphi Client/Server Suite 2.0 содержит Delphi Client/Server 1.0 и сохраняет условие свободного распространения Local InterBase [16-бит].

Для 32-битных версий Delphi мы имеем:

Delphi Desktop - не 32-битный InterBase любой сортировки [Desktop<>Client/Server]
Delphi Developer - Local InterBase для Windows 95/NT включен, без распространения.
Delphi C/S Suite 2.0 - Local IB для Win95/NT, IB Server NT на 2 пользователя, также без распространения.

Почему без распространения?

Во-первых, как вы можете увидеть из моих выкладок, новый продукт Local InterBase сертифицирован для использования в Windows 95 и Windows NT. Его архитектура полностью переписана с использованием нашего расширенного проекта SuperServer. Поскольку продукт разрабатывался как для Win95, так и для NT, Local InterBase настоятельно рекомендуется использовать в качестве отдельного сервера [MS не имеет сервера Win95; Oracle имеет один, но он имеет другой алгоритм программирования, чем NT server, они предлагают заплатить $400 за каждый 16- и 32-битный C API, и они посылают вас в InterSolv для ПОКУПКИ драйвера ODBC; Sybase имеет SQL Anywhere/Watcom и SQL Server 11 с другим API [ODBC против OpenClient], другой архитектурой и серьезными проблемами масштабируемости [продукт SQL Anywhere всегда использует Watcom с TransactSQL, но не использует OpenClient API, низкая многопользовательская производительность движка Watcom {для этого можно посмотреть последние обзоры в PC MAG за 10/94 и InfoWorld}, и так далее]; Informix не имеет ничего общего с работой на этих платформах; а Gupta свернула свою деятельность на этом поприще и кинулась разрабатывать High-End инструментарий для провайдеров, а не для серверов {если я правильно понял последнее сообщение для печати}]. 16-битные версии для отдельных пользователей отлично смотрелись в C/S пакете, в котором они распространялись. Ожидалось, что эти версии в пакете client/server должны быть свободными в распространении, но это не так.

При продаже отдельно от Delphi и других клиентских продуктов Borland, продукт Local InterBase под Win95/NT будет сравниваться с SQL Anywhere, Personal Oracle и Personal Oracle Lite, и MS SQL Server Workstation.

Мы включим наши C/C++ API для свободного использования.
Мы включим наши 32-битные драйвера ODBC 2.5 под Win95/NT для свободного использования.
Мы включим полную online-документацию, включая документацию по C API.
Мы включим великолепную интеграцию в среду Win95/NT.
Мы включим нативный 32-битный инструментарий.
Мы предлагаем РАЗЛИЧНЫЕ наборы-пакеты для полного сервера [различающиеся только в поддерживаемых DDL, API, включаемой online-документацией и др.] с РАЗЛИЧНЫМ ценообразованием.

Короче говоря, Local InterBase 32 предлагает бОльшие характеристики, лучшее взаимодействие с SQL [совместимость с уровнем ANSI 92, не '89], бОльшую универсальность [тот же комплект для Win95/NT], лучшую интеграцию с ОС, лучшую масштабируемость [мы работаем с 16 операционными системами, используя ОДНО И ТО ЖЕ API], лучшую производительность [поскольку вы пишите на одном API или посредством Delphi и никогда не переписываете свое приложение].

Мы предлагаем такие характеристики/производительность/цены, что конкуренты просто рыдают навзрыд.

Как мне подписаться на список рассылки InterBase Mailing List?

Для подписки отправьте письмо по адресу listproc@esunix1.emporia.edu с командой "SUBSCRIBE INTERBASE Ваше Имя" в теле сообщения (без кавычек).

Если в этом FAQ'е нет ответа на мой вопрос, куда мне обратиться?

У вас имеется несколько доступных способов: Послать ваш вопрос в Compuserve GO BDEVTO (Секции 8 и 9) Послать ваш вопрос в список рассылки InterBase Mailing List (смотри Вопрос 14) Заключить контракт на поддержку (Support Contract) для InterBase и спросить службу технической поддержки (Technical Support)

Вопросы и ответы по InterBase 4.2

Что такое InterBase 4.2?

InterBase 4.2 - новая версия сервера реляционной базы данных Borland InterBase под Windows 95 и NT.

Что нового в InterBase 4.2?

InterBase 4.2 - целое семейство новых продуктов, включающее в себя потокобезопасные клиентские библиотеки для Windows 95/NT, с расширенными 32-битными драйверами ODBC, расширенную версию Local InterBase, предназначенную для разработки отдельным пользователем и ее распространения, новый многопользовательский сервер под Windows 95 для небольших рабочих групп и новый сервер под Windows NT для разработки приложений уровня департамента и предприятия. InterBase 4.2 был создан с использованием расширенной версией архитектуры Borland SuperServer, что позволило поднять производительность продукта на небывалую высоту, сохранив при этом исторические преимущества InterBase и добавив легкость установки, удобство использования и разработки. Кроме того, InterBase 4.2 для Windows NT также содержит нового менеджера лицензий (License Manager), позволяющий системным администраторам легко и эффективно управлять пользователями баз данных.

Для чего нужен Local InterBase?

Local InterBase 4.2 разрабатывался для компаний и корпораций, поставляющих решения клиент/сервер для предприятий, которые имеют как автономных, так и сетевых пользователей. Local InterBase обеспечивает пользователей ноутбуков и рабочих групп автономным сервером баз данных, работающим на всех платформах Windows [Windows 3.1, 95 и NT], предлагая таким образом решение для сотрудников предприятий, имеющих нерегулярный доступ к сети. Поскольку Local InterBase использует тот же язык программирования и формат баз данных, что и семейство продуктов сервера InterBase [доступные для платформ Windows и UNIX], то приложения, созданные для использования с сервером InterBase, на 100% совместимы с Local InterBase, и не требуют внесений изменений для правильной работы.

Кто может быть пользователем InterBase Server под Windows 95?

Сервер InterBase под Windows 95 - многопользовательский сервер для рабочих и небольших групп. Совместимый с Windows 95, Windows NT Workstation и NT Server, InterBase Server под Windows 95 идеален для приложений, которые требуют не более 4 параллельных пользователей. Если потенциальное количество пользователей может быть 10 и более, InterBase Server под Windows 95 будет управлять соединениями для гарантии того, что будут активны не более 4 пользователей, это предохранит операционную систему Windows 95 от перегрузки с операциями, связанными с базами данных. InterBase Server под Windows 95 не требует для работы выделенной машины и может работать в сетевой среде типа "peer to peer", где сервер может обслуживать не только операции с базами данных.

Что включает в себя сервер InterBase под Windows 95?

Сервер InterBase под Windows 95 включает в себя клиентские библиотеки и драйвера ODBC, необходимые для распространения в пределах рабочей группы, которая планирует пользоваться сервером, а также сам сервер, устанавливаемый на одной из машин [обычно самая быстрая машина в группе]. Отдельные клиентские приложения, работающие с Local InterBase, легко адаптируются для работы с сервером InterBase под Windows 95, тем самым позволяя компаниям и крупным корпорациям легко масштабировать свои решения по мере увеличения к ним требований.

Что включает в себя InterBase Server 4.2 for Windows NT?

InterBase Server 4.2 под Windows NT включает в себя сервер InterBase, клиентские библиотеки InterBase [включая ODBC драйвера Win95/NT], менеджер лицензий License Manager, позволяющий системным администраторам легко и эффективно управлять пользователями баз данных, и высокопроизводительный 32-битный визуальный (GUI) инструментарий. Сервер InterBase под Windows NT фирмы Borland - наилучший выбор для сервера баз данных под Windows. Тестировавшийся и сертифицированный под NT 3.51 и 4.0, InterBase Server 4.2 легко справляется с задачами уровня крупного предприятия. Способный использовать многопроцессорные машины для максимальной производительности, InterBase Server 4.2 является наилучшим выбором для крупномасштабных приложений, требующих высокую скорость, легкость установки, удобство разработки и надежность эксплуатации.

Как осуществляется лицензирование InterBase?

InterBase предусматривает два типа лицензий: Named User (пользовательская) и Concurrent Server (серверная). Лицензия Named User рекомендуется для приложений, в которых количество пользователей, имеющих доступ к базе данных, является числом относительно постоянным, а вероятность добавления в сетевую среду серверов InterBase достаточно высока. Данная лицензия гарантирует, что любой пользователь NT Named Client будет иметь полный доступ ко всем серверам предприятия InterBase NT без необходимости приобретения лицензий для множества пользователей. Цена лицензии Concurrent Server позволяет разработчикам иметь определенное количество параллельно работающих пользователей, но при этом количество потенциальных пользователей может быть значительно большим. Если число потенциальных пользователей значительно превышает число паралельно работающих пользователей на текущий момент, лицензия Concurrent Server позволит вам в будущем сэкономить немало денег. Тем не менее, если к приложению прибавляются дополнительные сервера баз данных, вы должны иметь серверные лицензии в количестве паралелльно работающих пользователей, подключенных к этим серверам, даже если эти пользователи уже работают с другими серверами NT, имеющимися на предприятии. Таким образом, лицензия Named Client позволяет лицензировать и пользователей, и машины, и допускает подключение клиента к любому серверу предприятия NT, имеющему лицензию Named Client. Лицензия Concurrent Server лицензирует количество параллельно работающих на сервере пользователей и не предоставляет клиентам никаких клиентских лицензий.

Могу ли я свободно копировать ODBC драйвера InterBase?

Нет, но все пользователи InterBase 4.2, имеющие лицензию Named User, могут иметь копию клиентских библиотек InterBase и драйверов ODBC, установленных на их машине. Таким образом, если вы купили легальную лицензию для подключения к InterBase, вы имеете право на создание резервной копии. Аналогично этому, все пользователи InterBase 4.2 с лицензиями Concurrent Server также могут иметь копии клиентских библиотек и драйверов ODBC, установленных на их машине. Разработчики не могут копировать библиотеки 4.2 на машины незарегистрированных пользователей, или пользователей предыдущих версий InterBase [например, 4.0 и 4.1]. Пользователи этой группы должны обновить сервер до версии InterBase 4.2 или приобрести индивидуальные копии инструментария разработчика (Developer Toolkit) для каждого клиента, где имеются файлы этого инструментария [драйверы ODBC, GUI-утилиты и пр.].

Сколько стоит обновление до 4.2?

Клиенты InterBase 4.0 и 4.1 могут обновить InterBase до версии 4.2 за $499.95 [001065]


Как гарантированно сделать


Как гарантированно сделать backup/restore БД InterBase с опцией 'Replace existing database' и записями протоколов в файлы с гарантированным отстрелом пользователей? Nomadic советует: Att.bat: at 01:00 /INTERACTIVE "e:\IB_DATA\BR.BAT" BR.bat: del e:\IB_DATA\b.txt del e:\IB_DATA\r.txt del e:\ib_data\AR_IB.PRV del e:\IB_DATA\AR_IB.GBK d:\ib_42\bin\gfix -shut -force 1 e:\ib_data\AR_IB.GDB -user "SYSDBA" -password "oooo" net stop "InterBase Server" copy e:\ib_data\AR_IB.GDB e:\ib_data\AR_IB.PRV net start "InterBase Server" d:\ib_42\bin\gbak e:\ib_data\AR_IB.GDB e:\ib_data\AR_IB.GBK -user "SYSDBA" -password "oooo" -B -L -Y "e:\IB_DATA\b.txt" d:\ib_42\bin\gbak e:\ib_data\AR_IB.GBK e:\ib_data\AR_IB.GDB -user "SYSDBA" -password "oooo" -P 4096 -V -R -Y "e:\IB_DATA\r.txt" Sergey Klochkovski [001247]


Как скомпилиpовать UDF для Interbase


Как скомпилиpовать UDF для Interbase под Linux RH 4.0? Nomadic советует: Пример - #!/bin/sh gcc -c -O -fpic udflib.c ld -o libudf.so -shared udflib.o cp libudf.so /usr/interbase/lib/ ldconfig -v >>/dev/null [001249]


Как узнать текущие дату


Как узнать текущие дату и время в Interbase? Nomadic отвечает: Дата + время - DATE. Только дата - TODAY. Только время - DATE-TODAY. [001255]