Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
18 / 7 / 0
Регистрация: 21.12.2011
Сообщений: 196
1

Счетчик ключевого поля таблицы БД

22.06.2013, 11:05. Показов 2980. Ответов 6
Метки нет (Все метки)

Всем привет!!!
Пишу програмку с БД Access. Вообщем там используется два DBGrid'а. Один на Form1 другой на Form2. И реализую вставку данных из одного DBGrid во второй.

Вот код:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button2Click(Sender: TObject);
var
S: string;
i:Integer;
begin
form1.ADOTable1.First;
S:='';
for i:=0 to ADOTable1.RecordCount-1 do
begin
form1.ADOTable1.Edit;
form3.ADOTable1.Insert;
S:=Form1.DataSource1.DataSet.FieldByName('Дата').AsString;
Form3.DataSource1.DataSet.FieldByName('Дата').AsString:=S;
form1.ADOTable1.Next;
end;
form3.ShowModal;
end;
Т.е. Form1.ADOTable1 это Грид на главной форме программы. А перенос это получается своего рода отчет. Потом еще хочу добавить условие, к примеру данные за определенный диапазон дат. Но вопрос в другом. При переносе данных они вставляются во второую таблицу БД нормально. Но если удаляем данные из второй таблицы (они там не нужны, они только для отчета и хранить их не к чему) так вот, когда удаляем данные и снова нажимаем на Button2, чтобы снова "сформировать отчет" номерация строк во второй таблице в поле Key (в ключевом) начинается не с цифры 1, а к примеру если в первий табл было 15 значений, то повторная выгрузка начнется с 16 цыфры. И так постоянно, если снова очистить, то номерация пойдет с 33 цифры.

И я не знаю хорошо ли это для программы. Предел номерации же когданибудь придет или нет. И как можно это исправить? Чтобы какждый раз номерация начиналась с цыфры 1.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2013, 11:05
Ответы с готовыми решениями:

Задание индекса у ключевого поля таблицы Access
При добавлении ключевого поля в таблицу необходимо задать ему индекс(ADD CONSTRAINT), а то...

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

Изменение значения ключевого поля таблицы
Форумчане, доброго времени суток! Пользователь ошибочно ввел в ключевое поле типа счетчик ...

c#. Обновление таблицы без ключевого поля.
Доброго времени суток! С помощью следующего кода я обновляю содержимое таблицы содержимым...

6
1071 / 985 / 339
Регистрация: 07.08.2012
Сообщений: 2,778
22.06.2013, 11:37 2
Если в таблице ничего не храниться (только на время формирования отчета), то на кой ляд нужна такая таблица?
Можно, например, сформировать отчет в StringGrid или еще где в памяти.
Но если приспичило хранить данные для отчета в таблице БД, то зачем там автоинкрементное поле (счетчик)?
В этой ситуации такой столбец в таблице не нужен. Ссылаться на строки в этой таблице никто и никогда не будет.

А по вопросу о пределе счетчика, то пара триллионов значений должно хватить на многие годы.
1
18 / 7 / 0
Регистрация: 21.12.2011
Сообщений: 196
22.06.2013, 13:33  [ТС] 3
Исчерпывающий ответ))))) Спасибо.
Почему выгрузка в грид??? - Честно говоря не знаю, мне нужно потом сделать чтоб в эту таблицу выгружались данные за выбранный период, который задается двумя Picker'ами, а выгружать в Excel мне не очен нравиться. А вот про StrigGrid я видимо еще не дошол...
Да, кстати про поле счетчик я и неподумал, что его можно вообще убрать.
Выгружать в таблицу мне кажеться красивее получается. Хотя, да, других вариантов я не знаю.
0
665 / 556 / 241
Регистрация: 26.11.2012
Сообщений: 2,190
22.06.2013, 15:24 4
Цитата Сообщение от Leadmar Посмотреть сообщение
Выгружать в таблицу мне кажеться красивее получается. Хотя, да, других вариантов я не знаю.
Есть наборы компонент - для создания отчетов к ним относится и free report, Qreport и т.д. которые на основе табличных данных (не обязательно БД) в предварительно подготовленные формы выдают отчет. Так же некоторые из них позволяют сохранять в excel и в word без написания своего кода для этого.
0
18 / 7 / 0
Регистрация: 21.12.2011
Сообщений: 196
05.07.2013, 11:51  [ТС] 5
Извиняюсь что долго не отвечал.
Мне просто хотел получить результат примерно похожий как в 1С. В Delphi выводить в другую DBgrid получается довольно таки не плохо (красиво, с полосой прокрутки и прочее) Только работа программы замедляется. Е если строк будет много, бедет совсем медленно. Эксперементировал на 25 строках, заметно снижение скорости. В стрнг грид что то не получается пока))))
0
665 / 556 / 241
Регистрация: 26.11.2012
Сообщений: 2,190
05.07.2013, 12:26 6
Из первого поста я делаю вывод, что отсутствует понимание "базы данны" и СУБД. И как результат не нужные действия приводящие к проблемам и как следствие тупиковые ситуации.
Начните с обращения не к таблице, а к базе. Для этого необходимо поменять компоненту с ADOTable на ADOQuery.
ADOConnection1 <-> ADOQuery1 <-> DataSource1 <-> DBGrid1.
если потребуется вывести данные в другую грид останется создать еще ветку компонент
ADOConnection1 <-> ADOQuery2 <-> DataSource2 <-> DBGrid2.
в свойство ADOQuery2.SQL внести запрос. и при нажатии кнопки ADOQuery2.Open;
Совершенно не зачем дублировать для отчета данные в доп таблице - если они уже в базе есть. стоит их выбрать запросом, а грид их отобразить.
0
geJI<|>eP
188 / 187 / 19
Регистрация: 22.07.2010
Сообщений: 735
05.07.2013, 12:38 7
Действительно зачем брать данные из таблицы. Для этого есть Query. Мне как то пришлось делать граббер данных с аксесовских БД причем их было очень много. Нашел только такой способ быстрого чтения данных через ADOQuery1.Recordset. Довольно быстро и куча записей. Для примера 72000 записей перебрал и изменил так как мне надо за 5 мин и сразу же их переносил в sql.

А если все же хочешь работать с ADOTable то перед запуском переноса данных сделай DBGrid невидимым а потом снова видим и увидишь на сколько увеличится время переноса данных
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2013, 12:38

Помощь в написании контрольных, курсовых и дипломных работ здесь.

как узнать имя ключевого поля таблицы
Доброй ночи всем. Помогите пожалуйста, как можно узнать имя ключевого поля таблицы? И еще как...

Автоматическое копирование ключевого поля главной таблицы в подчиненную
Уважаемые форумчане, добрый день! Пытаюсь сделать базу для дальнейшей статистической обработки....

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

Ошибка значения по умолчанию при установке значением ключевого поля этой же таблицы
Господа, возможно я не смог правильно для поисковиков сформулировать, но ответа не нашел. ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.