На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Как проверяете существование таблицы? , ADO/Delphi/Access
    как проверяете существование таблицы?

    Эта тема была разделена из темы "Посоветуйте, пожалуйста, как лучше"
      а проанализировать, есть ли таблица, можно так (ADO+ VC):
      Цитата

      try
      {
      m_pRstEvent->Open("TableName",
      _variant_t((IDispatch*)m_pConn),adOpenKeyset, adLockOptimistic,adCmdTable);
      }
      catch(...)
      {
      AfxMessageBox("Такой таблицы нет");
      return false;
      }
      return true;

      ну а проверить на то, пустая она или нет, я думаю ты знаешь ;)
        2PIL, я VC плохо понимаю. можно ли проверить существование таблицы с помощью SQL?
          2 tomsksmile, я таких способов не знаю..
            Цитата tomsksmile, 3.12.04, 10:23, 531328
            как проверяете существование таблицы?

            ExpandedWrap disabled
              SELECT COUNT(*) FROM msysobjects WHERE type = 1 AND name = 'Таблицы22'


            Добавлено
            Цитата Kezya, 3.12.04, 06:47, 531135
            3. Создавать временную таблицу вообще в отдельном файле, т.е. в другой базе данных. Соответственно - при запуске программы файл создавать, при выходе - удалять. Не надо тогда проверять существование таблицы, т.к. файл стирается и создается принулительно. Такой вариант мне кажется более простым и удобным: основная база не будет увеличиваться в размерах и надежнее как-то кажется. Но насоклько это скажется на производительности - работа с тибалицами в разных базах?
            Если временную таблицу создавать в той же базе, то за несколько расчетов (от 10 до 15) база распухает примерно в 2 раза

            Создавать временные таблицы в базе tmp.mdb и не удалять ее а удалять таблицы в ней ну и иногда делать сжатие.
              2Bas, где можно посмотреть значения msysobjects.type?
              мне нужно значение для представлений view.
              нашел, что запросы и преддставления - это msysobjects.type=5
              Описание системной таблицы MS Access - MSysObjects


              поторопился... из MS Access я могу "читать msysobjects"
              пытаюсь писать в Дельфи6
              ExpandedWrap disabled
                function TModuleModel.CheckView(ViewName : string): boolean;
                var
                q : TADOQuery;
                sqlString : string;
                begin
                q := TADOQuery.Create(Application);
                try
                    q.Connection := ModuleModel.ConModel;
                    sqlString := 'SELECT Count(*) FROM msysobjects ' +
                                 'WHERE msysobjects.Type=5 AND msysobjects.Name = %s';
                    sqlString := format(sqlString, [ViewName]);
                    q.sql.Clear;
                    q.SQL.Add(sqlString);
                    q.Open;
                 
                    case (q.Fields.Fields[0].AsInteger) of
                    0 : result := false;
                    1 : result := true;  
                    end;
                finally
                q.Free;
                end;
                 
                end;


              в момент открытия запроса выдается сообщение об ошибке:
              Записи не могут быть прочитаны, отсутствует разрешение на чтение данных для 'msysobjects'.


              что делать?
              ADO/Delphi6/Access97
              Сообщение отредактировано: tomsksmile -
                Цитата tomsksmile, 3.12.04, 11:39, 531392
                запросы и преддставления - это msysobjects.type=5

                Кажеться так
                1 – определяет таблицу
                2 – поле
                3 - индекс
                  В королевстве предлагают пользоваться стронними компанентами. опять какие-то дебри.

                  мне нужно работая с представлениями перед их использованием удалять их (проверив что они есть) а потом заполнять и снова удалять. удаление перед использованием необходимо для того, чтобы если во время заполения представлений произошел сбой, то нужно избежать проблемы в следующий раз.
                    Цитата tomsksmile, 3.12.04, 12:35, 531463
                    В королевстве предлагают пользоваться стронними компанентами. опять какие-то дебри.

                    Пусть предлагают.
                    Когда содавал DNS там была галочка Системная База Данных - и стояло нет.
                    Установи в другое положение и укажи путь к системной базе по умолчанию это system.mdw . И теперь конектишся с User Name - Admin и будут у тебя права.
                      2Bas, вот моя строка подключения
                      ExpandedWrap disabled
                        Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;
                        Data Source=C:\dis\work\DB\test.mdb;
                        Mode=Share Deny None;
                        Extended Properties="";
                        Persist Security Info=False;
                        Jet OLEDB:System database="";
                        Jet OLEDB:Registry Path="";
                        Jet OLEDB:Database Password="";
                        Jet OLEDB:Engine Type=5;
                        Jet OLEDB:Database Locking Mode=0;
                        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


                      нужно поменять Jet OLEDB:Create System Database=False на True?
                      в Jet OLEDB:System database писать путь или просто system.mdw???
                      Сообщение отредактировано: tomsksmile -
                        Цитата tomsksmile, 3.12.04, 13:30, 531557
                        нужно поменять Jet OLEDB:Create System Database=False на True?

                        Да
                        Цитата tomsksmile, 3.12.04, 13:30, 531557
                        в Jet OLEDB:System database писать путь или просто system.mdw???

                        Пробуйте :yes:
                          перепробывал варианты с подключением файла рабочей группы system.mdw
                          1. нашел его на диске и прописал в свойстве System database путь к
                          нему C:\Documents and Settings\Администратор\Application Data\Microsoft\Access\system.mdw
                          2. копировал файл в рабочую директорию (где хранится моя база) и задавал
                          свойство System database = system.mdw
                          3. прочитал раздел ФАКа "Как открыть базу данных Microsoft Access .MDB в Delphi?"
                          4. читал инфо microsoft-a
                          ошибки все равно происходят.

                          что еще можно сделать?
                          Сообщение отредактировано: tomsksmile -
                            из всех свойств оставил только три

                            ExpandedWrap disabled
                              ConModel.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0; ' +
                                                         'Data Source='+path +';+
                                                         'Jet OLEDB:System database='+pathSysDB+';';


                            где
                            ExpandedWrap disabled
                              path := 'C:\test.mdb'
                              pathSysDB := 'C:\Documents and Settings\Администратор\Application Data\Microsoft\Access\system.mdw';


                            кроме того переписал
                            ExpandedWrap disabled
                              CheckView('"'+'temper2'+'"')
                            - кавычки добавил.
                            и все сработало.

                            сначала сделал, а потом подумал. а нужно было наоборот.
                            полез смотреть реестр.

                            программу запускал под Администратором - она сработала,
                            запустил под пользоватлем - она пошла, только после изменения пути

                            ExpandedWrap disabled
                              pathSysDB := 'C:\Documents and Settings\mike\Application Data\Microsoft\Access\system.mdw';


                            по сему два вопроса:

                            1. За что отвечает свойство Jet OLEDB:Create System Database?
                            2. как сделать так, чтобы можно было работать с программой под любым пользователем?

                            мои идеи:
                            1. свойство Jet OLEDB:Create System Database, установленное в True, говорит Jet, что мы создаем «пустую» системную базу, а не собираемся использовать существующую.
                            2. читать реестр
                              Цитата tomsksmile, 4.12.04, 12:57, 532418
                              2. как сделать так, чтобы можно было работать с программой под любым пользователем?

                              Создать mdw для текущей базы и использовать ее.
                                Цитата PIL, 3.12.04, 12:00, 531358
                                2 tomsksmile, я таких способов не знаю..


                                можно поробовать создать такуюже таблицу и если она есть, то вылетит ексепшн, типа table was exists
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0374 ]   [ 15 queries used ]   [ Generated: 1.05.24, 08:20 GMT ]