На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Обязательно указание:
1) типа базы данных (Paradox/Oracle/Interbase и т.п.)
2) способа доступа к базе данных (ODBC/ADO/DAO/BDE и т.п.)
Например: Paradox/BDE, MS Access/ADO

Наиболее часто задаваемые вопросы:
Базы даных для начинающих. Первые шаги. Понятие о BDE.
Переход на клиент-сервер и начала ADO
Приёмы работы с BLOB (OLE/Memo) полями
Запросы и параметры или как избавиться от многих проблем. Проблемы с датами в запросах.
Нужели мне нужно устанавливать BDE? (или почему не работает программа на другом компьютере)
Модераторы: Bas, Rouse_
  
> Перенос БД на другой компьютер
    Добрый день. Прошу помощи при работе с БД.
    1. Подключил к проекту БД таким образом: Меню Database->Explorer. Меню Object->ODBC Administrator. Добавить .mdb, указываю путь к БД Access, потом OK, OK.
    При запуске проекта появляется сообщение Database login, которое требует Имя и пароль. Ничего не ввожу, нажимаю ОК, дальше всё нормально.
    Что это за окно и как от него избавиться при запуске программы?

    2. Проект работает с БД только тогда, когда она лежит на C:\MyDataBase.db; Куда не засуну в другое место - выходит сообщение об ошибке. В чём проблема? И как от неё избавится?

    3. При переносе БД на другой компьютер - БД вообще не работает.
      Цитата Expected } @
      Меню Database->Explorer. Меню Object->ODBC Administrator. Добавить .mdb, указываю путь к БД Access, потом OK, OK
      Как-то очень сложно.

      Цитата Expected } @
      Что это за окно и как от него избавиться при запуске программы?

      Указать LoginPrompt = False

      Цитата Expected } @
      Куда не засуну в другое место - выходит сообщение об ошибке
      Совершенно верно. Программе надо указать где файл лежит. Сама она искать файлы не умеет. Обращается по пути и имени из п.1. В Вашем случае, наверное, надо смотреть куда настроено ODBC. Но повторю, Вы выбрали слишком витееватый способ.

      Цитата Expected } @
      И как от неё избавится?
      Или каждый раз менять руками настройки перед запуском илли использовать другой способ подключения. Например OLEDB и MicrosoftJet.

      Цитата Expected } @
      При переносе БД на другой компьютер - БД вообще не работает.
      Это естественно вытекает из предыдущего пункта.
        Цитата
        Как-то очень сложно.

        А как по другому подключить БД? Что бы не было всей этих проблем?

        Цитата
        LoginPrompt = False

        Это в обработчике событий како-го то компонента?
        Сообщение отредактировано: Expected } -
          Акцесс не надо подключать через ODBC лучший вариант через родного для него провайдера, через JET и тогда проблем не будет, очень легко изменить строку подключения на нужную.
            Подключил через JET проблем меньше стало. Но на другом компьютере всё равно нужно указывать путь. Как сделать так, что бы ADOconnection1 сам подключал БД, которая находится по адресу "Database\MyDatabase.db"? А сама папка Database находится в той же папке что и ехе-шник
              Цитата Expected } @
              Как сделать так, что бы ADOconnection1 сам подключал БД, которая находится по адресу
              Формировать стоку подключения до коннекта к БД
              Почитать про Aplication.ExeName, и ExtractFileDir
                в событии OnCreate твоего DataModule добавь примерно так
                создать ConnectionString где адрес файла бд будет указан вот так
                ExpandedWrap disabled
                  dbfile := ExtractFileDir(Application.ExeName) + 'Database\MyDatabase.db';

                и вообще при использовании файлов в своей программе путь к ним нужно задавать таким вот способом.
                  Expected } как вариант - создай ini-файл с параметрами подлючения. К примеру:
                  ExpandedWrap disabled
                    [ddt]
                    dbtype=local
                    charset=WIN1251
                    [dbloc]
                    dplpath=c:\ib\legenda
                    dblname=LEGDB.GDB
                    [dbnet]
                    dbnip=
                    dbnport=
                    dbnname=
                    [gwnd]
                    height=602
                    width=813
                    [settings]
                    dateformat=DD.MM.YYYY
                    timeformat=HH:NN:SS
                    dayfound=30


                  Добавлено
                  потом просто считывай при старте ini-шку и списывай из неё всё, что тебе нужно.
                  К примеру, я указал:
                  секция
                  [ddt]
                  dbtype=local ----- тип базы, локальная или сетевая
                  charset=WIN1251 ------- кодовая страница
                  секция
                  [dbloc] ---настройки для локальной базы
                  dplpath=c:\ib\legenda ------- каталог базы
                  dblname=LEGDB.GDB ---------имя базы
                  секция
                  [dbnet] -------если база сетвая
                  dbnip= --------ip сервера
                  dbnport= -------порт, на котором база открыта
                  dbnname= ------- sid базы
                  секция
                  [gwnd] -------параметры главного окна
                  height=602
                  width=813
                  /хотя здесь можно и иначе, но я так сделал/
                  секция
                  [settings] -------установки
                  dateformat=DD.MM.YYYY --------фомрат даты
                  timeformat=HH:NN:SS ---------формат времени
                  dayfound=30 --------период стартовой выборки
                  ЗЫ. IB & D7
                  Сообщение отредактировано: shadow_tls -
                    Цитата VahaC @
                    в событии OnCreate

                    В OnCreate не сработало, а вот в собтытии BeforeConnection ADOConnection1 получилось
                      Цитата Expected } @
                      В OnCreate не сработало, а вот в собтытии BeforeConnection ADOConnection1 получилось

                      Это потому что у тебя в design time ADOConnection1.Connected установлено в тру
                        Цитата Expected } @
                        Подключил через JET проблем меньше стало. Но на другом компьютере всё равно нужно указывать путь. Как сделать так, что бы ADOconnection1 сам подключал БД, которая находится по адресу "Database\MyDatabase.db"? А сама папка Database находится в той же папке что и ехе-шник

                        Подобным программам не место в Виндоус, они не живые, не надо пытаться писать в Program Files
                        Что мешает это делать в d:\Databases с должными правами.
                          Цитата Anatoly Podgoretsky @
                          они не живые

                          А можно обяснить что это значить?
                            Попадешься на машину с норамальными правами, а не администраторскпми для всех и сразу поймешь, что это значит.
                            Сообственно не надо даже администраторские права, на Виста и выше запись в эту папку запрещена, даже администратору, без подтверждения вручную.
                            Сообщение отредактировано: Anatoly Podgoretsky -
                              Извините за оффтоп.

                              Anatoly Podgoretsky
                              а если нету диска д тогда чего прикажите делать?
                              Создавать для каждой программы свою папку в корне диска С как то не логично, а в програм файлс нельзя.
                              Знач надо создать свою так сказать програм файлс и туда инсталить. Но вот как ентое дело обяснить конечному юзверю.
                              Или может хлопци из микрософта чего новое придумали?
                              Сообщение отредактировано: VahaC -
                                Vaha, вообще есть каталоги учетных записей пользователей, в которые запись разрешена.
                                По мне, так лучшее решение настраиваемые пути: по умолчанию указывают на каталог учетной записи пользователя, в инсталляторе возможность указать пути по выбору, а также упоминание о том, что если это будет отложено, то где в программе искать эту настройку.
                                  Вот незнаю, у меня лично, с папками типа 'C:\Users\..' или 'C:\Мои документы\..' с самого детства любовь не сложилась :(
                                  Не пойму зачем микрософт на мудрило со старим добрым програмфайлс

                                  Ещё раз извиняюсь за оффтоп.

                                  ПС
                                  Знач получается что теперь такая тривиальная задача как сохр настроек превращается в головную боль.
                                  Типа определяем версию окошек а потом смотря от версии их уже сейвим и с их загрузкой тоже самое.
                                  Эт я о том если инсталится в програм файлс.
                                  Сообщение отредактировано: VahaC -
                                    Цитата VahaC @
                                    Знач получается что теперь такая тривиальная задача как сохр настроек превращается в головную боль.
                                    Типа определяем версию окошек а потом смотря от версии их уже сейвим и с их загрузкой тоже самое.
                                    Эт я о том если инсталится в програм файлс.


                                    А самого начала правильно нужно было делать - как и рекомендовала фирма Microsoft - пользовательские данные и настройки хранить в каталогах пользователя, либо создавать для этого ещё один каталог специальный с соттветствующими правами доступа.
                                      базу надо хранить в папке с программой
                                        Цитата hkdkest2 @
                                        базу надо хранить в папке с программой

                                        :blink:
                                        Храни пожалуста. Кто ж мешает? Только потом не надо вопросов задавать как перенести на другой компьютер программу с БД.
                                        Сообщение отредактировано: Демо -
                                          Цитата hkdkest2 @
                                          базу надо хранить в папке с программой

                                          Тогда программа должна быть в соответствующем месте. Всего лишь.
                                            Цитата VahaC @
                                            Извините за оффтоп.

                                            Anatoly Podgoretsky
                                            а если нету диска д тогда чего прикажите делать?
                                            Создавать для каждой программы свою папку в корне диска С как то не логично, а в програм файлс нельзя.
                                            Знач надо создать свою так сказать програм файлс и туда инсталить. Но вот как ентое дело обяснить конечному юзверю.
                                            Или может хлопци из микрософта чего новое придумали?

                                            Ты не понимаешь, d: это не диск D, а любой диск. И не надо жестко его прописывать в программе, это должна быть считываемая настройка.
                                              Для переноса создал запись
                                              ExpandedWrap disabled
                                                procedure TRegstud.ADOConnection1BeforeConnect(Sender: TObject);
                                                begin
                                                ADOConnection1.ConnectionString:=ExtractFilepath(Application.ExeName)+'Base.mdb';
                                                end;


                                              Выдаёт ошибку "Ошибочный пароль".
                                              Как решить эту проблему?
                                                Цитата Expected } @
                                                ADOConnection1.ConnectionString:=ExtractFilepath(Application.ExeName)+'Base.mdb';

                                                Это что то дикое, построй строку подключения с помощью мастера.
                                                  В другом проекте работает так.
                                                  А в местере путь уже указан
                                                    Цитата Expected } @
                                                    В другом проекте работает так.
                                                    oxxtym странно. Чесс слово не должно
                                                    Цитата Expected } @
                                                    А в местере путь уже указан
                                                    Что такое местер мы не знаем. А вот посмотреть внимательно на строку сформированную с помощью мастера таки еще раз стоит. Там несколько больше букав должно быть чем только путь к файлу. Разумеешь?
                                                      Пожалуйста, скажите какая последовательность действий должна быть, что бы на другом компьютере не возникало неполадок связанных с базой данных, на которой установлен пароль"111"?
                                                        Имхо лучше создать папочку для данных своей программы в LOCALAPPDATA (но можно и в другом месте но тогда надо вручную задать соответствующие права доступа) и поместить туда БД

                                                        потом в настройках программы указать путь к бд.
                                                        При этом твоя прога каждый раз при запуске должна создавать строку подключения беря путь из файла настроек (или где ты там их будешь хранить). Да маленькое примечание если собираешься на всех компах держать БД только в LOCALAPPDATA то хранить путь к бд не надо, ведь ты и так знаешь где она :) .
                                                        вот примерно такой у тебя должна быть строка подключения:
                                                        Цитата
                                                        Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=ЗДЕСЬ_ПУТЬ_К_БД;Mode=Share Deny None;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;
                                                        Сообщение отредактировано: VahaC -
                                                          VahaC Опять Вы неправы. В первую очередб, надо перечесть букварь.
                                                          Во вторую надо определиться по какому пути БД будет всегда доступна всем тем компутерам, которым это надо.
                                                          Цитата Expected } @
                                                          Пожалуйста, скажите какая последовательность действий должна быть, что бы на другом компьютере не возникало неполадок связанных с базой данных, на которой установлен пароль"111"?

                                                          Тип биде? аксесс?
                                                          Со всех компов в сети есть доступ к директории где лежит бюиде? К всех в инишке он верно настроен? приложение верно читает инишку, перед коннектом к биде? Какого лешего пароль на аксесовскую базу ставили? он там не нужен.
                                                            БД Access, пользователь - администратор, в базе хранятся ответы на вопросы к тестам (это насчёт пароля). Бд находится в одной папке с ехе-шником
                                                            Сообщение отредактировано: Expected } -
                                                              Цитата Expected } @
                                                              Бд находится в одной папке с ехе-шником
                                                              и.... И не верю... Пояснять надо почему не верю?
                                                                Мне мы рабочий алгоритм манипуляций с компонентами и строкой подключения
                                                                  Цитата Paul_K @
                                                                  Со всех компов в сети есть доступ к директории где лежит бюиде? К всех в инишке он верно настроен?

                                                                  Я конечно извиняюсь но где здесь говорилось о сети?

                                                                  Цитата Expected } @
                                                                  При переносе БД на другой компьютер - БД вообще не работает.
                                                                    Цитата VahaC @
                                                                    При переносе БД на другой компьютер - БД вообще не работает.
                                                                    А какая в попу разница если в приложении вшит один путь а перенесли в другое?
                                                                      так я и писал что надо где то хранить путь или всегда использовать один и тот же(то есть хранить в папке на которую ссылается системная переменная LOCALAPPDATA)
                                                                      Сообщение отредактировано: VahaC -
                                                                        Не ты один. В первом же ответе ему дан намек, что пути надо определять. Но персонаж этого понимать не хочет...

                                                                        Добавлено
                                                                        Цитата VahaC @
                                                                        Вот незнаю, у меня лично, с папками типа 'C:\Users\..' или 'C:\Мои документы\..' с самого детства любовь не сложилась
                                                                        А вот это надо исправлять.... Причем за основу брать "$(BDSCOMMONDIR)\Bpl"
                                                                        Сообщение отредактировано: Paul_K -
                                                                          Так исправился уже :D
                                                                          Цитата VahaC @
                                                                          то есть хранить в папке на которую ссылается системная переменная LOCALAPPDATA)


                                                                          Добавлено
                                                                          Кстати исправился благодаря Win7
                                                                            Цитата VahaC @
                                                                            Так исправился уже
                                                                            А вот аффтар не понимает что такое путь и зачем люди придумали ини файлы и конфиги всякие...
                                                                              да но ини файл не обязательно нужен если он будет хранить бд на всех компах в LOCALAPPDATA. Но этот вариант подразумевает получать значение этой системной переменной перед подключением с использованием полученного значения при формировании строки подключения.
                                                                                Если бы у бабуси отросли бейцы....
                                                                                  Без пароля на БД, следующая строка подключения нормельно работает
                                                                                  ExpandedWrap disabled
                                                                                    procedure TForm1.ADOConnection1BeforeConnect(Sender: TObject);
                                                                                    begin
                                                                                    ADOConnection1.ConnectionString:=ExtractFileDir(Application.ExeName)+'\Base.mdb';
                                                                                    end;


                                                                                  С паролем же начинает ругаться
                                                                                    Expected } Мил человек, тему с начала читай,галимое имя файла это слишком мало для описания всех параметров строки подключения

                                                                                    Добавлено
                                                                                    Цитата Expected } @
                                                                                    ADOConnection1.ConnectionString:=ExtractFileDir(Application.ExeName)+'\Base.mdb';

                                                                                    И ты тут про это баешь?
                                                                                    Цитата VahaC @
                                                                                    если он будет хранить бд на всех компах в LOCALAPPDATA.

                                                                                    Черло реально не понимает что мало только имя файла врисовать. То, что подключение по Джет пойдет программа сама догадаться должна. А ты про LOCALAPPDATA вещаешь...
                                                                                    Сообщение отредактировано: Paul_K -
                                                                                      Малоуважаемый, Paul_K. Не уделив внимания моим просьбам, относительно последовательности действий для достижения желаемого результата, и без какой-либо попытки написать что-либо по делу, вы начали акцентировать внимание на моей неосведомлённости в "простейших вопросах". Я конечно же понимаю, что будучи специалистом в данной сфере очень легко, а может даже и приятно, унижать других. Безусловно позиционировать себя как знатока, на фоне начинающих, намного легче, чем помочь начинающему.
                                                                                      Но это моей проблемы не решит. Мне крайне не хочется опускаться до вашего уровня выражения своих мыслей. Поэтому, у меня к вам просьба: либо дайте дельный совет, либо, идите на хуй!

                                                                                      Выбор за вами. С уважением Максим.
                                                                                        Вот пример создания строки подключения путь к бд берется из OpenDialog1
                                                                                        ExpandedWrap disabled
                                                                                            if OpenDialog1.Execute then
                                                                                              ADOConnection1.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;' +
                                                                                              'Data Source=' + OpenDialog1.FileName + ';Mode=Share Deny None;Jet OLEDB:System database="";'+
                                                                                              'Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;'+
                                                                                              'Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;'+
                                                                                              'Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";'+
                                                                                              'Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;'+
                                                                                              'Jet OLEDB:Compact Without Replica Repair=False;'+
                                                                                              'Jet OLEDB:SFP=False;';
                                                                                          VahaC, благодарю за помощь!
                                                                                            Цитата Expected } @
                                                                                            Поэтому, у меня к вам просьба: либо дайте дельный совет
                                                                                            Все правильные и дельные советы были даны на первой странице обсуждения.
                                                                                            Вы не хотите сформировать строку подключения к бд при помощи встроенного мастера, и потом вывести её каким-нибудь ShowMessage() и проанализировать что и куда писать, а я получаюсь виноват в том, что Вы не увидили ничего "по делу" ну ну.
                                                                                            Да, позвольте Вас просветить еще в одном - точное указание направлений здесь запрещено.
                                                                                              Цитата Paul_K @
                                                                                              точное указание направлений здесь запрещено.

                                                                                              Но ему можно. (01:34)
                                                                                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                              0 пользователей:


                                                                                              Рейтинг@Mail.ru
                                                                                              [ Script execution time: 0,0953 ]   [ 16 queries used ]   [ Generated: 21.05.24, 10:12 GMT ]