Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

В Access есть внутренняя сортировка?   Найти похожие ветки 

 
JJ   (2012-02-11 19:47) [0]

Здравствуйте!
Проблема следующая. Есть БД 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, там то запись внизу нормально увеличивались на единицу?


 
sniknik ©   (2012-02-11 21:35) [1]

> а в действительности этого нет.
бред.

> Как тогда «пересортировать таблицу» в соответствии с RecNo?
RecNo в ADO расчетное значение, и значит будет "правильное" при любой сортировке локального рекордсета.
другое дело использовать его не совсем правильно...

> там то запись внизу нормально увеличивались на единицу?
не нормально, а ОБЫЧНО, и только потому, что всем плевать на значение инкремента, оставляют дефаултный = 1, но поставь -1 например оно "там внизу" будет уменьшаться.


 
JJ   (2012-02-11 23:03) [2]

Я объясню зачем мне оно нужно.
У таблице привязана кнопка «Вырезать»
Пользователь в DbGrid-е может вырезать не одну ячейку а диапазон (в т.ч. по строкам).
Так вот я занес эти данные из таблицы DbGrid  в буфер а теперь мне необходимо в этом диапазоне БД данные очистить. Если бы можно было выделить ТОЛЬКО 1 строку, то это можно было бы сделать через DataSet источника DataSource по активной записи, но так как речь идет о диапазоне, то записи необходимо перебрать вот я и использую RecNO -  но учитывая, что он может идти не последовательно (см. 1 пост) – то, как тогда сделать я не знаю…..Можете помочь?


 
Сергей М. ©   (2012-02-11 23:36) [3]


> но так как речь идет о диапазоне, то записи необходимо перебрать


в св-ве DBGrid.SelectedRows хранится список закладок на все записи , выделенные юзером в дан.момент в гриде - вот его и "перебирай", на то он и существует.


 
JJ   (2012-02-11 23:42) [4]

О как супер! буду пробовать


 
JJ   (2012-02-11 23:47) [5]

Написал и призадумался…
SelectedRows – да….но мне необходимо связать строки которые выделены в DBGRID с набором данных. Т.е. SelectedRows позволяет перебрать строки в DBGRID но не позволяет занести туда данные (т.е. DbGrid.Cells[1,1,]:=’Привет’ – не работает). А DataSource – позволяет занести туда данные черех DataSet но я непонимаю как перебрать строки  в соответствии со строками выделенными в DbGrid!!!


 
sniknik ©   (2012-02-11 23:48) [6]

> но учитывая, что он может идти не последовательно (см. 1 пост)
а давай не будем бред учитывать (см. 2 пост)


 
sniknik ©   (2012-02-11 23:50) [7]

> как перебрать строки  в соответствии со строками выделенными в DbGrid!!!
а что говорит по этому поводу Кальтенбруннер? ээээ т.е. справка?


 
Сергей М. ©   (2012-02-11 23:52) [8]


> связать строки которые выделены в DBGRID с набором данных


Ты не поверишь - каждая закладка в этом списке и есть та самая связь.
Переходишь по закладке (GotoBookmark) - соотв.запись в НД становится активной


 
JJ   (2012-02-11 23:53) [9]

не вижу....поясните пож-ста


 
sniknik ©   (2012-02-11 23:59) [10]

поясняю...
пишешь в дельфе интересующее тебя понятие, например упомянутый SelectedRows, встаеш на него курсором, нажимаешь Ctrl+F1, ... наслаждаешься развернутым ответом, иногда с примером.


 
sniknik ©   (2012-02-12 00:01) [11]

да, как ни удивительно, но "фокус" сработает и с после упомянутым GotoBookmark, и вообще по любому оператору/методу/....


 
JJ   (2012-02-12 14:26) [12]

Спасибо! Но возникла еще одна проблема я пользуюсь неDBGrid а TMS DbAdvGrid в нем нет как написано в справке по SelectedRows:

GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));

вот этого там нет DBGrid1.SelectedRows.Items[i]

но есть DBGrid1.rows[i]
или DBAdvGrid1.SelectRows(i,1)
Но если я ставлю 1 то получаю ошибку при выполнении программы...а второй вариант вообще не работает
Может быть кто-нить сталкивался?


 
Сергей М. ©   (2012-02-12 16:37) [13]

Похоже программирование - это не твоё


 
mamon   (2012-02-12 17:00) [14]

Читая от начла немного запутался...
Если хочешь свою сортировку то вот:
ADOQuery1.Sort:= "имя_поля"

Если хочешь вырезать диапазон то как то ты в не ту сторону копаешь...


 
JJ   (2012-02-12 18:26) [15]

Так Все таки....

GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));

В моем компоненте Tms Adv DB Grid этого нет! Перечисленные два варианта:

DBAdvGrid1.rows[i]
DBAdvGrid1.SelectRows(i,1)


дают ошибку при выполнеиии программы... что необходимо поставить
GotoBookmark(pointer(???));


 
Плохиш ©   (2012-02-12 18:46) [16]


> что необходимо

Нанять программиста.


 
Inovet ©   (2012-02-12 18:56) [17]

> [15] JJ   (12.02.12 18:26)
> что необходимо поставить

Справка есть к Tms Adv DB Grid? Вней посмотреть что это за

DBAdvGrid1.SelectRows(i,1)

функция что ли? Что принимает, что возвращает? Справки нет - смотреть в примерах. Примеров нет - смотреть в исходниках. Исходников нет - догадаться по прототипу.


 
mamon   (2012-02-13 11:02) [18]

Говоришь что из DBGrid’а ты выделил диапазон строк и хранишь их в буфере, непонял как ты это зделал но как то так это будет...
Создай в таблице индексное поле (У меня по умолч.  "Код")
Цикл от начала диапазона до конца выполнить
 If ADOQuery1.Locate("Код", "Значения", [loPartialKey]) then
   Begin
    ADOQuery2.Insert;
    ADOQuery2поля1.AsValue:= ADOQuery1поля1.AsValue;
    ...
    ...
    ADOQuery2.Post;
    ADOQuery1.Delete;
   End;


 
MsGuns ©   (2012-02-13 11:43) [19]

Он чё, эксел захотел из акцеса сделать ?



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.048 c
15-1344957186
Рекрут
2012-08-14 19:13
2013.03.22
Безопасность Веб-Мани


15-1338304541
Bluejohn
2012-05-29 19:15
2013.03.22
Объясните.


3-1276194806
Дмитрий Белькевич
2010-06-10 22:33
2013.03.22
Еще вопрос по оптимизации запроса.


15-1338975632
Pro_Docent
2012-06-06 13:40
2013.03.22
Кто хочет немного физики?


15-1344630602
Юрий
2012-08-11 00:30
2013.03.22
С днем рождения ! 11 августа 2012 суббота