Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Работа с базай данных


Автор: CreatoR 13.4.2004, 19:28
Как можно запустить приложение работающие с базой даных на другой машине. notify.gif

Автор: x77 13.4.2004, 19:41
взять и запустить. или имеется в виду, как такое приложение написать?

Автор: Pakshin A. S. 13.4.2004, 21:34
Для начала:
Что за база? Через что ведётся доступ?

Автор: Akella 15.4.2004, 13:34
Такими воросами только форум засорять. Задавай, пожайлуйста, более конкретный вопрос.
А вообще пользуюся инсталяторами(Wise, ISExpress - ищи в установках Delphi). Если ты работаешь с BDE, то инсталятором можно создать только дистрибутив BDE, я так и делаю, если InterBase, то инсталятор не поможет, т.к. InterBase сама устанавливается, т.е. это отдельный продукт.

Автор: Pakshin A. S. 15.4.2004, 21:20
Отседа мораль: если Access, то используй ADO; оно на всех компах от NT4(по-моему) и Win98 есть. Правда есть проблемка: иногда не хочет работать без установленной Delphi hmmm.gif (сам с этой проблемой столкнулся)...

Автор: Akella 16.4.2004, 09:44
Лично я ADO не советую, т.к. DBE работает на несколько порядков быстрее. Vit тестировал на скорость - результаты поразительные.
Хотя чем пользоваться - это выбор лично каждого.

Автор: Guest 17.4.2004, 18:19
База даных BDE paradox7 в качества доступа использую Table, а при запуске приложения на другой машине выскакивает ошибка о регистрации базы. Надо регистрировать через BDE Administrator , как этого можно избежать. Поподробней, пожалуйста.

Автор: Rambo 17.4.2004, 18:35
Нужно инсталировать саму BDE, она поставляется вместе с Дельфи. Есть InstalExpress, который позволяет создать дистрибутив программы и корректно инсталировать BDE

Автор: Pakshin A. S. 17.4.2004, 20:09
+ надо Alias запихнуть. Можно ручками (где-то исходник был), а если исталятор поддерживает функцию добавления нового алиаса, то его использовать.
Добавлено @ 20:10
dsergey Но енту штуку надо с собой таскать...

Автор: Akella 19.4.2004, 08:56
Ничего страшного, что енту штуку надо с собой таскать. Иной раз много чего надо с собой таскать. А лишние 5-10 метров это не проблема с нынешними технологиями, я имею ввиду CD-RW.

Автор: Strori 22.4.2004, 03:46
Так при использовании InstalExpress размер приложения вырастает на несколько мегов. Неужели нельзя по другому алиас прописать?

Автор: Akella 22.4.2004, 07:50
алиас прописывается только в BDE (хотя алиас прописывать в BDE не обязательно, я не люблю работать с алиасами), в противном случае используй другие движки БД.

Автор: Strori 23.4.2004, 07:30
Ну в общем у меня та же проблема, о которой говорил автор этого топика. Единственно, я постараюсь конкретизировать вопрос.

Есть база Paradox7. Дла того, что бы программа работы с базой запускалась необходимо прописать псевдоним для доступа к файлу таблицы. Во всех книгах по дельфи, с которыми я встречался, это предлагается делать через BDE Administrator. Для этого надо запустить BDE Administrator и вручную прописать псевдоним. Тоже самое можно сделать и программно, путем создания динамического псевдонима, повесив на Form.Activate примерно следующий код:

Цитата
procedure TForm1.FormActivate(Sender: TObject);
begin
  with Session do
  begin
    ConfigMode := cmSession;
    try     
      AddStandardAlias('псевдоним', ExtractFilePath(ParamStr(0))+'data\','PARADOX');
    finally
      ConfigMode := cmAll;
    end;
end;
end;


Вопрос: будет ли работать такая программа на компе, который вообще не знает, что такое дельфи? И если нет, то что конкретно надо сделать, чтобы она заработала?

Автор: Orakul 23.4.2004, 07:44
Delphi здесь не при чем. Если у тебя установлена BDE, и как написал выше, создаешь алиас, то будет работать.

Автор: Akella 23.4.2004, 08:08
Чтобы добавить алиас програмно, нужно использовать компонент TSession. Там есть и проверка наличия алиаса и добавление нового.

Автор: MacTep 23.4.2004, 09:44
Парни, у меня тоже проблема с BDE. Я так понял, что без установки BDE на тот комп, на котором надо будет работать только что написанной программе, ничего не получится! Так что дерзайте!!! Можно ведь создать дистрибутив BDE. Вот только вопрос как? Глупый вопрос, но я еще с этим не работал и не знаю.

Автор: Strori 23.4.2004, 12:07
Вот собссно я это и имел ввиду. smile.gif BDE идет в комплекте с дельфи. Значит без него запустить прогу на другом компе не получится?

Автор: Akella 23.4.2004, 14:38
Открываешь IS
Создаешь новый проект
Щелкаешь по "Specify InstallSheild Objects for Delphi 5 - General Opttions"
Выбираеши нужные компоненты. компилируешь проект
Пользуйся.

Если установщик - Wise, то ищи там "Merge modules" (модули для миграции).

Автор: Strori 24.4.2004, 13:19
Счас распотрошил каталог BDE, опытным путем определил от каких dll зависит работа моей проги (оказались bantam.dll, idapi32.dll, idpdx32.dll и idr20009.dll), скопировал их в каталог с моей прогой, прописал в реестре, в ключе HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine параметр DLLPATH="новый путь к файлам BDE", затем стер BDE и все что с ней было связано и.... О ЧУДО!!!! программа заработала!!!!! withstupid.gif adv/168.gif

Автор: Medved 26.4.2004, 02:07
Как говорил Козьма Прутков - "Зри в FAQ".

Код

Session.AddAlias(AliasName, AliasDriver, Params);
Session.SaveConfigFile;

Автор Vit
Взято с Vingrad.ru http://forum.vingrad.ru


--------------------------------------------------------------------------------


uses
 DBIProcs, DBITypes;

procedure AddBDEAlias(sAliasName, sAliasPath, sDBDriver: string);
var
 h: hDBISes;
begin
 DBIInit(nil);
 DBIStartSession('dummy', h, '');
 DBIAddAlias(nil, PChar(sAliasName), PChar(sDBDriver),
   PChar('PATH:' + sAliasPath), True);
 DBICloseSession(h);
 DBIExit;
end;

{ Sample call to create an alias called WORK_DATA that }
{ points to the C:\WORK\DATA directory and uses the    }
{ DBASE driver as the default database driver:         }

AddBDEAlias('WORK_DATA', 'C:\WORK\DATA', 'DBASE');

Взято с Delphi Knowledge Base
http://www.baltsoft.com/



Код

Если база данных находится в той же директории, что и экзешник, то в качестве имени базы можно использовать .\ в поле DatabaseName в TTable

Взято с Исходников.ru http://www.sources.ru

Примечания Vit:
1) Если путь другой - то в поле DatabaseName можно прописать путь, например: c:\Program Files\...
2) Прописывание путивместо alias не исключает необходимости использования BDE


и т.д.
Добавлено @ 02:08
И еще....

Код

program InstallPrfSt;

{
Программа иллюстрирует, как установить BDE с поддержкой PARADOX 7.0
на "чистой машине" и создать алиас.
Пример использования в качестве простейшего инсталлятора для программы
C:\MyDir\MyProg.exe
1.Создайте каталог C:\MyDir\BDE и скопируйте в него след. файлы:
CHARSET.BLL
OTHER.BLL
IDAPI32.CFG
BLW32.DLL
IDAPI32.DLL
IDBAT32.DLL
IDPDX32.DLL
IDR20009.DLL
IDSQL32.DLL
BDEADMIN.EXE - по вкусу, т.к. необходимым не является.
2.Измените значение константы AliasName на имя необходимого вам алиаса.
3.Откомпиллируйте и запустите эту программу из каталога C:\MyDir.
ВHИМАHИЕ!!! Если на машине уже установлено BDE, то перед экспериментами
сохраните (на всякий случай) след. ключи из реестра:
[HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine] и
[HKEY_LOCAL_MACHINE\SOFTWARE\Borland\BLW32].
}

{$APPTYPE CONSOLE}
uses
 Windows, BDE, Registry;

const
 AliasName: string = 'PrefStat';

var
 R: DBIResult;
 Path: string;

procedure WriteString(S1:string);
begin
 S1 := S1 + #0;
 AnsiToOem(@S1[1], @S1[1]);
 writeln(S1);
end;

function GetExePath(S1:string):string;
var
 I, K :Integer;
 S: string;
