Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.12.2011, 17:51
Den-is Den-is вне форума
Новичок
 
Регистрация: 07.10.2011
Сообщения: 66
Репутация: 10
По умолчанию автонумерация

Здравствуйте, как сделать так, что бы при формировании запроса SQL, один из столбцов атоматически заполнился бы номерами текущих записей, некая такая нумерация!
Ответить с цитированием
  #2  
Старый 03.12.2011, 15:21
Den-is Den-is вне форума
Новичок
 
Регистрация: 07.10.2011
Сообщения: 66
Репутация: 10
По умолчанию

ну или хотя бы как сделать что бы можно было очистить любой из столбцов?
Ответить с цитированием
  #3  
Старый 03.12.2011, 20:48
Аватар для Delphist
Delphist Delphist вне форума
Новичок
 
Регистрация: 10.12.2010
Адрес: Курган
Сообщения: 68
Репутация: 6002
По умолчанию

Что то я из вопроса вообще ничего не понял!!! Чего тебе надобно сударь???
Ответить с цитированием
  #4  
Старый 03.12.2011, 23:14
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

что-то и я тоже ничего не понял.
Начнем с того что строки нумеруются не при выполнении запроса а при вставке новой записи. И номер присваивается именно данной строке.
Кроме того надо знать с какой базой данных ты работаешь, тк средства автонумерации разные.
В Paradox например надо присвоить столбцу тип автонумерации (не помню точно как называется).
В более серьезных БД применяется другой механизм- триггеры. Это такие процедуры, встроенные в саму БД, которые срабатывают автоматически при наступлении какого- то события (напр. вставки новой строки)

Так что же тебе надо
и какая БД используется?
Ответить с цитированием
  #5  
Старый 04.12.2011, 02:20
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ему надо пронумеровать каждую строчку в результате запроса. Сие к автонумерации не имеет никакого отношения. Для получения номеров строк в запросе существует несколько финтов. Вот вам пример одного из решений:
Код:
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  
Старый 04.12.2011, 13:37
Den-is Den-is вне форума
Новичок
 
Регистрация: 07.10.2011
Сообщения: 66
Репутация: 10
По умолчанию

ребят, все гораздо проще, я делаю поиск, соответственно в зависимости от того что ищем количество найденных записей будет разное! вот! и мне нужно просто что бы при каждом выполнении такого запроса, каждая строка была пронумерована, я специально в таблице для этого сделал пустой столбец! база акцес!
Ответить с цитированием
  #7  
Старый 04.12.2011, 16:09
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

Запрос надо сказать непростой. Я всю голову сломал пока понял как он работает. Трюк великолепный!
Можно решить задачу еще и так
1. в компоненте Query создаешь вычисляемый столбец (у меня это z)
2. Пишешь процедуру его вычисления (см код)
3. Все

Код:
procedure TForm1.IBQuery1CalcFields(DataSet: TDataSet);
begin
with IBQuery1 do
    FieldByName('z').AsInteger:=RecNo;
end;
Ответить с цитированием
  #8  
Старый 04.12.2011, 16:51
Den-is Den-is вне форума
Новичок
 
Регистрация: 07.10.2011
Сообщения: 66
Репутация: 10
По умолчанию уточни

Идея мне понравилась:
у меня как раз для этого и был создан один столбец "nomer".
сделал так же как ты:

adoquery1.FieldByName('nomer').AsInteger:=adoquery 1.RecNo;
и ничего!
Ответить с цитированием
  #9  
Старый 04.12.2011, 17:19
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

с ADO не сталкивался. Я использую Firebird.
Но думаю что и у тебя должно быть то же самое.
Проделай следующее

1. Удали свой столбец Nomer.
2. Создай вычисляемый столбец Nomer нажав правую кн мыши
на компоненте ADOQuery (тип столбца- Calculated)
3. У компонента ADOQuery есть метод OnCalcFields
Вот сюда и впиши код.
4. В таблице DBGrid создай столбец и свяжи его с Nomer

У меня на Firebird все работает.

Последний раз редактировалось chainik, 04.12.2011 в 17:21.
Ответить с цитированием
  #10  
Старый 04.12.2011, 17:46
Den-is Den-is вне форума
Новичок
 
Регистрация: 07.10.2011
Сообщения: 66
Репутация: 10
По умолчанию

трудность возникла с пунктом "4"
как это сделать?
Ответить с цитированием
  #11  
Старый 04.12.2011, 17:58
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

по DBGrid правой кн мыши.
Раскрывается меню.
Выбираешь ColumnsEditor
Затем ADD NEW
Щелкаешь по новому полю. В инспекторе объектов вписываешь имя поля БД (те Nomer). Тем самым связываешь его с полем базы данных.

Имей в виду
Если ты определил какие- либо поля в DBGrid то видны будут только они.
Поэтому если ты не определял поля- то просто добавляешь все поля.
Добавятся все поля перечисленные в запросе, в тч и вычисляемое.
Ответить с цитированием
  #12  
Старый 04.12.2011, 18:11
Den-is Den-is вне форума
Новичок
 
Регистрация: 07.10.2011
Сообщения: 66
Репутация: 10
По умолчанию

В инспекторе объектов вписываешь имя поля БД (те Nomer). Тем самым связываешь его с полем базы данных.
вот это не понимаю?
в каком свойстве инспектора объектов?
Ответить с цитированием
  #13  
Старый 04.12.2011, 18:50
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

в свойстве FieldName

но если ты выбрал 'Add All Fields' то привязка выполняется автоматически
для всех полей
Ответить с цитированием
  #14  
Старый 04.12.2011, 20:33
Den-is Den-is вне форума
Новичок
 
Регистрация: 07.10.2011
Сообщения: 66
Репутация: 10
По умолчанию

Спасибо огромное, все заработало, только почему то первая цифра не "1" а "-1"???
Ответить с цитированием
  #15  
Старый 05.12.2011, 10:35
Den-is Den-is вне форума
Новичок
 
Регистрация: 07.10.2011
Сообщения: 66
Репутация: 10
По умолчанию

есть соображения по этому поводу?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter