Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > VBA+ACCESS+SORT'ировка


Автор: SectoR 5.10.2006, 00:29
Может у кого-нибудь есть примерчики smile сортировки таблиц на VBA, а именно указываем имя столбца и как сортировать (возрастание, убывание)...
Написал на Builder'е, но препод требует на VBA )) LoL! 

Автор: Akina 5.10.2006, 08:29
Где таблицы? в каком формате? В каком приложении сортировать?

У приложения (любого Офисного) есть встроенные методы сортировки - надо только указать. А на ВБА - запиши макрос вызова соотв. сортировки и посмотри полученный текст.

Автор: SectoR 5.10.2006, 19:32
Akina, в названии темы ведь указано! Что тут непонятного?
Сортировать любой столбец Access'овской таблицы (filename.mdb)
(В идеале вводить имя столбца через GUI и по этому столбцу сортировать таблицу, указав также в каком порядке: возрастание, убывание).

Я тут кое что накодил сегодня, вот:
Код

Option Compare Database


Public Sub BVCON()
Dim cn As New ADODB.Connection
cn.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;User ID=root;Extended Properties=DBQ=C:\db1.mdb;DefaultDir=C:\;Driver={Driver do Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;FILEDSN=C:\db1.mdb.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;Initial Catalog=C:\db1"
cn.Open
Dim rs As New ADODB.Recordset
rs.CursorType = adOpenStatic
rs.LockType = adLockOptimistic
rs.CursorLocation = adUseClient
rs.Open "table1", cn
rs.Sort = "numbers"
rs.Update
MsgBox rs.GetString


End Sub



Результат сортировки выводится в MessageBox, а в таблице все остается как было! Кароче, как мне применительно к таблице то же самое сделать?

Автор: Akina 5.10.2006, 22:18
SectoR
Пойми, пожалуйста, одну простую вещь - в таблице реляционной, нефайловой, базы данных понятие сортировки НЕ СУЩЕСТВУЕТ.
Существует понятие сортировки при выводе (на экран, принтер) либо обработке таблицы - однако это уже не таблица, а выборка из нее, возможно содержащая все записи.

Применительно к твоему случаю - достаточно построить строку SQL-запроса и использовать ее как источник данных рекордсета:

Код

strSQL = "SELECT * FROM MyTable ORDER BY " & strFieldNameSortBy & " " & IIF(boolSortingOrder, "ASC", "DESC")
Set db = CurrentDB
Set rst = db.OpenRecordset strSQL

Далее полученные в рекордсет записи обрабатываешь поштучно, скидывая инфу в переменную, а ее потом выводишь на экран
Код

rst.MoveFirst
strData = ""
While Not rst.EOF
   strData = strData & rst!Field1 & " " & rst!Filed2 & vbNewLine
   rst.MoveNext
Wend
MsgBox strData


Автор: SectoR 5.10.2006, 22:28
Нужно без использования SQL! Ладно - что нибудь придумаю...

Автор: Germes 6.10.2006, 00:13
Люди. Кто-нибудь знает можно ли использовать базы сделаные в acsess под юникс?

Автор: Cyric 6.10.2006, 14:41
Цитата(Germes @ 6.10.2006,  00:13)
Люди. Кто-нибудь знает можно ли использовать базы сделаные в acsess под юникс?

http://mdbtools.sourceforge.net/

Автор: SectoR 6.10.2006, 20:00
Цитата(Germes @  6.10.2006,  00:13 Найти цитируемый пост)
юди. Кто-нибудь знает можно ли использовать базы сделаные в acsess под юникс?

Ну а почему нет!

Автор: likhobory 7.10.2006, 01:19
возможно речь об OrderByOn/OrderBy, но опять же применительно к форме/отчету

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)