Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
16 / 16 / 10
Регистрация: 23.03.2010
Сообщений: 103
1

Провайдер или драйвер который сможет создать .dbf

23.10.2015, 10:53. Показов 1991. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго дня. Скажу сразу :
- Работа с dbf обусловлена тз (самому не в прикол)!

Теперь по делу:
- Есть кусок кода:

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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using System;
using System.Data.OleDb;
using VFPOLEDBLib;
 
namespace WorkClass
{
    class WorkDBF
    {
        private OleDbConnection connect = null;
        private LogEvent ev = new LogEvent();
 
        public WorkDBF(string dir)
        {
            this.connect = new OleDbConnection();
            connect.ConnectionString = ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + ";Extended Properties=dBASE IV;");
        }
 
        public bool CrUpdateDBF()
        {
            try
            {
                connect.Open();
                if (connect != null)
                {
                    OleDbCommand cmd = connect.CreateCommand();
                    cmd.CommandText = "CREATE TABLE UpdPrice (CODE numeric(6), " +
                    "GROUP numeric(6), ISGROUP L," +
                    "ARTICUL C(20), BAR_CODE numeric(15), " +
                    "PRODUCT_ID C(64), TABLO_ID C(32), " +
                    "PRICE numeric(15), QUANTITY numeric(15,3), " +
                    "WEIGHT L, SECTION numeric(2), " +
                    "FLAGS numeric(4), UNIT C(20), " +
                    "CMD numeric(2), GRUPA numeric(6), " +
                    "NDS numeric(5,2), NALOG numeric(1))";
                    cmd.ExecuteNonQuery();
                    connect.Close();
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch(OleDbException ex)
            {
                ev.WriteLogEvent("Ошибка создания таблицы: " + ex.Message + " @ " + ex.StackTrace);
                return false;
            }
            catch(Exception ex)
            {
                ev.WriteLogEvent("Ошибка создания таблицы: " + ex.Message);
                return false;
            }
        }
 
        public bool ConnectDBF()
        {
            try
            {
                connect.Open();
                return true;
            }
            catch
            {
                return false;
            }
        }
 
        public bool DisconnectDBF()
        {
            try
            {
                connect.Close();
                return true;
            }
            catch
            {
                return false;
            }
        }
 
        public bool InsertInDBF(string source)
        {
            try
            {
                if (connect != null)
                {
                    OleDbCommand cmd = connect.CreateCommand();
                    cmd.CommandText = source;
                    cmd.ExecuteNonQuery();
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch(Exception ex)
            {
                ev.WriteLogEvent("Ошибка при записи в DBF: " + ex.Message);
                return false;
            }
        }
    }
}
Вся проблема в запросе на создание таблицы и естественно на вставку (На сколько я понял в запросе использую зарезервированное слово) Запрос изменять нельзя, т.к. эту таблицу подхватывает прога написаная "во времена правления Петра I". При использовании VFPOLEDD запросы отрабатывают, но получаю не ту сигнатуру (таблица 4 http://www.autopark.ru/ASBProg... FSTRUC.HTM ), мне нужна dBASE III, dBASE IV, dBASE 5, dBASE 7, FoxPro, FoxBASE+. Помогите плс побороть это чудовище.! Заранее спасибо и да прибудет с Вами сила (:
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2015, 10:53
Ответы с готовыми решениями:

Создать файл который сможет создать таблицу в базе данных
У меня есть код он создает таблицу когда я нахожусь в phpmyadmin и делаю SQL-запрос, вопрос такой-...

Создать указатель, который сможет указывать объект любого типа.
Привет всем, я в програмировании ни чего не смыслю поэтому обращаюсь к вам, помогите составить...

Может ли Delphi создать файл, который открыть сможет только она сама?
Может ли Delphi создать файл, который открыть сможет только она сама? К примеру в архив с паролем...

Как создать шаблон класса, который сможет принимать в качестве значения любые stl контейнеры
Как написать класс, в который можно засунуть vector<int>, или vector<float>, или deque<double> и...

5
4 / 4 / 1
Регистрация: 21.10.2015
Сообщений: 16
23.10.2015, 19:01 2
Вот смотри в момент создания таблицы происходит следующее:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public bool CrUpdateDBF()
        {
            try
            {
                connect.Open();
                if (connect != null)
                {
                    OleDbCommand cmd = connect.CreateCommand();
                    cmd.CommandText = "CREATE TABLE UpdPrice (CODE numeric(6), 
                       ........." 
                    cmd.ExecuteNonQuery();
                    connect.Close();
                    return true;
                }
+
а где ты открываешь соединение тут
C#
1
2
3
4
5
public bool InsertInDBF(string source)
        {
            try
            {
                if (connect != null)
Это только проверка на соединение которого в этот момент нет.
0
16 / 16 / 10
Регистрация: 23.03.2010
Сообщений: 103
26.10.2015, 15:44  [ТС] 3
Цитата Сообщение от Alekskas Посмотреть сообщение
Вот смотри в момент создания таблицы происходит следующее:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public bool CrUpdateDBF()
        {
            try
            {
                connect.Open();
                if (connect != null)
                {
                    OleDbCommand cmd = connect.CreateCommand();
                    cmd.CommandText = "CREATE TABLE UpdPrice (CODE numeric(6), 
                       ........." 
                    cmd.ExecuteNonQuery();
                    connect.Close();
                    return true;
                }
+
а где ты открываешь соединение тут
C#
1
2
3
4
5
public bool InsertInDBF(string source)
        {
            try
            {
                if (connect != null)
Это только проверка на соединение которого в этот момент нет.
я же написал, что ругается не на соединение (там нет вопросов т.к. все нормально работает), а вот то что там используется зарезервированное слово GROUP - это косяк. Как это обойти?
0
1504 / 1052 / 146
Регистрация: 01.10.2009
Сообщений: 3,537
Записей в блоге: 1
26.10.2015, 17:49 4
T-SQL
1
'GROUP'
?
0
4 / 4 / 1
Регистрация: 21.10.2015
Сообщений: 16
26.10.2015, 18:54 5
Проблему понял, действительно беда и не все так просто со словом GROUP даже наверное не спасет конструкция [GROUP]. GROUP запрещается стандартным SQL как имя столбца или имя таблицы.
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
27.10.2015, 13:26 6
Когда-то тоже мучался с dbf. Для создания таблиц использовал шаблоны-пустые dbf-файлы, не содержащие записей. Вместо кода создания таблицы просто копировал этот файл.
В случае,если у меня был файл с записями, который нужно было обработать,а потом сохранить с той же структурой, я копировал его структуру. Вот код:
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
public static void CopyStructDBF(string PathToInFile,string PathToOutTMP)
        {
            try
            {               
                if(File.Exists(PathToOutTMP))
                {
                    File.Delete(PathToOutTMP);
                }
                FileStream inFS = File.OpenRead(PathToInFile);
                FileStream outFS = File.OpenWrite(PathToOutTMP);
                byte[] buf_int=new byte[2];
                inFS.Seek(8,SeekOrigin.Begin);
                inFS.Read(buf_int,0,2);//считать размер заголовка файла
                int Size=buf_int[0]+buf_int[1]*256;
                byte[] buf = new byte[Size];
                inFS.Seek(0,SeekOrigin.Begin);
                inFS.Read(buf,0,Size);
                outFS.Write(buf,0,Size);
                for(int i=4;i<8;i++)
                {
                    outFS.Seek(i,SeekOrigin.Begin);
                    outFS.WriteByte(0);//обнулить кол-во записей
                }
                outFS.Seek(outFS.Length,SeekOrigin.Begin);
                outFS.WriteByte(26);
                inFS.Flush();
                inFS.Close();
                outFS.Flush();
                outFS.Close();          
            }
            catch(Exception er)
            {
                                MessageBox.Show(er.Message);
            }
        }
Код писался еще в VS 2003.
Может пригодится.
0
27.10.2015, 13:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2015, 13:26
Помогаю со студенческими работами здесь

Создать форму в которой пользователь сможет ввести своё имя и фамилию и сценарий, который сохранит эти данные в файле
Здравствуйте , помогите пожалуйста выполнить задание , нужно на php создать форму в которой...

Создать пользователя базы данных который сможет читать данные и записывать данные в бд
Собственно вопрос в названии..НА русскомя языке нашел мало нужной инфы...

Есть ли алгоритм который сможет определить есть человек на фото или нет?
Или в принцепе подошло бы что то что сможет сравнить 2 фото и сказать их процент

Создать драйвер клавиатуры, который будет заменять пробел на ъ
Нужно создать драйвер клавиатуры, который будет заменять пробел на ъ. Вот что накалякал, но прога...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru