Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.103.234] |
|
Сообщ.
#1
,
|
|
|
Добрый день. Прошу помощи при работе с БД.
1. Подключил к проекту БД таким образом: Меню Database->Explorer. Меню Object->ODBC Administrator. Добавить .mdb, указываю путь к БД Access, потом OK, OK. При запуске проекта появляется сообщение Database login, которое требует Имя и пароль. Ничего не ввожу, нажимаю ОК, дальше всё нормально. Что это за окно и как от него избавиться при запуске программы? 2. Проект работает с БД только тогда, когда она лежит на C:\MyDataBase.db; Куда не засуну в другое место - выходит сообщение об ошибке. В чём проблема? И как от неё избавится? 3. При переносе БД на другой компьютер - БД вообще не работает. |
Сообщ.
#2
,
|
|
|
Цитата Expected } @ Как-то очень сложно.Меню Database->Explorer. Меню Object->ODBC Administrator. Добавить .mdb, указываю путь к БД Access, потом OK, OK Цитата Expected } @ Что это за окно и как от него избавиться при запуске программы? Указать LoginPrompt = False Цитата Expected } @ Совершенно верно. Программе надо указать где файл лежит. Сама она искать файлы не умеет. Обращается по пути и имени из п.1. В Вашем случае, наверное, надо смотреть куда настроено ODBC. Но повторю, Вы выбрали слишком витееватый способ.Куда не засуну в другое место - выходит сообщение об ошибке Цитата Expected } @ Или каждый раз менять руками настройки перед запуском илли использовать другой способ подключения. Например OLEDB и MicrosoftJet.И как от неё избавится? Цитата Expected } @ Это естественно вытекает из предыдущего пункта. При переносе БД на другой компьютер - БД вообще не работает. |
Сообщ.
#3
,
|
|
|
Цитата Как-то очень сложно. А как по другому подключить БД? Что бы не было всей этих проблем? Цитата LoginPrompt = False Это в обработчике событий како-го то компонента? |
Сообщ.
#4
,
|
|
|
Акцесс не надо подключать через ODBC лучший вариант через родного для него провайдера, через JET и тогда проблем не будет, очень легко изменить строку подключения на нужную.
|
Сообщ.
#5
,
|
|
|
Подключил через JET проблем меньше стало. Но на другом компьютере всё равно нужно указывать путь. Как сделать так, что бы ADOconnection1 сам подключал БД, которая находится по адресу "Database\MyDatabase.db"? А сама папка Database находится в той же папке что и ехе-шник
|
Сообщ.
#6
,
|
|
|
Цитата Expected } @ Формировать стоку подключения до коннекта к БДКак сделать так, что бы ADOconnection1 сам подключал БД, которая находится по адресу Почитать про Aplication.ExeName, и ExtractFileDir |
Сообщ.
#7
,
|
|
|
в событии OnCreate твоего DataModule добавь примерно так
создать ConnectionString где адрес файла бд будет указан вот так dbfile := ExtractFileDir(Application.ExeName) + 'Database\MyDatabase.db'; и вообще при использовании файлов в своей программе путь к ним нужно задавать таким вот способом. |
Сообщ.
#8
,
|
|
|
Expected } как вариант - создай ini-файл с параметрами подлючения. К примеру:
[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 |
Сообщ.
#9
,
|
|
|
Цитата VahaC @ в событии OnCreate В OnCreate не сработало, а вот в собтытии BeforeConnection ADOConnection1 получилось |
Сообщ.
#10
,
|
|
|
Цитата Expected } @ В OnCreate не сработало, а вот в собтытии BeforeConnection ADOConnection1 получилось Это потому что у тебя в design time ADOConnection1.Connected установлено в тру |
Сообщ.
#11
,
|
|
|
Цитата Expected } @ Подключил через JET проблем меньше стало. Но на другом компьютере всё равно нужно указывать путь. Как сделать так, что бы ADOconnection1 сам подключал БД, которая находится по адресу "Database\MyDatabase.db"? А сама папка Database находится в той же папке что и ехе-шник Подобным программам не место в Виндоус, они не живые, не надо пытаться писать в Program Files Что мешает это делать в d:\Databases с должными правами. |
Сообщ.
#12
,
|
|
|
Цитата Anatoly Podgoretsky @ они не живые А можно обяснить что это значить? |
Сообщ.
#13
,
|
|
|
Попадешься на машину с норамальными правами, а не администраторскпми для всех и сразу поймешь, что это значит.
Сообственно не надо даже администраторские права, на Виста и выше запись в эту папку запрещена, даже администратору, без подтверждения вручную. |
Сообщ.
#14
,
|
|
|
Извините за оффтоп.
Anatoly Podgoretsky а если нету диска д тогда чего прикажите делать? Создавать для каждой программы свою папку в корне диска С как то не логично, а в програм файлс нельзя. Знач надо создать свою так сказать програм файлс и туда инсталить. Но вот как ентое дело обяснить конечному юзверю. Или может хлопци из микрософта чего новое придумали? |
Сообщ.
#15
,
|
|
|
Vaha, вообще есть каталоги учетных записей пользователей, в которые запись разрешена.
По мне, так лучшее решение настраиваемые пути: по умолчанию указывают на каталог учетной записи пользователя, в инсталляторе возможность указать пути по выбору, а также упоминание о том, что если это будет отложено, то где в программе искать эту настройку. |
Сообщ.
#16
,
|
|
|
Вот незнаю, у меня лично, с папками типа 'C:\Users\..' или 'C:\Мои документы\..' с самого детства любовь не сложилась
Не пойму зачем микрософт на мудрило со старим добрым програмфайлс Ещё раз извиняюсь за оффтоп. ПС Знач получается что теперь такая тривиальная задача как сохр настроек превращается в головную боль. Типа определяем версию окошек а потом смотря от версии их уже сейвим и с их загрузкой тоже самое. Эт я о том если инсталится в програм файлс. |
Сообщ.
#17
,
|
|
|
Цитата VahaC @ Знач получается что теперь такая тривиальная задача как сохр настроек превращается в головную боль. Типа определяем версию окошек а потом смотря от версии их уже сейвим и с их загрузкой тоже самое. Эт я о том если инсталится в програм файлс. А самого начала правильно нужно было делать - как и рекомендовала фирма Microsoft - пользовательские данные и настройки хранить в каталогах пользователя, либо создавать для этого ещё один каталог специальный с соттветствующими правами доступа. |
Сообщ.
#18
,
|
|
|
базу надо хранить в папке с программой
|
Сообщ.
#19
,
|
|
|
Цитата hkdkest2 @ базу надо хранить в папке с программой Храни пожалуста. Кто ж мешает? Только потом не надо вопросов задавать как перенести на другой компьютер программу с БД. |
Сообщ.
#20
,
|
|
|
Цитата hkdkest2 @ базу надо хранить в папке с программой Тогда программа должна быть в соответствующем месте. Всего лишь. |
Сообщ.
#21
,
|
|
|
Цитата VahaC @ Извините за оффтоп. Anatoly Podgoretsky а если нету диска д тогда чего прикажите делать? Создавать для каждой программы свою папку в корне диска С как то не логично, а в програм файлс нельзя. Знач надо создать свою так сказать програм файлс и туда инсталить. Но вот как ентое дело обяснить конечному юзверю. Или может хлопци из микрософта чего новое придумали? Ты не понимаешь, d: это не диск D, а любой диск. И не надо жестко его прописывать в программе, это должна быть считываемая настройка. |
Сообщ.
#22
,
|
|
|
Для переноса создал запись
procedure TRegstud.ADOConnection1BeforeConnect(Sender: TObject); begin ADOConnection1.ConnectionString:=ExtractFilepath(Application.ExeName)+'Base.mdb'; end; Выдаёт ошибку "Ошибочный пароль". Как решить эту проблему? |
Сообщ.
#23
,
|
|
|
Цитата Expected } @ ADOConnection1.ConnectionString:=ExtractFilepath(Application.ExeName)+'Base.mdb'; Это что то дикое, построй строку подключения с помощью мастера. |
Сообщ.
#24
,
|
|
|
В другом проекте работает так.
А в местере путь уже указан |
Сообщ.
#25
,
|
|
|
Цитата Expected } @ oxxtym странно. Чесс слово не должноВ другом проекте работает так. Цитата Expected } @ Что такое местер мы не знаем. А вот посмотреть внимательно на строку сформированную с помощью мастера таки еще раз стоит. Там несколько больше букав должно быть чем только путь к файлу. Разумеешь? А в местере путь уже указан |
Сообщ.
#26
,
|
|
|
Пожалуйста, скажите какая последовательность действий должна быть, что бы на другом компьютере не возникало неполадок связанных с базой данных, на которой установлен пароль"111"?
|
Сообщ.
#27
,
|
|
|
Имхо лучше создать папочку для данных своей программы в 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; |
Сообщ.
#28
,
|
|
|
VahaC Опять Вы неправы. В первую очередб, надо перечесть букварь.
Во вторую надо определиться по какому пути БД будет всегда доступна всем тем компутерам, которым это надо. Цитата Expected } @ Пожалуйста, скажите какая последовательность действий должна быть, что бы на другом компьютере не возникало неполадок связанных с базой данных, на которой установлен пароль"111"? Тип биде? аксесс? Со всех компов в сети есть доступ к директории где лежит бюиде? К всех в инишке он верно настроен? приложение верно читает инишку, перед коннектом к биде? Какого лешего пароль на аксесовскую базу ставили? он там не нужен. |
Сообщ.
#29
,
|
|
|
БД Access, пользователь - администратор, в базе хранятся ответы на вопросы к тестам (это насчёт пароля). Бд находится в одной папке с ехе-шником
|
Сообщ.
#30
,
|
|
|
Цитата Expected } @ и.... И не верю... Пояснять надо почему не верю? Бд находится в одной папке с ехе-шником |
Сообщ.
#31
,
|
|
|
Мне мы рабочий алгоритм манипуляций с компонентами и строкой подключения
|
Сообщ.
#32
,
|
|
|
Цитата Paul_K @ Со всех компов в сети есть доступ к директории где лежит бюиде? К всех в инишке он верно настроен? Я конечно извиняюсь но где здесь говорилось о сети? Цитата Expected } @ При переносе БД на другой компьютер - БД вообще не работает. |
Сообщ.
#33
,
|
|
|
Цитата VahaC @ А какая в попу разница если в приложении вшит один путь а перенесли в другое? При переносе БД на другой компьютер - БД вообще не работает. |
Сообщ.
#34
,
|
|
|
так я и писал что надо где то хранить путь или всегда использовать один и тот же(то есть хранить в папке на которую ссылается системная переменная LOCALAPPDATA)
|
Сообщ.
#35
,
|
|
|
Не ты один. В первом же ответе ему дан намек, что пути надо определять. Но персонаж этого понимать не хочет...
Добавлено Цитата VahaC @ А вот это надо исправлять.... Причем за основу брать "$(BDSCOMMONDIR)\Bpl" Вот незнаю, у меня лично, с папками типа 'C:\Users\..' или 'C:\Мои документы\..' с самого детства любовь не сложилась |
Сообщ.
#36
,
|
|
|
Так исправился уже
Цитата VahaC @ то есть хранить в папке на которую ссылается системная переменная LOCALAPPDATA) Добавлено Кстати исправился благодаря Win7 |
Сообщ.
#37
,
|
|
|
Цитата VahaC @ А вот аффтар не понимает что такое путь и зачем люди придумали ини файлы и конфиги всякие... Так исправился уже |
Сообщ.
#38
,
|
|
|
да но ини файл не обязательно нужен если он будет хранить бд на всех компах в LOCALAPPDATA. Но этот вариант подразумевает получать значение этой системной переменной перед подключением с использованием полученного значения при формировании строки подключения.
|
Сообщ.
#39
,
|
|
|
Если бы у бабуси отросли бейцы....
|
Сообщ.
#40
,
|
|
|
Без пароля на БД, следующая строка подключения нормельно работает
procedure TForm1.ADOConnection1BeforeConnect(Sender: TObject); begin ADOConnection1.ConnectionString:=ExtractFileDir(Application.ExeName)+'\Base.mdb'; end; С паролем же начинает ругаться |
Сообщ.
#41
,
|
|
|
Expected } Мил человек, тему с начала читай,галимое имя файла это слишком мало для описания всех параметров строки подключения
Добавлено Цитата Expected } @ ADOConnection1.ConnectionString:=ExtractFileDir(Application.ExeName)+'\Base.mdb'; И ты тут про это баешь? Цитата VahaC @ если он будет хранить бд на всех компах в LOCALAPPDATA. Черло реально не понимает что мало только имя файла врисовать. То, что подключение по Джет пойдет программа сама догадаться должна. А ты про LOCALAPPDATA вещаешь... |
Сообщ.
#42
,
|
|
|
Малоуважаемый, Paul_K. Не уделив внимания моим просьбам, относительно последовательности действий для достижения желаемого результата, и без какой-либо попытки написать что-либо по делу, вы начали акцентировать внимание на моей неосведомлённости в "простейших вопросах". Я конечно же понимаю, что будучи специалистом в данной сфере очень легко, а может даже и приятно, унижать других. Безусловно позиционировать себя как знатока, на фоне начинающих, намного легче, чем помочь начинающему.
Но это моей проблемы не решит. Мне крайне не хочется опускаться до вашего уровня выражения своих мыслей. Поэтому, у меня к вам просьба: либо дайте дельный совет, либо, идите на хуй! Выбор за вами. С уважением Максим. |
Сообщ.
#43
,
|
|
|
Вот пример создания строки подключения путь к бд берется из OpenDialog1
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;'; |
Сообщ.
#44
,
|
|
|
VahaC, благодарю за помощь!
|
Сообщ.
#45
,
|
|
|
Цитата Expected } @ Все правильные и дельные советы были даны на первой странице обсуждения.Поэтому, у меня к вам просьба: либо дайте дельный совет Вы не хотите сформировать строку подключения к бд при помощи встроенного мастера, и потом вывести её каким-нибудь ShowMessage() и проанализировать что и куда писать, а я получаюсь виноват в том, что Вы не увидили ничего "по делу" ну ну. Да, позвольте Вас просветить еще в одном - точное указание направлений здесь запрещено. |
Сообщ.
#46
,
|
|
|
Цитата Paul_K @ точное указание направлений здесь запрещено. Но ему можно. (01:34) |