faqs.org.ru

 Главная > Программирование > Языки Pascal/Delphi >

RU.DELPHI.DB FAQ

Секция 2 из 2 - Предыдущая - Следующая


Что же касается Server Manager и других утилит с GUI (IBConsole,
IBAdmin,
IBExpert и п.т.), то все они используют тот или иной способ из числа
описанных
выше.

Alex Cherednichenko. E-mail: cherednichenko@wo.cz

------------------------------------------------------------
Q-30:  Текущая дата на разных серверах
------------------------------------------------------------
Это один из случаев где ORACLE и InterBase различаются.

// Сделать SQL зависимым от типа DBMS

 if AppLibrary.Database.DriverName = 'ORACLE' then
   SQL.Add ('and entry_date < SYSDATE')
 else
   SQL.Add ('and entry_date < "TODAY"');
 end;

Источник: http://www.delphifaq.com/fq/q0048.shtml

------------------------------------------------------------
Q-31:  Какие индексы лучше для InterBase
------------------------------------------------------------
1) Создавайте индексы для всех колонок которые используются в выражение
where или join, за исключением полей, для которых задано ограничение
foreign key, т.к. в этом случае InterBase автоматически создаёт
соответствующий индекс и дублировать его ещё одним нежелательно.
Кроме того, если по такому полю уже есть индекс созданный
пользователем, то создать foreign key не удастся.

2) Если используется выражение в ORDER BY, то создавйте составной
индекс в
том же самом порядке как это определено в конструкции ORDER BY.
Если часто используется SELECT MAX() по какому-либо полю, то желательно
создать DESCENDING индекс по этому полю (или ASCENDING для SELECT MIN
() ).

3) Если вы объединяете несколько условий с помощью OR, то создавайте
отдельные индексы для каждого условия

select * from t where col1 =

Источник: http://www.delphifaq.com/fq/q0048.shtml
Дополнения: Alex Cherednichenko. E-mail: cherednichenko@wo.cz

См. также http://www.ibase.ru/

------------------------------------------------------------
Q-32:  Как узнать версию BDE
------------------------------------------------------------
 program BDEVersion;

 uses
   Forms,
   DB,
   BDE,
   Dialogs,
   SysUtils;

 {$R *.RES}

 var
   ThisVersion : SYSVersion;
 begin
   DbiGetSysVersion(ThisVersion);
   ShowMessage('BORLAND DATABASE ENGINE VERSION = ' +
 IntToStr(ThisVersion.iVersion));
 end.

Check the BDE version in your application
Sometimes you may want to have your application check that the proper
BDE
version is installed.
Use the following code, provided by Richard C Haven:

program BDEVersion;

uses
  Forms,
  DB,
  BDE,
  Dialogs,
  SysUtils;

{$R *.RES}

var
  ThisVersion : SYSVersion;
begin
  DbiGetSysVersion(ThisVersion);
  ShowMessage('BORLAND DATABASE ENGINE VERSION = ' +
IntToStr(ThisVersion.iVersion));
end.

Источник: Richard C Haven:

----------------------------
uses
  DbiTypes, DbiProcs, DbiErrs;
.....
function fDbiGetSysVersion(SysVerList: TStringList): SYSVersion;
begin
  Check(DbiGetSysVersion(Result));
  if SysVerList <> nil then
  begin
    with SysVerList do
    begin
      Clear;
      Add(Format('ENGINE VERSION=%d', [Result.iVersion]));
      Add(Format('INTERFACE LEVEL=%d', [Result.iIntfLevel]));
      Add(Format('VERSION DATE=%s', [DateToStr(Result.dateVer)]));
      Add(Format('VERSION TIME=%s', [TimeToStr(Result.timeVer)]));
    end;
  end;
end;
{from BDE32.hlp}

------------------------------------------------------------
Q-33:  Как можно отфильтровать поле типа lookup в dataset?
------------------------------------------------------------
Вы не можете использовать lookup поле в строке фильтрации, но это
можно обойти с помощью обработчика события OnFilterRecord.

Источник: http://www.delphifaq.com/fq/q0044.shtml