begin
 K := 1;
 S := '';
 for I := Length(S1) downto 1 do
 begin
   if S1[I] = '\' then
   begin
     K := I;
     Break;
   end;
 end;

 for I := 1 to K - 1 do
   S := S + S1[I];

 Result:=S;
end;

procedure InstallBde;
const
 Bor: string = 'SOFTWARE\Borland';
var
 a: TRegistry;
 BPath: string;
begin
 BPath:=PATH + '\BDE';
 a := TRegistry.Create;
 with a do
 begin
   RootKey := HKEY_LOCAL_MACHINE;
   OpenKey(Bor + '\Database Engine', True);
   WriteString('CONFIGFILE01', BPath+'\IDAPI32.CFG');
   WriteString('DLLPATH', BPath);
   WriteString('RESOURCE', '0009');
   WriteString('SaveConfig', 'WIN32');
   WriteString('UseCount', '2');
   CloseKey;
   OpenKey(Bor+'\BLW32',True);
   WriteString('BLAPIPATH', BPath);
   WriteString('LOCALE_LIB3', BPath+'\OTHER.BLL');
   WriteString('LOCALE_LIB4', BPath+'\CHARSET.BLL');
   CloseKey;
   OpenKey(Bor+'\Database Engine\Settings\SYSTEM\INIT',True);
   WriteString('AUTO ODBC', 'FALSE');
   WriteString('DATA REPOSITORY', '');
   WriteString('DEFAULT DRIVER', 'PARADOX');
   WriteString('LANGDRIVER', 'ancyrr');
   WriteString('LOCAL SHARE', 'FALSE');
   WriteString('LOW MEMORY USAGE LIMIT', '32');
   WriteString('MAXBUFSIZE', '2048');
   WriteString('MAXFILEHANDLES', '48');
   WriteString('MEMSIZE', '16');
   WriteString('MINBUFSIZE', '128');
   WriteString('SHAREDMEMLOCATION', '');
   WriteString('SHAREDMEMSIZE', '2048');
   WriteString('SQLQRYMODE', '');
   WriteString('SYSFLAGS', '0');
   WriteString('VERSION', '1.0');
   CloseKey;
   OpenKey(Bor+'\Database Engine\Settings\SYSTEM\FORMATS\DATE',True);
   WriteString('FOURDIGITYEAR', 'TRUE');
   WriteString('LEADINGZEROD', 'FALSE');
   WriteString('LEADINGZEROM', 'FALSE');
   WriteString('MODE', '1');
   WriteString('SEPARATOR', '.');
   WriteString('YEARBIASED', 'TRUE');
   CloseKey;
   OpenKey(Bor+'\Database Engine\Settings\SYSTEM\FORMATS\NUMBER',True);
   WriteString('DECIMALDIGITS', '2');
   WriteString('DECIMALSEPARATOR', ',');
   WriteString('LEADINGZERON', 'TRUE');
   WriteString('THOUSANDSEPARATOR', ' ');
   CloseKey;
   OpenKey(Bor+'\Database Engine\Settings\SYSTEM\FORMATS\TIME',True);
   WriteString('AMSTRING', 'AM');
   WriteString('MILSECONDS', 'FALSE');
   WriteString('PMSTRING', 'PM');
   WriteString('SECONDS', 'TRUE');
   WriteString('TWELVEHOUR', 'TRUE');
   CloseKey;
   OpenKey(Bor+'\Database Engine\Settings\REPOSITORIES',True);
   CloseKey;
   OpenKey(Bor+'\Database Engine\Settings\DRIVERS\PARADOX\INIT',True);
   WriteString('LANGDRIVER', 'ancyrr');
   WriteString('TYPE', 'FILE');
   WriteString('VERSION', '1.0');
   CloseKey;
   OpenKey(Bor+'\Database Engine\Settings\DRIVERS\PARADOX\TABLE
   CREATE',True);
   WriteString('BLOCK SIZE', '4096');
   WriteString('FILL FACTOR', '95');
   WriteString('LEVEL', '7');
   WriteString('STRICTINTEGRTY', 'TRUE');
   CloseKey;
 end;
 a.Free;
end;

begin
 Path:=GetExePath(ParamStr(0));
 R:=dbiInit(nil);
 if R<>DBIERR_NONE then
 begin
   WriteString('Инициализация BDE ...');
   InstallBDE;
 end;
 R:=dbiInit(nil);
 if R=DBIERR_NONE then
 begin
   WriteString('Инициализация BDE прошла успешно');
   DbiDeleteAlias(nil, PChar(AliasName));
   R:=DbiAddAlias(nil, PChar(AliasName), szPARADOX,
   PChar('PATH:'+Path+'\DB'), True);
   if R=DBIERR_NONE then
     WriteString('Псевдоним "'+AliasName+'" создан')
   else
     WriteString('Ошибка создания псевдонима "'+AliasName+'"');
   R:=DbiCfgSave(nil, nil, Bool(-1));
   if R=DBIERR_NONE then
     WriteString('Файл конфигурации сохранён')
   else
     WriteString('Ошибка сохранения файла конфигурации');
   DbiExit;
 end
 else
   WriteString('Ошибка инициализации BDE');
end.



Код

Установка BDE

Problem/Question/Abstract:

What are the essential files to ship with an application that uses the BDE?

Answer:

Delphi allows you to generate a nice tight executable file (.EXE), but if you have created a database application you must include the files that make up the Borland Database Engine as well. The table below shows the files that are mandatory when delivering a database application with Delphi.
File Name   Description
IDAPI01.DLL - BDE API DLL
IDBAT01.DLL - BDE Batch Utilities DLL
IDQRY01.DLL - BDE Query DLL
IDASCI01.DLL - BDE ASCII Driver DLL
IDPDX01.DLL - BDE Paradox Driver DLL
IDDBAS01.DLL - BDE dBASE Driver DLL
IDR10009.DLL - BDE Resources DLL
ILD01.DLL - Language Driver DLL
IDODBC01.DLL - BDE ODBC Socket DLL
ODBC.New - Microsoft ODBC Driver Manager DLL V2.0
ODBCINST.NEW - Microsoft ODBC Driver Installation DLL V2.0
TUTILITY.DLL - BDE Table Repair Utility DLL
BDECFG.EXE - BDE Configuration Utility DLL
BDECFG.HLP - BDE Configuration Utility Help
IDAPI.CFG -    BDE Configuation File (settings)

To assist the user, Delphi ships with an install program for exporting the appropriate files that you want deliver to your clients. Also, installation programs such as InnoSetup and InstallShield can automatically include the relevant files in their setup programs.

InnoSetup is my program installation program of choice, and it is FREE! For more information or to download a copy visit Jordan Russhttp:// www.jrsoftware.orgell's site at

Finally a tip on using the setup CAB file that ships with the BDE to install the relevant files can be found in DKB, article title "Installing BDE from BDEINST.CAB"

Взято с Delphi Knohttp://www.baltsoft.com/wledge Base

Автор: Pathfider 14.7.2004, 17:44
CreatoR Если есть доступ к той машине то напиши просто Batch или если хочешь в извращенной форме то в Delphi, а потом скопируй на машину по сетке и запусти.

Автор: Illusion Dolphin 14.7.2004, 18:18
Pegas: этот способ инсталяции DBE я так и не осилил... Предлагаю своё:

Вот как я делаю в своей программе.
а) определяем, есть ли BDE, и если нет, то ставим его
Код


