0 / 0 / 1
Регистрация: 14.12.2013
Сообщений: 81
1

Прочитать содержимое dbf (файл SER.Dbf). И вывести содержимое нескольких полей

16.06.2014, 10:54. Показов 6647. Ответов 31
Метки нет (Все метки)

Всем привет) Можете пожалуйста помочь, может кто хорошо разбирается в работе с dbf файлами...
Задача такая: прочитать содержимое dbf (файл SER.dbf). И вывести содержимое нескольких полей, можно в датаГрид или в текстовый файл. При этом мне необходимо еще и выборочно вывести содержимое этих полей, к примеру чтобы выводило поле RN, если оно не пустое.

Вот код, который я нашел в интернете:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Data.Odbc;
using System.Data;
using System.Windows.Forms;
 
 
class WorkDBF
{
   private OdbcConnection Conn = null;
   public DataTable Execute(string Command)
   {
      DataTable dt = null;
      if (Conn != null)
      {
         try
         {
            Conn.Open();
            dt = new DataTable();
            System.Data.Odbc.OdbcCommand oCmd = Conn.CreateCommand();
            oCmd.CommandText = Command;  
            dt.Load(oCmd.ExecuteReader());
            Conn.Close();
         }
         catch (Exception e)
         {
             MessageBox.Show(e.Message); 
         }
      }
      return dt; 
   }
   public DataTable GetAll(string DB_path)
   {
      return Execute("SELECT * FROM " + DB_path);
   }
 
   public WorkDBF()
   {
      this.Conn = new System.Data.Odbc.OdbcConnection();
      Conn.ConnectionString = @"Driver={Microsoft dBase  Driver (*.dbf)};" +
             "SourceType=DBF;Exclusive=No;" +
             "Collate=Machine;NULL=NO;DELETED=NO;" +
             "BACKGROUNDFETCH=NO;"; 
   }
}
и в кнопке
C#
1
2
WDBF = new WorkDBF();
dataGridView1.DataSource = WDBF.Execute("SELECT RN FROM C:\\SER.dbf");
И при запуске программа выдает ошибку: ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified.
Помогите пожалуйста разобраться!)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.06.2014, 10:54
Ответы с готовыми решениями:

Работа с dbf в C# - вывести содержимое dbf в dataGridView
Необходимо вывести содержимое dbf в dataGridView, подскажите как сделать.... Заранее...

Запись в существующий .dbf файл
Добрый день форумчане. У меня есть несколько dbf, их всех нужно переписать в 1 файл. Собственно...