------------------------------------------------------------
Q-34:  Как можно узнать текущую дату/время в InterBase? (версия 5.0)
------------------------------------------------------------
InterBase четыре литерала для DATE. Это: 'today', 'yesterday',
'tomorrow' и 'now'
Использовать совместно с cast.

insert into mytable values(cast('now' as DATE), 'Test')

Источник: http://www.delphifaq.com/fq/q0048.shtml

См. также http://www.ibase.ru/

------------------------------------------------------------
Q-35:  Как избавиться от ошибки BDE '2B04 Too many open files'
------------------------------------------------------------
Открыть 'BDE Administrator' и выбрать закладку 'Configuration'.
Затем выбрать 'System' и далее 'INIT'.
Изменить 'MaxFileHandles' (по умолчанию 48).

Источник: http://www.delphifaq.com/fq/q0048.shtml

------------------------------------------------------------
Q-36:  Проблемы с MDAC в W2K
------------------------------------------------------------
После установки  последнего MDACа
http://a103.ms.a.microsoft.com/f/103/1611/2h/download.microsoft.com/down
load/dasdk/SP/2.61.7326.6/WIN98Me/RU/MDAC_TYP.EXE
на Win2000 поимел неприятность. Что делать?

Необходим ADO Update с сайта http://www.borland.com

А.Л.Тенцер

------------------------------------------------------------
Q-37:  Про DOA
------------------------------------------------------------

http://www.ash.hut.ru/cgi-bin/publish.pl?
cat=delphi_db&article=1002379588

"oraLab" <dba@mail.kz>

------------------------------------------------------------
Q-38:  Как объявлять в Interbase внешние функции, написанные в Дельфи?
------------------------------------------------------------
Сервер вылетает при попытке вызова функции:
function DatePart(AMode: PChar; ADate: PChar): integer; StdCall;

Вместо stdcall использовать CDECL. Читать статью:

http://www.ibase.ru/devinfo/udf_ok.htm

Alex Cherednichenko. E-mail: cherednichenko@wo.cz
Dmitry Kuzmenko, Epsylon Technologies.
Viacheslav Mizin.  E-mail: mizinvv@pisem.net


------------------------------------------------------------
Q-39:  Как создать таблицу DBASE IV с полями NUMERIC(n,m)?
------------------------------------------------------------
Таблицу с нужными полями, рабочую или пустую, используем как шаблон:

{дизайнтайм}
 Table.TableType := ttDbase;
 Table.TableName := NewTableName; // можно задать имя файла и
путь				
{рантайм}
 Table.CreateTable; // cоздается пустая копия таблицы той же структуры.

При указаниии Level=7 вновь создаваемые таблицы будут иметь этот уровень
вне зависимости от Level источника.

Anatoly Podgoretsky (anatoly@podgoretsky.com)

------------------
Создание таблицы DBASE/FOXPRO с полями Numeric(n, m)

Общие моменты (для компонента TTable):
1. Поле Numeric(n, m) выражается в Delphi полем ftBCD(Precision, Size) -
 именно так:
Precision=n
2. Нулевая величина Size в коллекции FieldDefs в dfm не записывается, а
по умолчанию восстанавливается величина 4. Если хочется иметь поля типа
Numeric(n, 0), описывать поля в дизайнтайме нужно только через
коллекцию Fields.
3. Использование драйвера FOXPRO всегда(?) дает поля по умолчанию
Numeric(20, 4).
4. Стандартные средства VCL для создания таблиц пользуются назначениями
языка драйвера, игнорируя попытки изменить их только для вашей таблицы.

Способы создания таблиц:
1. С использованием установок дравера LEVEL и LANGDRIVER
а) Описать поля TTable (с учетом "общие моменты, 2"), вызвать метод
   CreateTable (из дизайнтайма, рантайма, TBatchMove).
б) Выполнить запрос типа

 CREATE TABLE "employee.dbf"
 (
  name CHAR(15),
  salary NUMERIC(10,2),
 )

2. С параметром LEVEL не зависящим от установок драйвера
Только из рантайм. В программе нужно перед созданием таблицы написать

 Table.TableLevel := 4 // или другой, устраивающий вас уровень

