13.05.2008, 10:13
общий
это ответ
Здравствуйте, Паршина Людмила Леонидовна!
Проблема в том, как вы создаёте подключение в ADOConnection:
1. В инсперторе объктов
ADOConnection.Connected = false
ADOConnection.ConnectionString = ‘‘
хотя во время проектирования, для удобства, эти свойства могут быть установлены, но когда компилируете релиз, сбросьте эти свойства, как указано выше.
2. См. приложение.
Т.о. если программа не найдёт файл БД Access в папке с программой, то сначала в OpenDialog будет предложено найти этот *.mdb-файл, а если найти не удалось, то программа просто не запустится.
Приложение:
var DM: TDM; // data module, создаётся раньше главной формы. Порядок создания форм задаётся в Project->Options->Forms->Auto-create forms: 1-DM, 2-frmMainconst SDBName = ‘Logging.mdb‘; SDBPass = ‘123‘;resourcestring SNoDatabaseSelected = ‘Не выбрана база данных‘; SInvalidAccessDatabase = ‘Неверная база данных‘;function TDM.CheckIfAccessDB(ADBPathName: string): boolean;var UnTypedFile: file of Byte; Buffer: array[0..19] of Byte; NumRecsRead: Integer; I: Integer; MyString: string;begin AssignFile(UnTypedFile, ADBPathName); try Reset(UnTypedFile); BlockRead(UnTypedFile, Buffer, High(Buffer), NumRecsRead); finally CloseFile(UnTypedFile); end; for I := 1 to High(Buffer) - 1 do MyString := MyString + Trim(Chr(Ord(Buffer[I]))); Result := AnsiSameText(MyString, ‘StandardJetDB‘); if not Result then MessageDlg(SInvalidAccessDatabase, mtError, [mbOK], 0);end;procedure TDM.DataModuleCreate(Sender: TObject);begin with TfrmSplash.Create(nil) do // форма сплеш-скрин, где написано что-то типа "Открытие базы данных... Пожалуйста ждите..." try Show; Application.ProcessMessages; // дадим форме перерисоваться ValidateAccessDB; finally Close; Free; end;end;procedure TDM.ValidateAccessDB;var DBPath: string;begin// ADOConnection.Close; if FileExists(ExtractFileDir(Application.ExeName) + ‘\‘ + SDBName) then DBPath := ExtractFileDir(Application.ExeName) + ‘\‘ + SDBName else if DM.OpenDialog1.Execute then DBPath := DM.OpenDialog1.FileName; if (Trim(DBPath) <> ‘‘) and CheckIfAccessDB(DBPath) then begin ADOConnection.Close; // ADO Connection String to the MS-ACCESS DB ADOConnection.ConnectionString := Format(‘Provider=Microsoft.Jet.OLEDB.4.0;‘ + ‘Data Source=%s;‘ + ‘Persist Security Info=False;‘ + ‘Jet OLEDB:Database Password=%s‘, [DBPath, SDBPass]);// ADOConnection.GetTableNames(frmMain.ListBox1.Items, False); ADOConnection.Open; // открытие созданного подключения// открытие таблиц tblTools.Open; tblTelemetryType.Open; tblToolsType.Open; tblToolMngrCmnds.Open; tblPowerSource.Open; tblCommutation.Open; tblElectrCircuit.Open; tblChannels.Open; tblChanMngrCmnds.Open; tblUnits.Open; tblMetrology.Open; tblPhysUnits.Open; tblChanType.Open; end else Application.Terminate;end;