powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / adFldRowID и Access
7 сообщений из 7, страница 1 из 1
adFldRowID и Access
    #32273519
nm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nm
Гость
Как в Access создать поле, чтобы в DELPHI по команде OpenSchema(siColumns, ... в колонке флагов полей (COLUMN_FLAGS) возвращаемого набора данных получать значение adFldRowID?
Зачем это нужно? Чтобы для каждой таблицы БД находить автоинкрементное или ключевое поле.
Для простых полей получаю значение COLUMN_FLAGS=106, для ключевых - 90.
Однако, adFldRowID = 100 в шестнадцатеричной и не равно...
А ключевое поле находить очень нужно...
...
Рейтинг: 0 / 0
adFldRowID и Access
    #32273535
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У OpenShem'ы есть аргумент для получения ключей и индексов.
...
Рейтинг: 0 / 0
adFldRowID и Access
    #32273596
nm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nm
Гость
Есть, siPrimaryKeys и т.п., но мне нужно определять такие поля, в которые нельзя ничего записать, т.е. типа счетчик, автоинкрементные и т.п.
Один из способов - анализ флажков столбца (COLUMN_FLAGS), возвращаемых по параметру siColumns. В ADO описаны такие значения:
adFldUnspecified = $FFFFFFFF;
adFldMayDefer = $00000002;
adFldUpdatable = $00000004;
adFldUnknownUpdatable = $00000008;
adFldFixed = $00000010;
adFldIsNullable = $00000020;
adFldMayBeNull = $00000040;
adFldLong = $00000080;
adFldRowID = $00000100;
adFldRowVersion = $00000200;
adFldCacheDeferred = $00001000;
adFldNegativeScale = $00004000;
adFldKeyColumn = $00008000;

Так вот, для обычных полей я получаю значения флажков 106, а для автоинкрементных 90 (в ACCESS). В десятичном исчислении 106 и 90.
Но объяснить 106 и 90 с помощью указанных выше значений ADO, в том числе выделить adFldRowID, не удается.
Что можно еще сделать?
...
Рейтинг: 0 / 0
adFldRowID и Access
    #32273651
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но объяснить 106 и 90 с помощью указанных выше значений ADO, в том числе выделить adFldRowID, не удается.

Тяжело работать с "хексами"? Переведи все значения в двоичную систему, сразу станет понятно.
...
Рейтинг: 0 / 0
adFldRowID и Access
    #32274700
nm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nm
Гость
Нисколько не тяжело. Дело вот в чем. В ACCESS создаю новую таблицу, одно из ее полей делаю автоинкрементным и первичным ключем, остальные обычными и даже неиндексированными. Затем в DELPHI делаю вызов OpenSchema(siColumns... и получаю флаги полей из указанных выше значений, причем флаги для индексированных полей и обычных ничем не отличаются.
А где же флаг adFldRowID для ключевого поля ? Почему его не могу получить?
...
Рейтинг: 0 / 0
adFldRowID и Access
    #32274748
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nm

В справке черным по белому написано, и не важно что на английском языке!

Note In Visual Basic, columns that have a four-byte unsigned integer (DBTYPE UI4) in the Recordset returned from the OpenSchema method on the Connection object cannot be compared to other variables

Код: plaintext
1.
2.
3.
Column name     Type indicator
 --------------------------------
 
COLUMN_FLAGS     DBTYPE_UI4


Теперь надеюсь понятно?

P.S. Отсюда можно сделать вывод, что либо ты не умеешь работать в DELPHI, либо DELPHI в этом вопросе недалеко ушел от VB. :) Кстати, дельный совет тебе дал Senin Viktor!
...
Рейтинг: 0 / 0
adFldRowID и Access
    #32274843
nm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nm
Гость
Вот, что получилось.

var
DS : TADODataSet;
.
.

k := DS.Recordset.Fields .Properties['ISAUTOINCREMENT'].Value;
.
.
if k <> 0 then...
.
k := DS.Recordset.Fields.Properties['KEYCOLUMN'].Value;
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / adFldRowID и Access
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]