3. С параметрами LEVEL и LANGDRIVER не зависящими от установок драйвера
Только из рантайм. Изучать исходники TTable.CreateTable. ;)
Пример (личный, переделка TTable.CreateTable):

 procedure CreateDBFTable(Tbl : TTable; ADir, AName : string);
 const
   idLang='db866ru0';
   idLevel=4;
 var
   TableDesc: CRTblDesc;
   FieldDescs: TFieldDescList;
   LvlFldDesc: packed array [1..2] of FLDDesc; {по количеству
используемых параметров}
   {для неизвестного количества парметров взять динамический массив}
   LOptions : DBINAME;
   hDb : hDbiDb;

   procedure InitTableSettings;
   var
     PTblType: PChar;
   begin
     FillChar(TableDesc, SizeOf(TableDesc), 0);
     with TableDesc do
     begin
       AnsiToNative(Tbl.Locale, AName, szTblName, SizeOf(szTblName) -
1);
       PTblType := szDBASE;
       StrCopy(szTblType, PTblType);
	 iOptParams := 2;
	 StrCopy(LvlFldDesc[1].szName, szCFGDRVLEVEL);
	 LvlFldDesc[1].iLen := Length(IntToStr(idLevel));
	 LvlFldDesc[1].iOffset := 0;
	 StrCopy(LvlFldDesc[2].szName, szCFGDRVLANGDRIVER);
	 LvlFldDesc[2].iLen := StrLen(idLang) + 1;
	 LvlFldDesc[2].iOffset := LvlFldDesc[1].iLen; {начало второго
параметра}

	 LOptions := IntToStr(idLevel) + #0 + idLang + #0;
	 pOptData := @LOptions;
	 pfldOptParams :=  @LvlFldDesc;
     end;
   end;

   procedure InitFieldDescriptors;
   var
     I: Integer;
     TempFieldDescs: TFieldDescList;
   begin
     with TableDesc do
     begin
     {содержание InitFieldDefsFromFields взять из исходников VCL
      необходимо для заполнения FieldDefs, который лучше очистить
      в дизайнтайме из Fields см. общие замечания 2}
       InitFieldDefsFromFields;
       iFldCount := Tbl.FieldDefs.Count;
       SetLength(TempFieldDescs, iFldCount);
       for I := 0 to Tbl.FieldDefs.Count - 1 do
       with Tbl.FieldDefs[I] do
       begin
	 {содержание EncodeFieldDesc взять из исходников VCL}
	 EncodeFieldDesc ( TempFieldDescs[I], Name, DataType, Size,
			   Precision);
	 if Required then Inc(iValChkCount);
       end;
       SetLength(FieldDescs, iFldCount);
       pFldDesc := BDE.PFLDDesc(FieldDescs);
       Check( DbiTranslateRecordStructure(nil, iFldCount,
	      BDE.PFLDDesc(TempFieldDescs),
	 szDBASE, nil, pFLDDesc, False));
     end;
   end;

 begin
   Check(DbiOpenDatabase( nil, nil, dbiREADWRITE, dbiOPENEXCL,
			  nil, 0, nil, nil, hDb));
   try
     Check(DbiSetDirectory(hDb, PChar(ADir)));
     InitTableSettings;
     InitFieldDescriptors;
     Check(DbiCreateTable(hDb, True, TableDesc));
 {следующие четыре строки я использую для автоматического подключения
TTable к созданой  таблице}
     Tbl.DatabaseName := ADir;
     Tbl.TableName := AName;
     Tbl.TableType := ttDBase;
     Tbl.TableLevel := 4;
   finally
     Check(dbiCloseDatabase(hDb));
   end;
 end;

Если использовать правильный LANGDRIVER вся работа по локализации
таблицы выполняется Delphi автоматически: конвертирует текстовые данные
в cp866 и обратно и отображает их правильно вне зависимости от
установок драйвера.
Если вы получаете левый DBF, в котором может быть некорректно прописана
кодировка, можно использовать DbiDoRestructure (пример заполнения
параметров приведен в процедуре InitTableSettings).

Андрей Бахтин  andrew@udmnet.ru

------------------------------------------------------------
Q-40:  Как установить FireBird?
------------------------------------------------------------
Устанавливаем FB в папку C:\FB\ (для примера)

УСТАНОВКА "AS APPLICATION"
==========================
Минимально необходимый набор файлов сервера:

C:\FB\BIN\ibserver.exe
C:\FB\INTL\gdsintl.dll
C:\FB\interbase.msg
C:\FB\isc4.gdb

и ключи в реестре:

==начало файла app.reg===
REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Borland\InterBase\CurrentVersion]
"RootDirectory"="C:\\FB\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"InterBaseServer"="C:\\FB\\BIN\\ibserver.exe -a"
==конец файла app.reg===

Это получилась установка "как приложение". В Win9x это единственно
возможная установка, и обеспечивает хоть локальный, хоть сетевой
доступ. Но под WinNT, W2K такая установка даст только локальный доступ.
Для сетевого доступа в WinNT, W2K надо ставить FB "как сервис".

УСТАНОВКА "AS SERVICE" ПОД WinNT, W2K
=====================================
Набор файлов сервера:

C:\FB\BIN\ibserver.exe
C:\FB\BIN\ibguard.exe
C:\FB\INTL\gdsintl.dll
C:\FB\interbase.msg
C:\FB\isc4.gdb

==начало файла srv.reg===
REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Borland\InterBase\CurrentVersion]
"Version"="WI-T6"
"DefaultMode"="-r"
"RootDirectory"="C:\\FB\\"
"GuardianOptions"="1"
"ServerDirectory"="C:\\FB\\BIN\\"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InterBaseGuardian]
"Type"=dword:00000110
"Start"=dword:00000002
"ErrorControl"=dword:00000001
"DisplayName"="InterBase Guardian"
"ObjectName"="LocalSystem"
"ImagePath"="C:\\FB\\BIN\\ibguard.exe"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InterBaseServer]
"Type"=dword:00000110
"Start"=dword:00000003
"ErrorControl"=dword:00000001
"DisplayName"="InterBase Server"
"ObjectName"="LocalSystem"
"ImagePath"="C:\\FB\\BIN\\ibserver.exe"
==конец файла srv.reg===

Можно автоматизировать установку:

1. Сворачиваем необходимые файлы в саморазворачивающийся архив fb.exe и
кладем его на дискету (все входит на 1 дискету).
2. На ту же дискету кладем батничек:

===начало файла install.bat===
md c:\fb
copy fb.exe c:\fb\fb.exe
c:
cd c:\fb
fb.exe
regedit /s app.reg
cd c:\fb\bin
ibserver.exe -a
===конец файла install.bat===

Это все. Даже не нужна перезагрузка компьютера после установки.

P.S. Во всех случаях клиент - это всего один файл - gds32.dll
в папке с приложением, или в WINDOWS\SYSTEM\

Виталий Бармин	 barmin@udm.ru

------------------------------------------------------------
Q-41:  Как установить BDE?
------------------------------------------------------------
Для начала надо прочитать:

{BDE}\bdeinst.txt
{BDE}\bdereadme.txt
{BDE}\Readlink.txt
{DELPHI}\deploy.txt

Распространить одну-две копии BDE проще всего с компакта Delphi, с
помощью выборочной установки только BDE.

Для массовых установок фирма Борланд рекомендует использовать
сертифицированные инсталляторы, такие как: Install Shield(Express),
Wise.
Install Shield Express поставляется в Delphi 2-5

См. также статью:
Merging the configuration file has failed
http://community.borland.com/article/0,1410,18727,00.html

Существует нелицензионный путь через bdeinst.dll, но это без алиасов и
SQLLink.

Заметим, что достаточно распространенные методы, связанные с прямым
копированием файлов BDE, чреваты многочисленными проблемами, которые
могут возникнуть как в текущей работе, так и при будущих обновлениях.

------------------------------------------------------------
Q-42:  Как установить BDE с помощью bdeinst.dll?
------------------------------------------------------------
Желательно скопировать bdeinst.dll в папку WINDOWS, упрощается процесс
установки как в первый раз, так и при последующих инсталляциях.

Выполнить из командной строки:

 regsvr32.exe <path>bdeinst.dll

 bdeinst.dll находится в файле bdeinst.cab, каталог BDE
 bdeinst.dll распаковывается из bdeinst.cab командой extract.exe

Воробьев Дмитрий vorobjov@veritas.dp.ua
A.Fionik