type
 tDllRegisterServer = function : HResult; stdcall;

var h : integer;
 regserv: tDllRegisterServer;

function BDEInstalled: Boolean;
begin
Result := (dbiInit(nil) = 0)
end;

......

 if not BDEInstalled then
 begin
  if fileexists(ProgramDir+'\BdeInst.dll') then
  begin
   MessageDlg('ОШИБКА: Borland Database Engine (IDAPI) не найдена' + #13+
   'Будет выполнена её установка...',
   mtError, [mbOK], 0);
   h:=loadlibrary(Pchar(ProgramDir+'\BdeInst.dll'));
   if h=0 then halt;
   @regserv := GetProcAddress ( h, 'DllRegisterServer' );
   regserv;
   freelibrary(h);
  end;
  if not BDEInstalled then
  begin
   MessageDlg('ОШИБКА: Borland Database Engine (IDAPI) не найдена' + #13+
   'перед следующей попыткой ее необходимо установить....',
   mtError, [mbOK], 0);
   halt;
  end;
 end;

ProgramDir - папка с программой (там лежит файл BdeInst.dll, который находится в cab-архиве (bdeinst.cab) в папке, куда делфи установила BDE.
б) Сделать, как советовал Strori.
P.S. Это всё можно сделать в самом простом случае в главном файле проекта.

Автор: Гость_Артем 13.10.2005, 13:08
Используйте инсталятор Inno setup он бесплатный, и установка BDE на его сайте описана... Сам пробовал работает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)