|
Вопрос # 3 387/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Поставлена передо мной задача по созданию небольшой базы данных на компьютере коллеги по работе. Загвоздка в чем: писать я ее буду дома, а работать она должна у него. Перерыл все имеющиеся талмуды дома, толком никакой информации нет, кроме как намеков на некие инсталяционные пакеты и т.д.
Вот несколько вопросов, от которых напрямую зависит структура программы:
1. Как перенести программу на другой компьютер, если все ссылки на файлы внутри программы собьются?
2. Какие именно файлы нужно переносить? Только .ехе и файлы таблиц или что-то еще?
3. Как исправлять ошибки и обновлять программный код? На ум приходит только использование dll-библиотек.
Если данный вопрос слишком глобален, может подскажете ссылку на хорошую статью в этом напрвлении? Спасибо.
 |
Вопрос задал: Waserd (статус: Посетитель)
Вопрос отправлен: 10 ноября 2009, 19:02
Состояние вопроса: открыт, ответов: 3.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Waserd!
Если использовать BDE, то да, проблем для начинающего может быть много. Но достаточно перейти на ADO+Access, как проблемы решаются сами собой. Вам надо будет MS Access, что бы удобно редактировать базу, а вот человеку с той стороны нужна просто чистая XP или старше, всё остальное уже есть. Вторая проблема - это прописать относительные пути, а не прямые.
Итого человеку будет нужна собственно сама программа (exe файл) и mdb файл. ну и может быть какие то сопутствующие файлы (файлы конфигураций, ресурсы, мало чего там придумаете)
Для мелких проектов - удобно. И отличия от учебников минимальны - заменяем TTable на TADOTable и тому подобное.
Как второй вариант - можно использовать SQLite. Ему нужна только его dll и больше никаких настроек - Знакомство с SQLite.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 10 ноября 2009, 19:14
|
Ответ #2. Отвечает эксперт: МиГрАф
Здравствуйте, Waserd!
В Delphy я поступаю так. В директории ./data/ сохраняю все таблицы БД. Пути к таблицам прописываю ./data. В MainForm добавляю:
implementation
uses DataModule;
{$R *.DFM}
{&I 'usa.btl'}
{&I 'blw32.dll'}
{&I 'charset.cvb'}
{&I 'idapi32.dll'}
{&I 'idpdx32.dll'}
{&I 'idr20009.dll'}
{&I 'bantam.dll'}
В DataModule - описана структура и таблицы базы данных и все процедуры работы с ней (личные). Файлы подключаемых библиотек должны быть в директории загружаемого файла Main.exe. Все это (Main.exe, директорию Data и файлы подключаемых библиотек) копируем на другую машину и все работает. Проверено на Windows 95...Vista.
Если будут вопросы, рад помочь.
 |