---
В папке \Program Files\Borland Shared\BDE\ есть архив bdeinst.cab,
распаковать из него bdeinst.dll с помощью extract.exe
Скачать Inno Setup http://www.jordanr.dhs.org/

Написать скрипт к нему такого содержания:

+=-==  BDE.ISS	==-=+

; Инсталляция BDE 5.0 из D4
;

[Setup]
Bits=32
AppName=BDE
AppVerName=BDE 5.0
AppCopyright=Copyright Inprise
DefaultDirName={tmp}
DefaultGroupName=BDE
MinVersion=4,3.51
CompressLevel=9
DiskSpanning=1

[Files]
Source: "BdeInst.Dll"; DestDir: "{app}"; Flags: regserver

+=-==  BDE.ISS	==-=+

Получится полная инсталляция BDE размером около 3Мб.

Создание алиасов программным путем:

  Session1. Active := True;
  if not Session1. IsAlias ('garant') then begin
    Session1. AddStandardAlias ('garant', ExtractFileDir (ParamStr
(0)), '');
    Session1. SaveConfigFile;
    ShowMessage ('Псевдоним `garant` успешно создан!');
  end;

Alexander Trunov (Alexander.Trunov@p1.f10.n5069.z2.fidonet.org)

------------------------------------------------------------
Q-43:  Как добавлять алиасы и дополнительно конфигурировать BDE?
------------------------------------------------------------
Список примеров:

Пример #1 создает и конфигурирует алиас (Alias) для использования
стандартных баз (.DB, .DBF). Алиас затем используется компонентом
TTable.

Пример #2 создает и конфигурирует алиас (Alias) для использования
стандартных баз (.DB, .DBF). В данном примере демонстрируется как
получить информацию от пользователя для конфигурирования алиаса в run-
time.

Пример #1: Использется базы формата .DB or .DBF (STANDARD)

1.  Создать новый проект.
2.  Поместить на форму следующие компоненты:
     - TDatabase, TTable, TDataSource, TDBGrid, и TButton
3.  Двойным щелчком по компоненте TDatabase или выбрать Database Editor
из TDatabase SpeedMenu для запуска редактора свойств (Database Property
editor).
4.  Установить свойство DatabaseName в 'MyNewAlias'. Данное имя будет
использоваться как алиас для установки свойств в компонентах TTable,
TQuery, TStoredProc.
5.  Выбрать STANDARD для Driver Name.
6.  Щелкнуть по кнопке Defaults. Это автоматически добавит (при
Parameter Overrides) PATH= в секции.
7.  Установить PATH= в C:\DELPHI\DEMOS\DATA (PATH=C:\DELPHI\DEMOS\DATA)
8.  Щелкнуть по кнопке OK для закрытия диалога.
9.  Установить свойство Table1.DatabaseName в 'MyNewAlias'.
10. Установить свойство DataSet1.DataSource в 'Table1'.
11. Установить свойство DBGrid1.DataSource в 'DataSource1'.
12. Поместить следующий код внутри обработчика Button1.OnClick:

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   Table1.Tablename:= 'CUSTOMER';
   Table1.Active:= True;
 end;

13. Запустить приложение.

*** Если вам нужен альтернативный путь для шагов 3 - 11, то разместите
следующий код внутри обработчика Button1.OnClick.

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   Database1.DatabaseName:= 'MyNewAlias';
   Database1.DriverName:= 'STANDARD';
   Database1.Params.Clear;
   Database1.Params.Add('PATH=C:\DELPHI\DEMOS\DATA');
   Table1.DatabaseName:= 'MyNewAlias';
   Table1.TableName:= 'CUSTOMER';
   Table1.Active:= True;
   DataSource1.DataSet:= Table1;
   DBGrid1.DataSource:= DataSource1;
 end;

Пример #2: Конфигурация, определяемая пользователем.

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

Directory, ServerName, Path, Database Name, и другие нужные параметры
конфигурации могут быть получены с помощью диалога от пользователя или
прочитаны из .INI файла.

