![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В Access есть внутренняя сортировка?
JJ © (2012-02-11 19:47:00)Здравствуйте!
Проблема следующая. Есть БД Access и в ней таблица. В таблице есть столбец «СolNumber». Когда я загружаю и смотрю эту таблице то данные автоматически упорядочены по столбцу ColNumber. А когда я загружаю их через ADOQuerty то получается следующее:
FrmMain.ADOQuery1.First;
I:=0;
While not FrmMain.ADOQuery1.Eof do Begin
S:=FrmMain.ADOQuery1.Fields.FieldByName('PoleName').asstring;
a:=FrmMain.ADOQuery1.RecNo;
FrmMain.ADOQuery1.Next;
End;
Так вот казалось бы записи RecNo будут идти подряд. В действительности "a" присваивается значение 1,2,3,4, а потом 28,29, а лишь потом 5,6,7,8???????Почему так происходит? Мне казалось что номера записей должны быть упорядочены и RecNo должен в цикле увеличиваться на 1, а в действительности этого нет. Т.е. есть какая-то внутренняя сортировка? Как тогда «пересортировать таблицу» в соответствии с RecNo? Или есть какой-нибудь другой параметр, который можно было бы использовать вместо RecNo?
Да и еще одно.
Когда я перемещаюсь по записям в таблице через Access, там то запись внизу нормально увеличивались на единицу?
MsGuns (2012-02-13 11:43:00) [1]Он чё, эксел захотел из акцеса сделать ?
mamon (2012-02-13 11:02:00) [2]Говоришь что из DBGrid’а ты выделил диапазон строк и хранишь их в буфере, непонял как ты это зделал но как то так это будет...
Создай в таблице индексное поле (У меня по умолч. "Код")
Цикл от начала диапазона до конца выполнить
If ADOQuery1.Locate('Код', 'Значения', [loPartialKey]) then
Begin
ADOQuery2.Insert;
ADOQuery2поля1.AsValue:= ADOQuery1поля1.AsValue;
...
...
ADOQuery2.Post;
ADOQuery1.Delete;
End;
Inovet (2012-02-12 18:56:00) [3]> [15] JJ (12.02.12 18:26)
> что необходимо поставить
Справка есть к Tms Adv DB Grid? Вней посмотреть что это за
DBAdvGrid1.SelectRows(i,1)
функция что ли? Что принимает, что возвращает? Справки нет - смотреть в примерах. Примеров нет - смотреть в исходниках. Исходников нет - догадаться по прототипу.
Плохиш (2012-02-12 18:46:00) [4]
> что необходимо
Нанять программиста.
JJ (2012-02-12 18:26:00) [5]Так Все таки....
GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
В моем компоненте Tms Adv DB Grid этого нет! Перечисленные два варианта:
DBAdvGrid1.rows[i]
DBAdvGrid1.SelectRows(i,1)
дают ошибку при выполнеиии программы... что необходимо поставить
GotoBookmark(pointer(???));
mamon (2012-02-12 17:00:00) [6]Читая от начла немного запутался...
Если хочешь свою сортировку то вот:
ADOQuery1.Sort:= 'имя_поля'
Если хочешь вырезать диапазон то как то ты в не ту сторону копаешь...
Сергей М. (2012-02-12 16:37:00) [7]Похоже программирование - это не твоё
JJ (2012-02-12 14:26:00) [8]Спасибо! Но возникла еще одна проблема я пользуюсь неDBGrid а TMS DbAdvGrid в нем нет как написано в справке по SelectedRows:
GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
вот этого там нет DBGrid1.SelectedRows.Items[i]
но есть DBGrid1.rows[i]
или DBAdvGrid1.SelectRows(i,1)
Но если я ставлю 1 то получаю ошибку при выполнении программы...а второй вариант вообще не работает
Может быть кто-нить сталкивался?
sniknik (2012-02-12 00:01:00) [9]да, как ни удивительно, но "фокус" сработает и с после упомянутым GotoBookmark, и вообще по любому оператору/методу/....
sniknik (2012-02-11 23:59:00) [10]поясняю...
пишешь в дельфе интересующее тебя понятие, например упомянутый SelectedRows, встаеш на него курсором, нажимаешь Ctrl+F1, ... наслаждаешься развернутым ответом, иногда с примером.
JJ (2012-02-11 23:53:00) [11]не вижу....поясните пож-ста
Сергей М. (2012-02-11 23:52:00) [12]
> связать строки которые выделены в DBGRID с набором данных
Ты не поверишь - каждая закладка в этом списке и есть та самая связь.
Переходишь по закладке (GotoBookmark) - соотв.запись в НД становится активной
sniknik (2012-02-11 23:50:00) [13]> как перебрать строки в соответствии со строками выделенными в DbGrid!!!
а что говорит по этому поводу Кальтенбруннер? ээээ т.е. справка?
sniknik (2012-02-11 23:48:00) [14]> но учитывая, что он может идти не последовательно (см. 1 пост)
а давай не будем бред учитывать (см. 2 пост)
JJ (2012-02-11 23:47:00) [15]Написал и призадумался…
SelectedRows – да….но мне необходимо связать строки которые выделены в DBGRID с набором данных. Т.е. SelectedRows позволяет перебрать строки в DBGRID но не позволяет занести туда данные (т.е. DbGrid.Cells[1,1,]:=’Привет’ – не работает). А DataSource – позволяет занести туда данные черех DataSet но я непонимаю как перебрать строки в соответствии со строками выделенными в DbGrid!!!
JJ (2012-02-11 23:42:00) [16]О как супер! буду пробовать
Сергей М. (2012-02-11 23:36:00) [17]
> но так как речь идет о диапазоне, то записи необходимо перебрать
в св-ве DBGrid.SelectedRows хранится список закладок на все записи , выделенные юзером в дан.момент в гриде - вот его и "перебирай", на то он и существует.
JJ (2012-02-11 23:03:00) [18]Я объясню зачем мне оно нужно.
У таблице привязана кнопка «Вырезать»
Пользователь в DbGrid-е может вырезать не одну ячейку а диапазон (в т.ч. по строкам).
Так вот я занес эти данные из таблицы DbGrid в буфер а теперь мне необходимо в этом диапазоне БД данные очистить. Если бы можно было выделить ТОЛЬКО 1 строку, то это можно было бы сделать через DataSet источника DataSource по активной записи, но так как речь идет о диапазоне, то записи необходимо перебрать вот я и использую RecNO - но учитывая, что он может идти не последовательно (см. 1 пост) – то, как тогда сделать я не знаю…..Можете помочь?
sniknik (2012-02-11 21:35:00) [19]> а в действительности этого нет.
бред.
> Как тогда «пересортировать таблицу» в соответствии с RecNo?
RecNo в ADO расчетное значение, и значит будет "правильное" при любой сортировке локального рекордсета.
другое дело использовать его не совсем правильно...
> там то запись внизу нормально увеличивались на единицу?
не нормально, а ОБЫЧНО, и только потому, что всем плевать на значение инкремента, оставляют дефаултный = 1, но поставь -1 например оно "там внизу" будет уменьшаться.