|
#1
|
|||
|
|||
автонумерация
Здравствуйте, как сделать так, что бы при формировании запроса SQL, один из столбцов атоматически заполнился бы номерами текущих записей, некая такая нумерация!
|
#2
|
|||
|
|||
ну или хотя бы как сделать что бы можно было очистить любой из столбцов?
|
#3
|
||||
|
||||
Что то я из вопроса вообще ничего не понял!!! Чего тебе надобно сударь???
|
#4
|
|||
|
|||
что-то и я тоже ничего не понял.
Начнем с того что строки нумеруются не при выполнении запроса а при вставке новой записи. И номер присваивается именно данной строке. Кроме того надо знать с какой базой данных ты работаешь, тк средства автонумерации разные. В Paradox например надо присвоить столбцу тип автонумерации (не помню точно как называется). В более серьезных БД применяется другой механизм- триггеры. Это такие процедуры, встроенные в саму БД, которые срабатывают автоматически при наступлении какого- то события (напр. вставки новой строки) Так что же тебе надо и какая БД используется? |
#5
|
||||
|
||||
Ему надо пронумеровать каждую строчку в результате запроса. Сие к автонумерации не имеет никакого отношения. Для получения номеров строк в запросе существует несколько финтов. Вот вам пример одного из решений:
Код:
select count (test_2.id_test) as rank, test_1.id_test, test_1.string from test as test_1 inner join test as test_2 on test_1.id_test >= test_2.id_test group by test_1.id_test, test_1.string order by rank Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
|||
|
|||
ребят, все гораздо проще, я делаю поиск, соответственно в зависимости от того что ищем количество найденных записей будет разное! вот! и мне нужно просто что бы при каждом выполнении такого запроса, каждая строка была пронумерована, я специально в таблице для этого сделал пустой столбец! база акцес!
|
#7
|
|||
|
|||
Запрос надо сказать непростой. Я всю голову сломал пока понял как он работает. Трюк великолепный!
Можно решить задачу еще и так 1. в компоненте Query создаешь вычисляемый столбец (у меня это z) 2. Пишешь процедуру его вычисления (см код) 3. Все Код:
procedure TForm1.IBQuery1CalcFields(DataSet: TDataSet); begin with IBQuery1 do FieldByName('z').AsInteger:=RecNo; end; |
#8
|
|||
|
|||
уточни
Идея мне понравилась:
у меня как раз для этого и был создан один столбец "nomer". сделал так же как ты: adoquery1.FieldByName('nomer').AsInteger:=adoquery 1.RecNo; и ничего! |
#9
|
|||
|
|||
с ADO не сталкивался. Я использую Firebird.
Но думаю что и у тебя должно быть то же самое. Проделай следующее 1. Удали свой столбец Nomer. 2. Создай вычисляемый столбец Nomer нажав правую кн мыши на компоненте ADOQuery (тип столбца- Calculated) 3. У компонента ADOQuery есть метод OnCalcFields Вот сюда и впиши код. 4. В таблице DBGrid создай столбец и свяжи его с Nomer У меня на Firebird все работает. Последний раз редактировалось chainik, 04.12.2011 в 17:21. |
#10
|
|||
|
|||
трудность возникла с пунктом "4"
как это сделать? |
#11
|
|||
|
|||
по DBGrid правой кн мыши.
Раскрывается меню. Выбираешь ColumnsEditor Затем ADD NEW Щелкаешь по новому полю. В инспекторе объектов вписываешь имя поля БД (те Nomer). Тем самым связываешь его с полем базы данных. Имей в виду Если ты определил какие- либо поля в DBGrid то видны будут только они. Поэтому если ты не определял поля- то просто добавляешь все поля. Добавятся все поля перечисленные в запросе, в тч и вычисляемое. |
#12
|
|||
|
|||
В инспекторе объектов вписываешь имя поля БД (те Nomer). Тем самым связываешь его с полем базы данных.
вот это не понимаю? в каком свойстве инспектора объектов? |
#13
|
|||
|
|||
в свойстве FieldName
но если ты выбрал 'Add All Fields' то привязка выполняется автоматически для всех полей |
#14
|
|||
|
|||
Спасибо огромное, все заработало, только почему то первая цифра не "1" а "-1"???
|
#15
|
|||
|
|||
есть соображения по этому поводу?
|