Экспорт таблицы в файл dbf
Вопрос следующий Имееться табличка на SQL сервере необходимо программно (на С#) организовать...

Экспорт из DataTable в .dbf файл
Всем здравствуйте! Проблема следующая: есть DataTable, а которой хранятся данные. Необходимо...

31
Эксперт .NET
5343 / 4134 / 1188
Регистрация: 12.10.2013
Сообщений: 11,987
Записей в блоге: 2
16.06.2014, 11:35 2
Greed29rus, дайте файл базы, чтобы не искать такой формат.
0
0 / 0 / 1
Регистрация: 14.12.2013
Сообщений: 81
16.06.2014, 12:23  [ТС] 3
Сейчас не много не понял... Что значит файл базы? У меня есть таблица dbf и мне надо из нее данные получить..
P.s. С базами данных вообще не работал, дали задание не знаю как сделать..
0
Эксперт .NET
5343 / 4134 / 1188
Регистрация: 12.10.2013
Сообщений: 11,987
Записей в блоге: 2
16.06.2014, 13:09 4
Цитата Сообщение от Greed29rus Посмотреть сообщение
таблица dbf
Ну так эта таблица в файле? Вот это и есть база...
0
44 / 44 / 26
Регистрация: 15.05.2013
Сообщений: 226
Записей в блоге: 1
16.06.2014, 23:23 5
Цитата Сообщение от Greed29rus Посмотреть сообщение
("SELECT RN FROM C:\\SER.dbf");
Полный путь к файлу указали?

Добавлено через 7 минут
C#
1
2
3
WorkDBF dbf = new WorkDBF();
 DataTable dt = dbf.GetAll("SELECT RN FROM C:\\SER.dbf"); //проверьте путь
 dataGridView1.DataSource = dt;
попробуйте так.

Добавлено через 8 минут
пардон
Цитата Сообщение от m@cChe Посмотреть сообщение
dbf.Execute
0
0 / 0 / 1
Регистрация: 14.12.2013
Сообщений: 81
17.06.2014, 09:24  [ТС] 6
У меня проблема с какая то с ODBC, что то с драйвером...

Вот Такой файл(ниже)
Миниатюры
Прочитать содержимое dbf (файл SER.Dbf). И вывести содержимое нескольких полей  
Вложения
Тип файла: rar SER.rar (300 байт, 20 просмотров)
0
44 / 44 / 26
Регистрация: 15.05.2013
Сообщений: 226
Записей в блоге: 1
17.06.2014, 10:12 7
не видит драйвер, значит делайте так: Project -> Properties -> в Build -- Platform target - ставите на - x86
0
0 / 0 / 1
Регистрация: 14.12.2013
Сообщений: 81
17.06.2014, 10:23  [ТС] 8
Ни чего не изменилось, может у меня не указан драйвер, используемый по умолчанию? а как его указать?
0
44 / 44 / 26
Регистрация: 15.05.2013
Сообщений: 226
Записей в блоге: 1
17.06.2014, 10:33 9
Лучший ответ Сообщение было отмечено Greed29rus как решение

Решение

Я прочитал Ваш файл.

Переписал класс на OleDB, в общем как-то так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System.Data.OleDb;
using System.Windows.Forms;
 
namespace BanksProject
{
   public class FileDBF
    {
        private OleDbConnection _connection = null;
 
        private const string putFileName = @"C:\SER"; // сюда пишите ПОЛНЫЙ ПУТЬ к ПАПКЕ.
 
        public DataTable Execute(string command)
        {
            DataTable dt = null;
            if (_connection != null)
            {
                try
                {
                    _connection.Open();
                    dt = new DataTable();
                    System.Data.OleDb.OleDbCommand oCmd = _connection.CreateCommand();
                    oCmd.CommandText = command;
                    dt.Load(oCmd.ExecuteReader());
                    _connection.Close();
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }
            }
            return dt;
        }
 
        public DataTable GetAll(string dbpath)
        {
            return Execute("SELECT * FROM " + dbpath);
        }
 
        public FileDBF()
        {
            this._connection = new System.Data.OleDb.OleDbConnection();
            _connection.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + putFileName + "; Extended Properties=dBASE IV;";;
        }
    }
}
Кнопка:

C#
1
2
3
4
5
6
7
8
 private void button1_Click(object sender, EventArgs e)
        {
            FileDBF dbf = new FileDBF();
            var dt = dbf.Execute(@"select RN from C:\SER\SER.DBF");// сюда пишите, ПУТЬ К ПАПКЕ И ФАЙЛУ.
            dataGridView1.DataSource = dt;
 
 
        }
2
0 / 0 / 1
Регистрация: 14.12.2013
Сообщений: 81
17.06.2014, 10:39  [ТС] 10
То есть у Вас все получилось, с этим кодом и с файлом... Тогда еще вопрос: у Вас на вашей рабочей машине установлен SQL Server?
0
44 / 44 / 26
Регистрация: 15.05.2013
Сообщений: 226
Записей в блоге: 1
17.06.2014, 10:41 11
Какая разница?(установлен )

Пробуйте=)

Добавлено через 1 минуту
Цитата Сообщение от Greed29rus Посмотреть сообщение
То есть у Вас все получилось, с этим кодом и с файлом
Да, всё получилось.
0
0 / 0 / 1
Регистрация: 14.12.2013
Сообщений: 81
17.06.2014, 10:49  [ТС] 12
А у меня не установлен...
А я фиг знает какая разница, но эта ошибка как то связана с тем что у меня SQL Server отсутствует, видимо при его установке устанавливается этот драйвер.
Просто не понятно,Код одинаковый, файл одинаковый... У Вас работает - у меня нет, как то подозрительно из-за чего

Добавлено через 2 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.Odbc;
 
namespace Practice2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        class WorkDBF
        {
            private OdbcConnection Conn = null;
            public DataTable Execute(string Command)
            {
                DataTable dt = null;
                if (Conn != null)
                {
                    try
                    {
                        Conn.Open();
                        dt = new DataTable();
                        System.Data.Odbc.OdbcCommand oCmd = Conn.CreateCommand();
                        oCmd.CommandText = Command;
                        dt.Load(oCmd.ExecuteReader());
                        Conn.Close();
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message);
                    }
                }
                return dt;
            }
            public DataTable GetAll(string DB_path)
            {
                return Execute("SELECT * FROM " + DB_path);
            }
 
            public WorkDBF()
            {
                this.Conn = new System.Data.Odbc.OdbcConnection();
                Conn.ConnectionString = @"Driver={Microsoft dBase  Driver (*.dbf)};" +
                       "SourceType=DBF;Exclusive=No;" +
                       "Collate=Machine;NULL=NO;DELETED=NO;" +
                       "BACKGROUNDFETCH=NO;";
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            WorkDBF WDBF = new WorkDBF();
            DataTable dt = WDBF.Execute("SELECT RN FROM C:\\SER.dbf");
            dataGridView1.DataSource = dt;
        }
ТАКОЙ ВЕДЬ КОД?
0
44 / 44 / 26
Регистрация: 15.05.2013
Сообщений: 226
Записей в блоге: 1
17.06.2014, 11:00 13
Нет!
Класс OleDb. Смотрите внимательно предыдущее сообщение.
Я же написал Вам.

Добавлено через 6 минут
Класс переписан под OleDb, а не ODBC.
1
0 / 0 / 1
Регистрация: 14.12.2013
Сообщений: 81
17.06.2014, 11:00  [ТС] 14
ооо) я это сообщение вообще не увидел...
Спасибо, сейчас попробую)
0
44 / 44 / 26
Регистрация: 15.05.2013
Сообщений: 226
Записей в блоге: 1
17.06.2014, 11:02 15
Повнимательнее с путями к файлу!
0
0 / 0 / 1
Регистрация: 14.12.2013
Сообщений: 81
17.06.2014, 11:44  [ТС] 16
Хорошо) У меня теперь другая проблема он у меня на MDAC ругается, говорит надо версию установить 2.6 или позднее, я скачал он у меня начал распаковывать, все распаковал, но создается ощущение, что не до конца, запускаю снова программу, и та же ошибка... Не было подобных проблем?
П.с. У меня VSexpress2012
0
44 / 44 / 26
Регистрация: 15.05.2013
Сообщений: 226
Записей в блоге: 1
17.06.2014, 12:07 17
Не знаю...., у меня таких ошибок не было...

Я так понимаю файл в грид вы не вывели?

Когда появляется ошибка? Что Вы при этом делаете? Лучше скрин покажите.
0
0 / 0 / 1
Регистрация: 14.12.2013
Сообщений: 81
17.06.2014, 14:21  [ТС] 18
Вот скрин, но мне кажется это у меня в системе какой то косяк...
Миниатюры
Прочитать содержимое dbf (файл SER.Dbf). И вывести содержимое нескольких полей  
0
0 / 0 / 1
Регистрация: 14.12.2013
Сообщений: 81
17.06.2014, 15:04  [ТС] 19
Я попробовал на другом компьютере все работает... Проблема в системе на моей машине...
0
44 / 44 / 26
Регистрация: 15.05.2013
Сообщений: 226
Записей в блоге: 1
17.06.2014, 15:07 20
Переустановите ось
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.06.2014, 15:07

Как создать .dbf файл?
Необходимо данные сохранить в .dbf файле. Как читать и записывать в файл вроде много написано в...

Запись данных в файл с расширение *.dbf
Задача есть форма на ней текст бокс с него надо занести данные в файл с расширение dbf. Помогите...

Сохранение данных из DataTable в dbf файл
Помогите пожалуйста, есть созданный и заполненный DataTable. Необходимо сохранить его в dbf файл на...

Объединить содержимое нескольких строк
Здравствуйте. Есть грид, в который поочередно (после ввода номера картриджа и нажатия кнопки)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.