Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

В 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.072 c
15-1335263720
Anikey
2012-04-24 14:35
2013.03.22
Turbo Profiler


15-1351715402
Юрий
2012-11-01 00:30
2013.03.22
С днем рождения ! 1 ноября 2012 четверг


2-1334946908
Женя
2012-04-20 22:35
2013.03.22
Ошибка при попытке прочитать файл


4-1258536064
mambo
2009-11-18 12:21
2013.03.22
Градиентный прогрес в отдельном потоке


15-1337160836
Инокентий
2012-05-16 13:33
2013.03.22
Как получить почту с гугла 3 людям?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский