powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вставка Recordset
24 сообщений из 49, страница 2 из 2
Вставка Recordset
    #39071710
Фотография i45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&ДейлНе совсем понятно, зачем 2 рекордсета? Второму присвоить значение первого или просто в оба рекорда записать одинаковые запросы?

Разные запросы - для тех полей и в том порядке, которые Вы хотите. Вы же хотите разные.
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071734
Фотография i45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейл,

Для несмежных диапазонов можно возвращать индивидуальные рекордсеты, состоящие из одного поля. Это может оказаться быстрее, чем организация циклов.
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071783
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял, но тогда останется проблема как не трогать определенные записи? Сейчас сделано с циклом но не совсем правильно работает именно в плане вставки пустой строки
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071797
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейлно не совсем правильно работает именно в плане вставки пустой строкиЕще бы. Вы в крайности какие-то входите. То у Вас строка вставляется внутри цикла по столбцам, то Вы вообще за оба цикла её вынесли, когда я советовал перенести её в цикл по строкам. учитесь отладкой что ли пользоваться.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
rs.MoveLast
rs.MoveFirst
 For lr = 1 To rs.RecordCount
         Selection.EntireRow.Insert 'правильное место. Вставится один раз на каждую строку Recordset
         For lc = 1 To rs.Fields.Count
 Select Case lc
     Case 1: lcol = 1
     Case 2: lcol = 2
     Case 3: lcol = 3
     Case 4: lcol = 4
     Case 5: lcol = 5
     Case 6: lcol = 6
     Case 7: lcol = 7
     Case 8: lcol = 8
     Case 9: lcol = 9
     Case 10: lcol = 11
     
     End Select
                     ea.Sheets(1).Range("start").Cells(lr, lcol).Value = rs.Fields(rs.Fields(lc - 1).Name)
                    Next lc
  rs.MoveNext
    Next lr
     'Selection.EntireRow.Insert'вставиться ОДИН РАЗ. Ведь выполняется после обоих циклов
End Sub
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071805
Фотография i45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&ДейлПонял, но тогда останется проблема как не трогать определенные записи? Сейчас сделано с циклом но не совсем правильно работает именно в плане вставки пустой строки

Неясно, что такое "определенные записи" и что значит их не трогать.
Циклы не нужны, для этого можно использовать запросы и метод CopyFromRecordset.
Вам требуется вставка пустой строки посреди рекордсета? Вставьте ее после отработки метода туда, куда хотите. Или сделайте запрос так, чтобы он возвратил пустую строку где Вы желаете.
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071819
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist,

Я вставлял ее туда, но там она тоже не так работает)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
rs.MoveLast
rs.MoveFirst
 For lr = 1 To rs.RecordCount
     Selection.EntireRow.Insert
          For lc = 1 To rs.Fields.Count
 Select Case lc
     Case 1: lcol = 1
     Case 2: lcol = 2
     Case 3: lcol = 3
     Case 4: lcol = 4
     Case 5: lcol = 5
     Case 6: lcol = 6
     Case 7: lcol = 7
     Case 8: lcol = 8
     Case 9: lcol = 9
     Case 10: lcol = 11
      End Select
     'Selection.EntireRow.Insert
                     ea.Sheets(1).Range("start").Cells(lr, lcol).Value = rs.Fields(rs.Fields(lc - 1).Name)
                    Next lc
'           Selection.EntireRow.Insert
  rs.MoveNext
    Next lr
    'Selection.EntireRow.Insert
 '  Selection.EntireRow.Insert Shift:=xlUp, CopyOrigin:=xlFormatFromLeftOrAbove
  End Sub


Результат на скрине
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071822
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начальный вид документа
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071824
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь за размеры скринов.
Вот те строки которые покрашены должны опускаться но этого не происходит
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071827
Фотография i45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&ДейлИзвиняюсь за размеры скринов.
Вот те строки которые покрашены должны опускаться но этого не происходит

У Вас нет покрашенных строк, вместо них - покрашенные отдельные ячейки.
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071829
Фотография i45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейл,

И зачем в коде Selection? Надо при обработке кода успеть что-то выделить??
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071834
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейлно там она тоже не так работаетТак Вы скажите как надо. Чего Вы с нами в угадай-ку играете? Она работает ровно так, как сами запрограммировали.
1. Где ячейка с именем "start"? Какое в ней значение?
2. Строку Вы вставляете в ячейку с выделенным диапазоном(Selection.EntireRow.Insert). Зачем? Ведь запись идет не в выделенные ячейки, а на основании адресации в цикле.
3. В отчете уже есть пустые строки. Вы их никак не определяете. Зачем они тогда нужны?
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071852
Фотография i45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейл,

