Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[34.231.180.210] |
|
Сообщ.
#1
,
|
|
|
Я обычно связываю ТADOConnection c базой данных через :
#define Constr "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=\"DBQ="+GetCurrentDir()+"\\Firma.mdb;DefaultDir="+GetCurrentDir()+";Driver={Driver do Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;FILEDSN="+GetCurrentDir()+"\a;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;\"" ADOConnection1->ConnectionString= Constr; ADOConnection1->Connected=true; Но слышал что связь ADO c БД можно связывать ещё как то: чи через Alias Manajer чи ещё как то Как это делать ??? И помоему мой способ чем то каличный |
Сообщ.
#2
,
|
|
|
Я делаю почти так же. Единственная разница - я GetCurrentDir стараюсь не использовать.
|
Сообщ.
#3
,
|
|
|
Цитата koss @ Но слышал что связь ADO c БД можно связывать ещё как то: чи через Alias Manajer чи ещё как то Как это делать ??? И помоему мой способ чем то каличный Я через alias с базой данных связываюсь... и, там, конечно, запись покороче выходит: AnsiString Alias; TIniFile *pIniFile = new TIniFile(ExtractFileDir(Application->ExeName) + "\\Currency.ini"); Alias = pIniFile->ReadString("Source", "Alias", "Clients"); ADOConnection1->ConnectionString="Provider=MSDASQL.1;Persist Security Info=False;Data Source="+Alias+";"; delete pIniFile; Но тогда учти -- тебе нужно будет настраивать системный DSN (это делается за десять секунд, но всё же...). |
Сообщ.
#4
,
|
|
|
Можно создать файлы udl,dsn и подставлять в ConnectionString этот файл.
|
Сообщ.
#5
,
|
|
|
Я слышал что нужно создавать DataModule и на него помещать компоненты БД
Цитата Dark Sup @ Но тогда учти -- тебе нужно будет настраивать системный DSN (это делается за десять секунд, но всё же...). а как DSN настраивается? не разу такую гачу не делал сторку подключения всегда формировал через GetCurrentDir() |
Сообщ.
#6
,
|
|
|
Цитата koss @ а как DSN настраивается? не разу такую гачу не делал сторку подключения всегда формировал через GetCurrentDir() Не знаю, как местные мастера его аппаратно настраивают, а я просто иду в Панель управления -> Администрирование -> Источники данных (ODBC), там выбираю вкладку "системный DSN", жму "Добавить", выбираю драйвер ввожу имя и нужные настройки (для разных драйверов свои) и готов мой Alias, к которому можно без проблем обращаться из билдера просто по имени. |
Сообщ.
#7
,
|
|
|
Пуск-Настройка-Панель Управления-Источник данных ODBC.
Можно и программно создать . |
Сообщ.
#8
,
|
|
|
Цитата Bas @ Пуск-Настройка-Панель Управления-Источник данных ODBC. Можно и программно создать . А как ты программно создаёш ??? Через какой компонент? |
Сообщ.
#9
,
|
|
|
Если это файловый DSN - смотри в \Common Files\ODBC\Data Source\ это просто ini файл.
|
Сообщ.
#10
,
|
|
|
А системный DNS в реестре: [HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\<имя>] и [HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources].
попробуй вручную создать запись через менеджер ODBC и проверь, что он туда записал, потом используя функции реестра, можно все это программно сделать. |
Сообщ.
#11
,
|
|
|
bool TForm1::RegDB()
{ AnsiString S,Windir; TRegistry *Registry=new TRegistry(KEY_ALL_ACCESS); char Win[MAX_PATH]; GetWindowsDirectory(Win, MAX_PATH); S=GetCurrentDir() + "\\Firma.mdb"; Windir = (AnsiString)Win + "\\system32\\odbcjt32.dll"; Registry->RootKey=HKEY_LOCAL_MACHINE; Registry->OpenKey("SOFTWARE\\ODBC\\ODBC.INI\\rigel",true); Registry->WriteString("DBQ",S); Registry->WriteString("Driver",Windir); Registry->WriteString("FIL","MS Access;"); Registry->WriteString("UID",""); Registry->WriteInteger("DriverId",25); Registry->WriteInteger("SafeTransactions",0); Registry->OpenKey("Engines\\Jet",true); Registry->WriteString("ImplicitCommitSync",""); Registry->WriteString("UserCommitSync","Yes"); Registry->WriteInteger("MaxBufferSize",2048); Registry->WriteInteger("PageTimeout",5); Registry->WriteInteger("Threads",3); Registry->CloseKey(); Registry->OpenKey("SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources",true); Registry->WriteString("rigel","Driver do Microsoft Access (*.mdb)"); Registry->CloseKey(); } Замутил создание системного DSN теперь токо осталось сделать чтобы прога в реестре проверяла создан DSN чи нет if(!создан) {RegDB();} Конечно проблемы с нормальным правописанием на C++ у меня есть . Ктонибудь можете оптимизировать какойндь кусочек кода ,кому сколько не жалко. Сами мы не местные.... Извините что обращаемся.... |
Сообщ.
#12
,
|
|
|
koss, весь код в блок try..finaly и delete Registry:
try { //проверка создания DNS if (Registry->OpenKey("SOFTWARE\\ODBC\\ODBC.INI\\rigel", false)) return; //... } __finally { delete Registry; } |
Сообщ.
#13
,
|
|
|
kalexs_uzb там който не такой if он в обеих случаях один ответ выдаёт :
|
Сообщ.
#14
,
|
|
|
Цитата kalexs_uzb там който не такой if он в обеих случаях один ответ выдаёт Вначале надо: Registry->RootKey=HKEY_LOCAL_MACHINE; |
Сообщ.
#15
,
|
|
|
kalexs_uzb да это я догадалса ещё вечером вчера сделать .
Тута проверка на существование ветви всегда фальше выдаёт . У меня шас просто литературы про реестр нету . Так оноб решил ужеб. |
Сообщ.
#16
,
|
|
|
Registry->RootKey=HKEY_LOCAL_MACHINE;
if (!Registry->KeyExists("\\SOFTWARE\\ODBC\\ODBC.INI\\rig")) { RegDB(); } Во напутал |