1. Выполните шаги (1-11) из примера #1.
2. Поместите следующий код в обработчике Button1.OnClick.

 procedure TForm1.Button1Click(Sender: TObject);
 var
   NewString: string;
   ClickedOK: Boolean;
 begin
   NewString := 'C:\';
   ClickedOK := InputQuery('Database Path',
	'Path: --> C:\DELPHI\DEMOS\DATA', NewString);
   if ClickedOK then
     begin
      Database1.DatabaseName:= 'MyNewAlias';
      Database1.DriverName:= 'STANDARD';
      Database1.Params.Clear;
      Database1.Params.Add('Path=' + NewString);
      Table1.DatabaseName:= 'MyNewAlias';
      Table1.TableName:= 'CUSTOMER';
      Table1.Active:= True;
      DataSource1.DataSet:= Table1;
      DBGrid1.DataSource:= DataSource1;
    end;
 end;

3. Запустите приложение.

См также: Delphi On-line help: Database Properties Editor; TDatabase

Reid Roman (rkroman@home.com)

---
См. также:

How to change NET DIR programmatically so it persists?
http://community.borland.com/article/0,1410,23231,00.html

------------------------------------------------------------
Q-44:  Десктопный MSSQL Server.
------------------------------------------------------------
 MSDE 1.0 -Microsoft SQL Server Desktop Engige- несколько огpаниченный
MSSQL 7.0, но менее требовательный к ресурсам. Работает неплохо как на
NT, так и на win9x.
 Форматы файлов баз данных на 100% совместимы с MSSQL 7.0.
 Максимальный pазмеp базы около 2Гб. Подpобности на
http://msdn.microsoft.com/vstudio/msde/
 В поставке нет GUI tools, но подходят от MSSQL 7.0.
 Бесплатен для владельцев MS Visual Studio 6.0 или любого сpедства
pазpаботки из комплекта - VC++,VB,VFP и Access.

 Dmitri Zakharov	2:5004/5.53
 Тенцер А.Л.		tolik@katren.nsk.ru

------------------------------------------------------------
Q-45:  Как установить клиента InterBase?
------------------------------------------------------------
1. Для Yaffil или FireBird последних билдов - ничего не надо, кроме
gds32.dll в директориях поиска библиотек.

2. Для IB5, IB6 или старого FB первых билдов - надо дополнительно
прописать в файле services строчку "gds_db 3050/tcp" {файл должен
завершаться пустую строкой}.

3. Для IB5, дополнительно к п.2., добавить в ключ реестра:

HKLM\SOFTWARE\InterBase Corp\InterBase\CurrentVersion\RootDirectory

строковое значение - имя папки, в которой лежит файл ib_license.dat

4. В случае медленного подключения клиентов в сети TCP/IP попробуйте
прописать адреса IB  серверов в файле HOSTS.

Виталий Бармин	 barmin@udm.ru


------------------------------------------------------------
I-46:  Список рекомендуемой литературы
------------------------------------------------------------
1. М. Грабер. SQL. Изд. Лори, 2001. -644с.
{Переработанный вариант "Введения в SQL". На нем еще
написано "бестеллер N1"}

2. М. Грабер. SQL Справочное руководство. Изд. Лори, 2001.
{Переиздание, включает комментарии по SQL99. Полезный справочник}

3. К. Дж. Дейт. Введение в системы баз данных. 7-е издание, Изд.
дом "Вильямс", 2001. -1070с.
{Самая правильная книга}

4. Дейв Энсор, Йен Стивенсон. Oracle. Проектировние баз данных. К.:
Издательская группы BHV, 2000. -560с. ISBN 966-552-019-9

5. Хендерсон К. Руководство разработчика баз данных в Delphi 2. К.:
Диалектика, 1996. -544с., ил. ISBN 966-506-041-4(рус.)

6. Лишнер Р. Delphi. Справочник. СПб: Символ-Плюс, 2001. -640с., ил.
ISBN 5-93286-019-7
{Включает отдельные главы по БД}

 - Из электронной библиотеки Анатолия Подгорецкого
http://www.podgoretsky.com

1. Alexandr Panfilov. Справочник по инструкциям и функциям InterBase SQL

2. Грачев А.Ю.	Введение в СУБД Informix

3. Краткое практическое руководство разработчика информационных систем
на базе СУБД ORACLE

4. Степанов Ю.Л. Разработка приложений баз данных для СУБД Sybase SQL
Anywhere

