Как сделать дистриб программы работы с БД?
TTable и TQuery - эти компоненты работают через BDE вроде, что заставит тебя везде еще и BDE ставить. Попробуй переписать прогу на ADO или DAO компоненты.
Вот код создания алиасов через DBE (моё, архивное)
//Идентификатор базы, используещейся Dialer
hDb: hDBIDb;
...
//Инициализация BDE и создание временной базы DialerDB.
procedure StartBDE;
begin
DbiInit(nil); //Инициализируем BDE
//Добавляем временный алиас
DbiAddAlias(nil,'DialerDB',szDBASE,PChar('path: '+TmpPathTrue);
//Открываем базу по имени
DbiOpenDataBase('DialerDB',szDBASE,dbiREADWRITE,dbiOPENSHARED,nil,0,nil,nil, hDB);
DbiSetDirectory(hDB,PChar(TmpPath;
end;
//Уничтожение временной базы DialerDB и прекращение работы с BDE.
procedure StopBDE;
begin
DbiCloseDataBase(hDB); //Закрываем базу
DbiDeleteAlias(nil,'DialerDB'); //Удаляем Алиас
DBIExit; //Прекращаем работу с BDE
end;
Только при употреблении в коде DbiInit... и попытке скомпилировать вылазит сообщение "Unknow identifier". М.б. что-нибудь надо в uses... дописать?
uses BDE;
Во-вторых, не знаю, как с акцессовскими таблицами, но если используются Paradox-овские таблицы, точно можно не ставить весь BDE, а только тащить за собой несколько файликов... Про последнее написано в Kuliba.chm (устаревший, но всё-таки довольно хороший справочник советов по Delphi)...
Вместо Кулибы, лучше www.drkb.ru - крупнейший упорядоченный архив статей по Delphi.
Да и вообще, BDE это уже как FoxPro. Лучше про него вовсе забыть и использовать нечто более современное.
Аффтор топика выпей яда или перестань BDE использовать. Ну плииииззз!
BDE насколько я помню все равно алиас будет создавать, когда по имени щемится.гм... Ни разу не наблюдал такого самовольства.
Указанный код это ужастное использование в Delphi, потому как это BDE API =)
Если бы ты коннектился к серваку с БД, то да. А тут всё необходимое компилятор внутрь экзэшника запихнёт.
Опиши подключение к базе динамически:
UserConnection: TADOConnection;
....
....
UserConnection.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source=';
UserConnection.ConnectionString:=UserConnection.ConnectionString+UserDBPath+';';
UserConnection.ConnectionString:=UserConnection.ConnectionString+'Mode=ReadWrite;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="*****";';
UserConnection.ConnectionString:=UserConnection.ConnectionString+'Jet OLEDB:Engine Type=4;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;';
UserConnection.ConnectionString:=UserConnection.ConnectionString+'Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;';
UserConnection.ConnectionString:=UserConnection.ConnectionString+'Jet OLEDB:Don''t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';
....
try
UserConnection.Open;
except
MessageDlg('Файл '+UserDBPath+' отсутствует или поврежден!', mtError, [mbOk],0);
exit;
end;
И забудь про создание псевдонимов.
Вот.
Это ниче, что у него BDE компоненты использованы, а код у тебя для ADO?
Я так понимаю у него вообще статика, там делов на 5 минут, если всё прямо написано.
# BLW32.DLL
# IDAPI32.DLL
# IDBAT32.DLL
# IDPDX32.DLL
# IDR20009.DLL
# USA.BLL
# CHARSET.BLL
* Раздел HKEY_LOCAL_MACHINE\Software\Borland\Database engine — параметр DLLPATH должен содержать путь к DLL-файлам BDE;
* Раздел HKEY_LOCAL_MACHINE\Software\Borland\BLW32 — параметр BLAPIPATH должен содержать путь к BLL-файлам BDE.
BDE тогда будет работать.
псевдоним можно динамически создавать.
* Раздел HKEY_LOCAL_MACHINE\Software\Borland\Database engine — параметр DLLPATH должен содержать путь к DLL-файлам BDE; * Раздел HKEY_LOCAL_MACHINE\Software\Borland\BLW32 — параметр BLAPIPATH должен содержать путь к BLL-файлам BDE.у меня, кажись, без этого работало, во всяком случае, инсталлер не прописывал ничего для бде.
Т.е. ты создавал дистрибутив с помощью програмы-инсталятора (типа Install Shield)? Если это так, то напиши, плиз, название проги, которой пользовался и настройки, которые ты вписал.
на шилд даже лучше не смотри. =)
Советую Inno Setup+1.
Единствеенный минус: ассоциации для расширений файлов приходится ручками прописывать, т.е. нет специализированного средства...
А так - очень удобное и не слишком громоздкое средство
Root: HKCR; Subkey: ".моё"; ValueType: string; ValueName: ""; ValueData: "MyProgramDef"; Flags: uninsdeletevalue;
Root: HKCR; Subkey: "MyProgramDef"; ValueType: string; ValueName: ""; ValueData: "Мой Документ"; Flags: uninsdeletekey;
Root: HKCR; Subkey: "MyProgramDef\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\Прога.exe,0"; Flags: uninsdeletekey
Root: HKCR; Subkey: "MyProgramDef\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\Прога.exe"" ""%1"""; Flags: uninsdeletekey
и не слишком громоздкое средствоГромоздкость зависит от сложности проекта =)
Вместо 4х строчек для довольно-таки стандартного действия для инсталлятора (а по-хорошему, ещё надо проверять наличие уже заданной ассоциации и, возможно, спрашивать у юзера: мб. он не хочет переопределять) я хочу писать одну строчку. Ну, конечно, можно это через скрипты сделать, но, опять-же, многовато делать придётся.
поставить просто в конце check: какая-нить_функция.
поставить просто в конце check: какая-нить_функция.Для каждого из ключей/значений? Мне кажется, что этого многовато. В конце концов, в секции файлов есть такой параметр как regserver, который регистрирует дллку. А ведь это действие тоже сводится к изменению реестра.
Повторюсь, имхо, это единственный недостаток Inno Setup.
Оставить комментарий
Ivanopulo
Ситуация такая: На Delphi на писал программу работы с базой данных. База локальная (не удаленная формата MS Access, состоит из одной таблицы. Физически - один файл. Так вот, в программе для работы с БД используется Microsoft Access Driver. Запросы реализованы на SQL. Для работы использованы компонеты TTable и TQuery (SQL запросы). Программа работает на компе, где была написана. Если просто скопировать прогу и БД на другой комп, то выдается ошибка (системная, если нужно, могу привести ее содержание). Если на тот комп поставить Delphi (и все что входит в пакет дистриба то при запуске выдает, что "неизвестный псевдоним бла-бла-бла)"(Unknow Alias бла-бла-бла что исправляется настройками через Delphi.Вопрос: как сделать так, чтобы пользователю, который у себя захочет поставить эту прогу, не пришлось самостоятельно ставить Delphi, и производить настройки?
Несколько раз пробовал создать дистриб через Install Shield Express. Дистриб создался, но после установки оного - не работает. Может неправильно создавал, так дохрена настроек, может версия не та. Кто знает/работал с Install Shield ткните что надо там настроить.
Еще, как вариант, пусть пользователю все же придется ставить Delphi (или отдельно BDE то как сделать так, чтобы программа внесла настройки сама?
В общем Help! времени мало. Посоветуйте, плз, что делать.