На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Связъ ADO с базой данных
    Я обычно связываю Т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 чи ещё как то

    Как это делать ??? И помоему мой способ чем то каличный
      Я делаю почти так же. Единственная разница - я GetCurrentDir стараюсь не использовать. :D
        Цитата koss @
        Но слышал что связь ADO c БД можно связывать ещё как то: чи через Alias Manajer чи ещё как то

        Как это делать ??? И помоему мой способ чем то каличный

        Я через alias с базой данных связываюсь... и, там, конечно, запись покороче выходит:

        ExpandedWrap disabled
          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 (это делается за десять секунд, но всё же...).
          Можно создать файлы udl,dsn и подставлять в ConnectionString этот файл.
            Я слышал что нужно создавать DataModule и на него помещать компоненты БД

            Цитата Dark Sup @
            Но тогда учти -- тебе нужно будет настраивать системный DSN (это делается за десять секунд, но всё же...).


            а как DSN настраивается? не разу такую гачу не делал сторку подключения всегда формировал через
            GetCurrentDir()
              Цитата koss @
              а как DSN настраивается? не разу такую гачу не делал сторку подключения всегда формировал через
              GetCurrentDir()

              Не знаю, как местные мастера его аппаратно настраивают, а я просто иду в Панель управления -> Администрирование -> Источники данных (ODBC), там выбираю вкладку "системный DSN", жму "Добавить", выбираю драйвер ввожу имя и нужные настройки (для разных драйверов свои) и готов мой Alias, к которому можно без проблем обращаться из билдера просто по имени. :)
                Пуск-Настройка-Панель Управления-Источник данных ODBC.
                Можно и программно создать .
                  Цитата Bas @
                  Пуск-Настройка-Панель Управления-Источник данных ODBC.
                  Можно и программно создать .


                  А как ты программно создаёш ??? Через какой компонент? <_<
                    Если это файловый DSN - смотри в \Common Files\ODBC\Data Source\ это просто ini файл.
                      А системный DNS в реестре: [HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\<имя>] и [HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources].
                      попробуй вручную создать запись через менеджер ODBC и проверь, что он туда записал, потом используя функции реестра, можно все это программно сделать.
                        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++ у меня есть .
                        Ктонибудь можете оптимизировать какойндь кусочек кода ,кому сколько не жалко.
                        Сами мы не местные.... Извините что обращаемся.... :whistle:
                          koss, весь код в блок try..finaly и delete Registry:
                          ExpandedWrap disabled
                            try {
                              //проверка создания DNS
                              if (Registry->OpenKey("SOFTWARE\\ODBC\\ODBC.INI\\rigel", false))
                                return;
                              //...
                            }
                            __finally {
                              delete Registry;
                            }
                            kalexs_uzb там който не такой if он в обеих случаях один ответ выдаёт : :blink:
                              Цитата
                              kalexs_uzb там който не такой if он в обеих случаях один ответ выдаёт

                              Вначале надо:
                              ExpandedWrap disabled
                                Registry->RootKey=HKEY_LOCAL_MACHINE;
                                kalexs_uzb да это я догадалса ещё вечером вчера сделать .
                                Тута проверка на существование ветви всегда фальше выдаёт .
                                У меня шас просто литературы про реестр нету . Так оноб решил ужеб.
                                  Registry->RootKey=HKEY_LOCAL_MACHINE;
                                  if (!Registry->KeyExists("\\SOFTWARE\\ODBC\\ODBC.INI\\rig"))
                                  {
                                  RegDB();
                                  }

                                  Во напутал :wacko:
                                  1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                  0 пользователей:


                                  Рейтинг@Mail.ru
                                  [ Script execution time: 0,0372 ]   [ 15 queries used ]   [ Generated: 27.07.24, 14:41 GMT ]