А, понял, Вам надо итоговую часть сохранить?
А Вы ее вообще уберите и после этого закодируйте.
:0)
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071862
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ячейка "start" это A9 она пустая, других способов вставить пустую строку я не нашел поэтому Selection.EntireRow.Insert , наличие или отсутствие пустых выше окрашенных ячеек не меняет картины
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071864
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
i45Чип&Дейл,

А, понял, Вам надо итоговую часть сохранить?
А Вы ее вообще уберите и после этого закодируйте.
:0)
как вариант конечно можно
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071869
Фотография i45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейл,

А зачем Вам Selection?
В принципе, если нет желания кодировать итоговую часть, можно вернуть число записей из Вашего рекордсета и сразу вставить столько пустых строк, сколько записей в нем. А потом - CopyFromRecordset (по-моему, этот метод сам строки не вставляет, а лишь кидает результат на страницу).
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071876
Фотография i45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейл,

Нет смысла делать сто вставок по одной строке, если можно это сделать один только раз и сразу для ста строк.
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071878
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
i45Чип&Дейл,

А зачем Вам Selection?
В принципе, если нет желания кодировать итоговую часть, можно вернуть число записей из Вашего рекордсета и сразу вставить столько пустых строк, сколько записей в нем. А потом - CopyFromRecordset (по-моему, этот метод сам строки не вставляет, а лишь кидает результат на страницу).

Сейчас попробую)
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071893
Фотография i45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейлi45Чип&Дейл,

А зачем Вам Selection?
В принципе, если нет желания кодировать итоговую часть, можно вернуть число записей из Вашего рекордсета и сразу вставить столько пустых строк, сколько записей в нем. А потом - CopyFromRecordset (по-моему, этот метод сам строки не вставляет, а лишь кидает результат на страницу).

Сейчас попробую)

Для узнавания числа записей в рекордсете цикл не нужен.
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071906
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но один цикл ведь будет для вставки количества строк до тех пор пока не достигнем значения rs.RecordCount, верно?
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071926
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейл,
перед циклом:
Код: vbnet
1.
ea.Sheets(1).Range("start").Cells(1, 1).Resize(rs.RecordCount).EntireRow.Insert
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071927
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И тогда не надо будет вставлять строки внутри цикла. Вставили один раз и все.
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071949
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если делаю без цикла то картина не меняется
Код: vbnet
1.
2.
3.
4.
ea.Sheets(1).Range("A9").Cells(1, 1).Resize(rs.RecordCount).EntireRow.Insert
   Set rs1 = db.OpenRecordset("Select t1.p1 FROM t1 )
        ea.Sheets(1).Range("A9").CopyFromRecordset rs
    ea.Sheets(1).Range("K9").CopyFromRecordset rs1


Если делаю вот так
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
For lr = 1 To rs.RecordCount
    Rows("9:9").Insert Shift:=xlUp
 Next lr
 Set rs1 = db.OpenRecordset("Select SPR_ProizProgramm.period FROM SPR_ProizProgramm Where SPR_ProizProgramm.SCHIFPR='" & s & "' and SPR_ProizProgramm.vid_usl='001' ")
    
    ea.Sheets(1).Range("A9").CopyFromRecordset rs
    ea.Sheets(1).Range("K9").CopyFromRecordset rs1


Вставляет все что нужно и не портит Итог, но бывает выходит ошибка run-time error '1004 method 'rows' of object ' _global' failed
Где я опять неправильно делаю? Выделяет строку Rows("9:9").Insert Shift:=xlDown
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071979
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейл,
Может у Вас rs.RecordCount возвращает 1, откуда знать? Вы проверьте:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim lr as long
lr = rs.RecordCount
msgbox lr
rs.MoveLast
rs.MoveFirst
lr = rs.RecordCount
msgbox lr
ea.Sheets(1).Range("A9").Cells(1, 1).Resize(lr).EntireRow.Insert
Set rs1 = db.OpenRecordset("Select t1.p1 FROM t1 )
ea.Sheets(1).Range("A9").CopyFromRecordset rs
ea.Sheets(1).Range("K9").CopyFromRecordset rs1


Сама вставка строк работает и проблема может быть только в том, что Вы перед вычислением строк Recordset не переходите на последнюю запись и как следствие всегда возвращается 1.
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071988
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Действительно проблема была в отсутствии перехода. Спасибо большое за помощь, хорошего дня Вам и денег побольше)
...
Рейтинг: 0 / 0
24 сообщений из 49, страница 2 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вставка Recordset
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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