5. В.В.Кириллов, Г.Ю.Громов. Структуризированный язык запросов (SQL)

--
В списке отсутствует ряд хороших книг по причине недостаточности
выходных данных.
Замечания, исправления или дополнения можно mailto:lv.t@rambler.ru

------------------------------------------------------------
Q-47:  Где найти компоненты прямого доступа к Oracle?
------------------------------------------------------------
SQLDirect Component Library версия 2.9.2 - библиотека компонет для
доступа к
Centura SQLBase, IBM DB2, Informix, Interbase, Oracle, MS SQL Server,
MySQL,
PostgreSQL, Sybase servers и ODBC datasources.

http://www.sqldirect-soft.com/

Andrew Holubovski   news@delphiplus.org



------------------------------------------------------------
Q-48:  Как запустить по таймеpу хpанимую пpоцедуpу InterBase6?
------------------------------------------------------------
Непосредственной возможности нет.
Вместо этого пишется программа, которая по таймеру запускает процедуру.
Программа помещается на сервер, где установлен IB.

Еще вариант, более универсальный:
Пишется скрипт с запуском процедуры, и по AT (или cron в unix) на
сервере запускается
isql -i yourscript.sql.

Dmitry Kuzmenko, Epsylon Technologies, www.demo.ru.


------------------------------------------------------------
Q-49:  Lock file has grown too large
------------------------------------------------------------
Эта проблема специфична для таблиц форматат Paradox, относится как 16
битным, так и 32 битным версиям BDE, и может встречается при выполнении
одного из следующих условий:

  1. Исполняемый файл приложения находится в той же папке, что и
таблица.
  2. Некорректно установлен (неустановлен) параметр Private Directory.
  3. Открытая в TTable таблица Paradox участвует в запросах TQuery.
  4. Параметр LOCAL SHARE установлен в True (BDE Administrator,
закладка "System")

Для решения проблемы необходимо выполнить следующие шаги:

  1. В папке с исполняемым файлом приложения создайте три новых папки:
     TABLES, PRIV и NET (длина пути NetDir не должна привышать 31
символа).
     Поместите все таблицы приложения в папку Tables

  2. Во время исполнения Ваше приложение должно устанавливать значения:

     Session.PrivateDir := ExtractFilePath(ParamStr(0)) + 'PRIV';
     Session.NetFileDir := ExtractFilePath(ParamStr(0)) + 'NET';

  3. Убедитесь, что значение LOCAL SHARE установлено в False
     (BDE Administrator, закладка "System")

Эти рекомендации позволяют избежать ошибки "Lock File Too Large".

Источник:
http://community.borland.com/article/0,1410,15256,00.html

--
Примечание: данные рекомендации справедливы для локальных баз, в случае
сетевых баз и/или размещения программы на сетевом устройстве или при
доступе из нескольких программ, можно поступись следующим образом:

  1. Не размещайте базу и программу в одной папке, тем более, что
программу желательно поместить в защищенную от записи папку.
  2. Приватный каталог надо разместить в персональной папке, желательно
для каждой запущенной копии приложения отдельный, подходящее место
персональная папка TEMP\SessionID\
  3. Сетевой каталог NETDIR - выделить отдельную папку на сети
исключительно только для этой цели и единную для всех приложений BDE
  4. LOCAL SHARE - TRUE, можно попробовать и FALSE, если это не будет
приводить к порче индексов.

Anatoly Podgoretsky <anatoly@podgoretsky.com>

------------------------------------------------------------
I-50:  Информация о программе
------------------------------------------------------------
FAQ создан с помощью FAQ Maker ver. 1.5
от Анатолия Подгорецкого

Доступен на http://www.podgoretsky.com или http://nps.vnet.ee

Альтернативный источник http://faq.delphiplus.org - более быстрый
хостинг, FAQ центр, хранятся всевозможные FAQ, не только из иерархии
FIDO7.RU.DELPHI.*

Секция 2 из 2 - Предыдущая - Следующая

Вернуться в раздел "Языки Pascal/Delphi" - Обсудить эту статью на Форуме
Главная - Поиск по сайту - О проекте - Форум - Обратная связь

© faqs.org.ru