Ответ отправил: МиГрАф (статус: 1-ый класс)
Время отправки: 10 ноября 2009, 22:10
|
Ответ #3. Отвечает эксперт: Fantom
Здравствуйте, Waserd!
ИСпользуй Smart Instal для установки программы на другой комп. Чтобы прописать свою базу можно использовать ini файлы - в смарте есть опция такая или через собственные ключи реестра. А можно проще (я обычно так и делаю)- код внизу. кстати есть статейка как создать свой инсталер на дельфи, т.е в твоей программе пишешь сразу и програму и инсталлер. Ноя что то её не понял тяжеловатая. но все равно выкладываю. :))
Приложение: Переключить в обычный режим-
- procedure TForm1.FormActivate(Sender: TObject);
- begin
- with Session do
- begin
- ConfigMode := cmSession;
- try
-
-
-
-
-
-
-
-
-
- ExtractFilePath(ParamStr(0))+'DATA',
- 'PARADOX');
-
- finally
- ConfigMode := cmAll;
- end;
- end;
- end;
-
-
-
-
- unit Main;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, ComCtrls, FileCtrl, ExtCtrls, DdeMan, LZEXPAND, ShellApi;
-
- type
- TFMain = class(TForm)
- EP: TEdit;
- PBar: TProgressBar;
- Label1: TLabel;
- Label2: TLabel;
- Image1: TImage;
- Label3: TLabel;
- Label5: TLabel;
- Label6: TLabel;
- CBR: TCheckBox;
- LEnd: TLabel;
- procedure BOkClick(Sender: TObject);
- procedure BExitClick(Sender: TObject);
- procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- procedure FormCreate(Sender: TObject);
- procedure EndCl(Sender: TObject);
-
- private
- { Private declarations }
- public
- { Public declarations }
- procedure Decomp;
- end;
-
- var
- FMain: TFMain;
-
-
-
- Command, Params, WorkDir : String;
- implementation
-
- {$R *.DFM}
-
- procedure TFMain.Decomp;
- var
- FIStruct, FOStruct : TOFStruct;
- HandleFOpen, HandleFWrite : Integer;
- success : LongInt;
- begin
- StringFOName:=ToK+StringFOName;
-
- HandleFOpen := LZOpenFile(@StringFIName[1], FIStruct, OF_READ or OF_PROMPT);
- if HandleFOpen < 0 then
-
- [mbOk], 0);
- // Open the Output File that is Uncompressed!
- HandleFWrite := LZOpenFile(@StringFOName[1], FOStruct, OF_CREATE);
- if HandleFWrite < 0 then
-
-
- success := LZCopy(HandleFOpen, HandleFWrite);
- if success < 0 then
-
-
- LZClose(HandleFOpen);
- LZClose(HandleFWrite);
-
- end;
-
- procedure TFMain.BOkClick(Sender: TObject);
- begin
-
- if DirectoryExists(Tok)=false then
- begin
- ForceDirectories(ToK);
- ForceDirectories(ToK+'Graphics');
- ForceDirectories(ToK+'Help');
- ForceDirectories(ToK+'Music');
- ForceDirectories(ToK+'Levels');
- end;
- EP.Hide;
- Label3.Hide;
- CBR.Hide;
- PBar.Show;
- StringFIName:='ws01.dat'+#0;StringFOName:='WinSoco.exe'+#0;Decomp;
- StringFIName:='ws02.dat'+#0;StringFOName:='Graphicsgraphic1.bmp'+#0;Decomp;
- StringFIName:='ws03.dat'+#0;StringFOName:='Graphicsgraphic2.bmp'+#0;Decomp;
- StringFIName:='ws04.dat'+#0;StringFOName:='Graphicsgraphic3.bmp'+#0;Decomp;
- StringFIName:='ws05.dat'+#0;StringFOName:='Helpwinsoco.hlp'+#0;Decomp;
- StringFIName:='ws06.dat'+#0;StringFOName:='Musicbox.wav'+#0;Decomp;
- StringFIName:='ws07.dat'+#0;StringFOName:='Musicdone.wav'+#0;Decomp;
- StringFIName:='ws08.dat'+#0;StringFOName:='Musicrespect.mid'+#0;Decomp;
- StringFIName:='ws09.dat'+#0;StringFOName:='Musicsong1.mid'+#0;Decomp;
- StringFIName:='ws23.dat'+#0;StringFOName:='Musicsong2.mid'+#0;Decomp;
- StringFIName:='ws24.dat'+#0;StringFOName:='Musicstep.wav'+#0;Decomp;
- StringFIName:='ws10.dat'+#0;StringFOName:='LevelsSt10.lev'+#0;Decomp;
- StringFIName:='ws11.dat'+#0;StringFOName:='LevelsSt1.lev'+#0;Decomp;
- StringFIName:='ws12.dat'+#0;StringFOName:='LevelsSt2.lev'+#0;Decomp;
- StringFIName:='ws13.dat'+#0;StringFOName:='LevelsSt3.lev'+#0;Decomp;
- StringFIName:='ws14.dat'+#0;StringFOName:='LevelsSt4.lev'+#0;Decomp;
- StringFIName:='ws15.dat'+#0;StringFOName:='LevelsSt5.lev'+#0;Decomp;
- StringFIName:='ws16.dat'+#0;StringFOName:='LevelsSt6.lev'+#0;Decomp;
- StringFIName:='ws17.dat'+#0;StringFOName:='LevelsSt7.lev'+#0;Decomp;
- StringFIName:='ws18.dat'+#0;StringFOName:='LevelsSt8.lev'+#0;Decomp;
- StringFIName:='ws19.dat'+#0;StringFOName:='LevelsSt9.lev'+#0;Decomp;
- StringFIName:='ws20.dat'+#0;StringFOName:='LevelsSt11.lev'+#0;Decomp;
- StringFIName:='ws21.dat'+#0;StringFOName:='LevelsSt12.lev'+#0;Decomp;
- StringFIName:='ws22.dat'+#0;StringFOName:='LevelsSt13.lev'+#0;Decomp;
- StringFIName:='ws25.dat'+#0;StringFOName:='ReadMe.txt'+#0;Decomp;
- //-------------------------
- Command:= 'notepad.exe';
- WorkDir:= 'C:windows';
- Params:=ToK+'ReadMe.txt';
- ShellExecute( Handle,'open',@Command[1],@Params[1],@WorkDir[1],SW_SHOWNORMAL);
- CBR.Visible:=true;
- LEnd.Visible:=true;
-
- Label1.Visible:=false;
- Label2.Visible:=false;
- Label3.Visible:=false;
- EP.Visible:=false;
- PBar.Visible:=false;
-
- end;
-
- procedure TFMain.BExitClick(Sender: TObject);
- begin
- Close;
- end;
-
- procedure TFMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- begin
- if SEnd=false then
- begin;
-
-
- CanClose:=true
- else CanClose:=false;
- end;
- end;
-
- procedure TFMain.FormCreate(Sender: TObject);
- begin
- SEnd:=false;
- end;
-
- procedure TFMain.EndCl(Sender: TObject);
- begin
- if CBR.Checked=true then
- begin
- chdir(ToK);
- command:= 'winsoco.exe';
- WorkDir:=ToK;
- Params:='';
- ShellExecute( Handle,'open',@Command[1],@Params[1],@WorkDir[1],SW_SHOWNORMAL);
- end;
-
- SEnd:=true;
- Close;
- end;
-
- end.
-
-
 |
