На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Узнать список таблиц БД Access , когда подключение уже создано
    Пишу в Visual Studio 2003 на C# под .NET Framework 1.1

    Написал программу, которая выполняет запросы к БД Access. Использую OleDBConnection для соединения, и OleDbDataAdapter, потом создаю DataSet ... вобщем запросы выполнять могу, результаты выполнения отображаются в DataGrid'е. Но вот хотелось бы сделать что б был еще ComboBox с перечнем всех таблиц, и сразу потом выполнять запрос для выбранной таблицы. Но вот как узнать список таблиц, пока не нашел. Буду благодарен если кто подскажет.
      ExpandedWrap disabled
        select * from MSysObjects where Type=1
        Цитата PIL @
        select * from MSysObjects where Type=1

        зачем так влоб? криво получается.. :) а если беза перерастет, скажем 2 гига и придется в SQL Server или еще куда все перетаскивать?
        ExpandedWrap disabled
          OleDbConnection con=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\DOC\\sal_tmp.mdb;Persist Security Info=False");
          con.Open();
          this.dataGridView1.DataSource = con.GetSchema("Tables");
          PIL, при выполнениии запроса вылетает ошибка... код привожу ниже

          arbuzov у данного типа соединения нету метода GetSchema() !


          Вот собственно код кнопки выполнения запроса:
          ExpandedWrap disabled
            private void run_sql_Click(object sender, System.EventArgs e)                   // выполнение запроса
                    {
                        if(curr_db == " ")
                        OpenDialog.ShowDialog();                                // если БД не выбрана, выводим диалог выбора БД
                        }
                        else
                        {
                            DataSet nds = new DataSet();                            // Создаем новый ДатаСет
                            Grid.Enabled = true;                                // Делаем доступной Грид
                            OleDbDataAdapter Adapter = new OleDbDataAdapter(Command.CommandText,Connection.ConnectionString);   // Создаем новый адаптер
                            Adapter.SelectCommand = Command;                    // выбираем команду для него
                            Command.CommandText = sql_text.Text;                    // присваиваем запрос команде (пока просто текст с editBox)
                            Adapter.Fill(nds,"Result");                         // заполняем новый ДатаСет через адаптер, таблицу называем Result
                            Grid.DataSource = nds.Tables["Result"];                 // заполняем Грид данными из ДатаСета
                            Connection.Close();                             // Закрываем соединение с БД
                            Form1.ActiveForm.Text = "Отдел учета: Простой доступ к БД | Открыта база "+curr_db;
                        }
                    }


          Подскажите где не так что делаю, и как все-таки узнать программно список таблиц для БД.

          Вот что делаю при выборе БД:
          ExpandedWrap disabled
                    private void OpenDialog_FileOk(object sender, System.ComponentModel.CancelEventArgs e)                      // Если выб
                    {
                        Connection.ConnectionString = "Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source="+OpenDialog.FileName+";Jet OLEDB:Engine Type=5;Provider='Microsoft.Jet.OLEDB.4.0';Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1";
                        curr_db = OpenDialog.FileName;
                    }
            Цитата DeVoid @
            у данного типа соединения нету метода GetSchema() !
            :wacko: куда же он подевался?
            А что ты закрываешь?
            Цитата DeVoid @
            ExpandedWrap disabled
              Connection.Close(); // Закрываем соединение с БД Form1.ActiveForm.Text = "Отдел учета: Простой доступ к БД | Открыта база "+curr_db; }
            Вот открой его и дергай за Connection.GetSchema("Tables").. кстати в коде ты его закрываешь, но не видно где он открывается..
            Возможно ошибка в этом. кстати какая ошибка ты не сказал
              Для OleDbConnection в .NET Framwork 1.1 нету метода GetSchema, только что проверил в MSDN...
                Цитата DeVoid @
                вылетает ошибка... код привожу ниже
                - какая ошибка? Мы ж не телепаты..
                Через DataReader читать пробовал? Потому что в самом Access запрос отрабатывает без проблем.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0253 ]   [ 16 queries used ]   [ Generated: 19.04.24, 08:04 GMT ]