powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6: Объединение ADODB.Recordset
5 сообщений из 5, страница 1 из 1
VB6: Объединение ADODB.Recordset
    #36733713
ku3ia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.

Есть объект ADODB.Recordset, такого вот содержания:
zzzZZZ
zzzZZZ
zzzZZZ
N/A
N/A
N/A
N/A
N/A
aaaAAA
aaaAAA
aaaAAA

Необходимо посортировать данные таким образом, чтобы было так:
zzzZZZ
zzzZZZ
zzzZZZ
aaaAAA
aaaAAA
aaaAAA
N/A
N/A
N/A
N/A
N/A

Стандартный Sort не поддходит, т.к. N/A считает за строку, начинающуюся с 'N'.
Заполняется этот Recordset примерно следующим образом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
  Set rsRecordset = CreateObject("ADODB.Recordset")
  With rsRecordset
    .Fields.Append "RecordID", adInteger
    .Fields.Append "Description", adVarWChar,  255 
    .Open
  End With
  
  For i =  0  To  10 
    With rsRecordset
      .AddNew
      .Update "RecordID", i
      If i >=  0  And i <=  2  Then
        strTemp = "aaaAAA"
      ElseIf i >=  3  And i <=  7  Then
        strTemp = "N/A"
      Else
        strTemp = "zzzZZZ"
      End If
      .Update "Description", strTemp
    End With
  Next

Я вижу два варианта:
1) Создаем пустой Recordset такой же структуры и делаем фильтр на главный:
Код: plaintext
.Filter = "Description <> 'N/A'"
Проходимся по каждой записи и вставляем в новый. Затем меняем фильтр на
Код: plaintext
.Filter = "Description = 'N/A'"
и делаем тоже самое
2) Примерно такой:
Код: plaintext
1.
2.
3.
4.
  rsRecordset.Filter = "Description <> 'N/A'"
  Set rsWithNA = rsRecordset
  rsRecordset.Filter = "Description = 'N/A'"
  Set rsWithOutNA = rsRecordset
Но в таком случае мы получаем 2 Recordset'a, а вернуть нужно один, и чтобы он назывался
rsRecordset (по факту это все в функции обрабатывается, а результатом ее работы является Recordset).

Первый случай не слишком хорош, т.к. имеет место большое количество записей, а во втором возник вопрос:
как объеденить два Recordset в один и можно ли?

Заранее благодарен
...
Рейтинг: 0 / 0
VB6: Объединение ADODB.Recordset
    #36733720
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ku3ia,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 If i >=  0  And i <=  2  Then
        strTemp = "aaaAAA"
      ElseIf i >=  3  And i <=  7  Then
        strTemp = "zzzZZZ"
      Else
        strTemp = "N/A"
      End If
а почему бы просто не поменять местами?
...
Рейтинг: 0 / 0
VB6: Объединение ADODB.Recordset
    #36733721
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ku3ia,
то есть так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 If i >=  0  And i <=  2  Then
        strTemp ="zzzZZZ" 
      ElseIf i >=  3  And i <=  7  Then
        strTemp = "aaaAAA"
      Else
        strTemp = "N/A"
      End If
...
Рейтинг: 0 / 0
VB6: Объединение ADODB.Recordset
    #36733765
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ku3iaСтандартный Sort не поддходит, т.к. N/A считает за строку, начинающуюся с 'N'.

Вообще, задача не очень понятна.
Итак, если рекордсет заполняется ВРУЧНУЮ, почему сразу не вводить еще одно поле, адаптированное к сортировке и не сортировать по нему? Если у вас всего три вида данных, так и ставьте там 1,2,3. Если больше - дублируйте туда основное значение, а вместо N/A пишите NULL.

Если рекордсет заполняется из базы - тогда сортировку нужно сделать прямо в запросе.
...
Рейтинг: 0 / 0
VB6: Объединение ADODB.Recordset
    #36734513
ku3ia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proku3iaСтандартный Sort не поддходит, т.к. N/A считает за строку, начинающуюся с 'N'.

Вообще, задача не очень понятна.
Итак, если рекордсет заполняется ВРУЧНУЮ, почему сразу не вводить еще одно поле, адаптированное к сортировке и не сортировать по нему? Если у вас всего три вида данных, так и ставьте там 1,2,3. Если больше - дублируйте туда основное значение, а вместо N/A пишите NULL.

Если рекордсет заполняется из базы - тогда сортировку нужно сделать прямо в запросе.
Спасибо за пост. Сделал так как вы посоветовали, добавил еще одно поле, и получилась сортировка:
Код: plaintext
1.
2.
  'Description Sort: ASC|DESC
  .Sort = "Weight ASC, Description DESC"
где Wight = 1, если Description <> N/A, и 10, если = N/A.

Так быстрее и проще всего. Спасибо. Тему можно закрывать
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6: Объединение ADODB.Recordset
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]