Ответ отправил: Fantom (статус: 2-ой класс)
Время отправки: 12 ноября 2009, 13:23
|
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 10 ноября 2009, 22:49; участников в обсуждении: 2.
|
VJe@n (статус: 1-ый класс), 10 ноября 2009, 22:43 [#1]:
1. Солидарен с Вадим К, в вашем случае нужно использовать легко переносимые базы: SQLite, FireBird, и т.п. Файлов в таком случае получается минимум: ексешник программы, dll-ка базы (sqlite.dll), и сама база (если нужны первоначальные данные). Использование BDE, Access, MySQL, повлечет за собой трудности в виде различий версий пакетов, и их установки на компьютере коллеги.
2. Что качается переносимости, достаточно запаковать нужные файлы в SFX-архив (ZIP, RAR, 7Z) и передать программу одним архивом.
3. Это уже по желанию, но не обязательно. Можно, конечно, разместить формы/отчеты по dll, но это усложнит поиск ошибок в коде и откладку.
У меня сегодня радость!
Я сегодня сделал гадость! :)
|
|
Вадим К (статус: Академик), 10 ноября 2009, 22:47 [#2]:
to VJe@n
по словом "переносимость" обычно понимают немного другое.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
VJe@n (статус: 1-ый класс), 10 ноября 2009, 22:49 [#3]:
к словам можно не придираться вроде и так понятно про что речь
У меня сегодня радость!
Я сегодня сделал гадость! :)
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|