Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 11.10.2013
Сообщений: 24

Как определить тип поля 'Счетчик' ?

20.04.2021, 19:09. Показов 2749. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть база MSAccess.

C#
1
2
string strConnFirms = @"Provider = Microsoft.Jet.OleDb.4.0;" + "data source = Firms.mdb";
OleDbConnection connFirms = new OleDbConnection(strConnFirms);
При апгрейде на новую версию софта нужно изменить тип поля FirmID с 'Счетчик' на 'Длинное целое':

C#
1
2
3
4
connFirms.Open();
using (OleDbCommand oCmd = new OleDbCommand("ALTER TABLE tblFirms ALTER COLUMN FirmID INT", connFirms))
{ oCmd.ExecuteNonQuery(); }
connFirms.Close();
Но это нужно сделать только 1 раз, а не при каждом последующем запуске.
Вопрос: Как узнать тип поля 'Счетчик' в базе, чтобы не делать апгрейд, если он уже сделан?

DataType у поля Счетчик и Длинное целое одинаковый System.Int32, так что по типу поля не получиться.
Думал, что dsFirms.Tables["tblFirms"].Columns["FirmID"].AutoIncrement должно быть true для счетчика, но нет, возвращает false.
Аналогично, через schemaTable, AutoInc всегда равно false:

C#
1
2
3
4
5
6
using (OleDbCommand oCmd = new OleDbCommand("SELECT FirmID FROM tblFirms", connFirms))
{
    OleDbDataReader reader = oCmd.ExecuteReader();
    DataTable schemaTable = reader.GetSchemaTable();
    bool AutoInc = schemaTable.Rows[0].Field<bool>("IsAutoIncrement");
}
Прошу помощи, замучался уже из-за такой ерунды...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.04.2021, 19:09
Ответы с готовыми решениями:

как сделать Поля таблицы на русском и скрыть поля счетчик в windows forms
как правильно сделать Поля таблицы на русском и скрыть поля счетчик в windows forms? SQL server использую

Изменить тип поля на счетчик
Код создает таблицу, все хорошо, только как создать поле чтобы оно было счетчиком ? DataModule2-&gt;ADOQuery4-&gt;SQL-&gt;Clear(); ...

Класс «Растение» Поля: тип (дерево, куст и т.д.), высота и т.д.Для поля «тип» использовать тип данных enum
Создать класс, содержащий конструктор, поля, перегруженные методы Продемонстрировать работу с классом (создание экземпляра класса,...

4
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,439
21.04.2021, 03:56
Цитата Сообщение от zen2s Посмотреть сообщение
Но это нужно сделать только 1 раз, а не при каждом последующем запуске.
Такое инсталлятор должен делать, а не сама программа. Заведите таблицу, где будет отслеживаться версия базы, а лучше история её изменения. Если версия базы ниже нужной (или в истории нет записи о нужном действии над базой), то выполняйте нужное изменение и поднимайте версию базы.

Таким образом вы гарантируете, что некоторое изменение сработает только один раз и не переопределит все последующие изменения над тем же объектом.
1
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
21.04.2021, 08:33
Цитата Сообщение от zen2s Посмотреть сообщение
Вопрос: Как узнать тип поля 'Счетчик' в базе
в MS Access тип поля Счетчик - Длинное целое (Long Integer от –2 147 483 648 до +2 147 483 647) - был всегда в любых версиях. Типы MS Access, цитата оттуда:
Совет: Тип данных "Длинное целое" следует использовать при создании внешнего ключа для связывания поля с полем первичного ключа другой таблицы, которое имеет тип данных "Счетчик".
Аналог в C# тип Int32 или просто int.
0
2 / 2 / 0
Регистрация: 11.10.2013
Сообщений: 24
21.04.2021, 13:28  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Такое инсталлятор должен делать, а не сама программа.
Спасибо за совет. Как вариант реализации, возможно, придется так и сделать, но все таки хотелось бы разобраться именно в вопросе темы. Уверен, что решение есть, просто я его пока не знаю :-(

Добавлено через 5 минут
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
в MS Access тип поля Счетчик - Длинное целое
В C# именно так, как я и писал в своем посте:
Цитата Сообщение от zen2s Посмотреть сообщение
DataType у поля Счетчик и Длинное целое одинаковый System.Int32
Однако, задача в том, чтобы определить в C#, имеет поле FirmID тип MSAccess 'Счетчик' или 'Длинное целое' !!!
0
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
21.04.2021, 14:07
Цитата Сообщение от zen2s Посмотреть сообщение
Однако, задача в том, чтобы определить в C#, имеет поле FirmID тип MSAccess 'Счетчик' или 'Длинное целое' !!!
Не понял зачем это все... Наверное не дано
Вот пример работы с индексами в MS Access из VBA
Visual Basic
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
Private Sub butExecute_Click()
Dim idx As Index, fld As Field
        
        On Error Resume Next
        'Удаляем все лишнее
        tdf.Indexes.Delete "PrimaryKey" 'Удаляем индекс
        tdf.Indexes.Refresh 'Сохраняем изменение
        tdf.Fields.Delete "Код" 'Удаляем поле
        tdf.Fields.Refresh 'Изменяем таблицу
        Err.Clear 'Очищаем от ошибки, если нет поля
        
        On Error GoTo 999
       'Создаем поле "Счетчик" с новыми значениями
        Set fld = tdf.CreateField("Код") 'Создание
        fld.Type = dbLong 'Тип поля
        fld.Properties("Attributes") = dbAutoIncrField 'Назначение атрибутов счетчика
        tdf.Fields.Append fld 'Добавить поле
        tdf.Fields.Refresh 'Изменяем таблицу
        
        
        'Создаем индекс
        Set idx = tdf.CreateIndex("МойИндекс") 'Создаем индекс
        idx.Fields.Append idx.CreateField("Код") 'Добавляем поле в индекс
        idx.Name = "PrimaryKey" 'Изменение имени индекса
        idx.Primary = True      'Атрибут ключа
        tdf.Indexes.Append idx  'Добавить индекс
        tdf.Indexes.Refresh     'Сохраняем индекс
        
        'Сообщение
        MsgBox "Создан новый счетчик 'Код'!", vbInformation
    Exit Sub
999:
    MsgBox Err.Description, vbCritical, "Создание поля"
    Err.Clear
End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.04.2021, 14:07
Помогаю со студенческими работами здесь

Как можно программно определить тип поля в dbf?
Подскажите пожалуйста как можно программно определить тип поля в dbf(Type и Length Decimals).

Определить пользовательский тип – структура. Поля структуры определить из формулировки задания
Определить пользовательский тип – структура. Поля структуры определить из формулировки задания. Разработать алгоритм и по нему составить...

Определить тип поля таблицы ADO
Всем привет, нужно получить в переменную тип поля таблицы. Например string, integer, memo... Пробую так ...

Как вставить в поле -тип счетчик-новое значение ?
В таблице ,например, 150 записей, поле-счетчик--&gt;field1. Как мне вставить число 151 (или Max(field1)+1) Спасибо

Как сделать счетчик для поля ID
Как сделать счетчик для поля ID, чтобы при добавлении нового поля счетчик автоматом увеличивался на +1?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru