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

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Dim dbs As DAO.Database
Dim rs As DAO.Recordset
Set dbs = DAO.OpenDatabase ("C:\test.mdb")
Set rs=dbs.OpenRecordset("Select t1.p1, t1.p2, t1.p4, t1.p6, t1.p7, t1.p10 from t1")
Set ea=CreateObject("Excel.Application")
ea.Visible=true
Set ed=ea.Workbooks.Open("C:\test1.xls")



А вот дальше проблема возникает, как вставить записи из рекорда по порядку как они в нем записаны? и как вставить записи из рекорда в нужном мне порядке?
Например, в первом случае нужно вставить поля p1,p2,p4,p6,p7,p10 в A1,B1,C1,D1,E1 соответственно, а во втором случае эти же поля нужно вставить в A1,С1,D1,F1,G1
...
Рейтинг: 0 / 0
Вставка Recordset
    #39069789
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейл,

Есть у объекта Range метод CopyFromRecordset. Им можно вставить данные в том порядке, в котором они получены.
А для вставки в несмежные диапазоны остается только перебор записей и вставка в ячейки последовательно.
...
Рейтинг: 0 / 0
Вставка Recordset
    #39069799
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перебор я так понимаю делать через do while? а как указывать нужные мне ячейки в данном случае?
...
Рейтинг: 0 / 0
Вставка Recordset
    #39069828
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейл,

Тут я не очень знаю какие у Вас данные. В общем случае делаете цикл по строкам Recordset. Что-то типа:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
For lr = 1 To lRecCnt
     For lc = 1 To objRecSet.Fields.Count
     select case lc
     case 1:lcol = 1
     case 2:lcol = 3
     case 3:lcol = 4
     case 4:lcol = 6
     case 5:lcol = 7
     end select
         Cells(lr, lcol).Value = objRecSet.Fields(objRecSet.Fields(lc - 1).Name)
     Next lc
     objRecSet.MoveNext
Next lr


где lRecCnt - количество строк в Recordset.
lc - это как раз Ваши поля.
lcol - используется для назначения соответствия номера поля столбцу ячейки. Я привел топорно с Select Case, но если полей много - лучше запихать соответствия в массивы или словари.
...
Рейтинг: 0 / 0
Вставка Recordset
    #39070047
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал как сказали, выдает ошибку "Sub or Function not defined" и выделяет слово "Cells"
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
For lr = 1 To rs.RecordCount
    For lc = 1 To rs.Fields.Count
    Select Case lc
    Case 1: lcol = 1
     Case 2: lcol = 3
     Case 3: lcol = 4
     Case 4: lcol = 6
     Case 5: lcol = 7
     End Select
         Cells(lr, lcol).Value = rs.Fields(rs.Fields(lc - 1).Name)
     Next lc
     rs.MoveNext
Next lr



Когда делаю вот так, выходит ошибка "object required" и выделяет всю строку начиная с ActiveSheets
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
For lr = 1 To rs.RecordCount
    For lc = 1 To rs.Fields.Count
    Select Case lc
    Case 1: lcol = 1
     Case 2: lcol = 3
     Case 3: lcol = 4
     Case 4: lcol = 6
     Case 5: lcol = 7
     End Select
         ActiveSheet.Cells(lr, lcol).Value = rs.Fields(rs.Fields(lc - 1).Name)
     Next lc
     rs.MoveNext
Next lr
...
Рейтинг: 0 / 0
Вставка Recordset
    #39070054
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подключил библиотеку в tools заработало, правда только одну строчку вставляет, а в рекорде их 8
...
Рейтинг: 0 / 0
Вставка Recordset
    #39070064
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&ДейлПодключил библиотеку в tools заработало, правда только одну строчку вставляет, а в рекорде их 8
замените
Код: vbnet
1.
For lr = 1 To rs.RecordCount


на
Код: vbnet
1.
While Not rs.EOF


или же, если оставите первый вариант, сделайте перед циклом
Код: vbnet
1.
2.
rs.MoveLast
rs.MoveFirst
...
Рейтинг: 0 / 0
Вставка Recordset
    #39070073
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
c While а после Loop что писать в конце цикла или while без него может работать?

c rs все работает, спасибо
...
Рейтинг: 0 / 0
Вставка Recordset
    #39070077
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейл, я имел ввиду
Код: vbnet
1.
2.
3.
    Do While ...
         ...
    Wend
...
Рейтинг: 0 / 0
Вставка Recordset
    #39070307
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейлвыдает ошибку "Sub or Function not defined" и выделяет слово "Cells"Библиотеку можно было не подключать, а делать так:
Код: vbnet
1.
ea.Sheets(1).Cells(lr, lcol)


Чип&Дейлправда только одну строчку вставляет
lRecCnt - я обычно получал количество записей отдельной функцией, что-то вроде:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
On Error Resume Next
    objRecSet.CursorType = adOpenKeyset
    objRecSet.Open "Select t1.p1, t1.p2, t1.p4, t1.p6, t1.p7, t1.p10 from t1", dbs
    objRecSet.Filter = sWhere

    If Err = 0 Then
        lRecCnt = objRecSet.RecordCount
    End If


objRecSet - это должен быть новый экземпляр Recordset, а не тот, что уже используется.
Правда я использовал ADODB.Recordset, который несколько отличается от DAO. Но все равно вроде как уже сами разобрались.
...
Рейтинг: 0 / 0
Вставка Recordset
    #39070352
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НУ еще не совсем раозобрался, остался вопрос как начать вставку с именнованной ячейки?
...
Рейтинг: 0 / 0
Вставка Recordset
    #39070404
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейл,
Код: vbnet
1.
ea.Sheets(1).Range("имя")


подробнее: Как обратиться к диапазону из VBA
...
Рейтинг: 0 / 0
Вставка Recordset
    #39070423
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это я уже понял, проблема в том что вставку из рекорд надо начать с ячейки с именем "start" а она может быть как на 1 строке так и на 25.
Если ручками написать например Range("start")=5 он вставит "5" где бы не была ячейка
...
Рейтинг: 0 / 0
Вставка Recordset
    #39070425
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейл,

значит плохо поняли :)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
For lr = 1 To rs.RecordCount
    For lc = 1 To rs.Fields.Count
    Select Case lc
    Case 1: lcol = 1
     Case 2: lcol = 3
     Case 3: lcol = 4
     Case 4: lcol = 6
     Case 5: lcol = 7
     End Select
         ea.Sheets(1).Range("имя").Cells(lr, lcol).Value = rs.Fields(rs.Fields(lc - 1).Name)
     Next lc
     rs.MoveNext
Next lr
...
Рейтинг: 0 / 0
Вставка Recordset
    #39070438
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал немного по другому, работает
Код: vbnet
1.
   Cells(5 + lr, Range("start") + lcol).Value = rs.Fields(rs.Fields(lc - 1).Name)
...
Рейтинг: 0 / 0
Вставка Recordset
    #39070489
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&Дейл,

Это называется не совсем вставкой, начиная с именованной ячейки. Это вставка, начиная со значения, записанного в именованной ячейке :-)
...
Рейтинг: 0 / 0
Вставка Recordset
    #39070732
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Буду знать, еще такая проблемка вышла
Код: vbnet
1.
2.
3.
  ea.Sheets(1).Range("start").Cells(lr, lcol).Value = rs.Fields(rs.Fields(lc - 1).Name)
              Selection.EntireRow.Insert
               Next lc


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

видимо где-то не там меняете значение lcol. Приведите весь код по заполнению. По этому куску не понять где ошибка.
...
Рейтинг: 0 / 0
Вставка Recordset
    #39070950
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist,

плюс Вы вставляете строку после каждой итерации цикла по столбцам. Видимо, правильнее вынести за цикл по столбцам и сделать её в цикле по строкам.
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071413
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
         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


Вот последняя версия кода вставки.8878
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071419
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема немного изменилась) первые 3 записи из рекорда переносятся нормально, потом просто пустые строки и потом последняя снова нормально вставляется
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071475
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может ли быть проблема из за документа?
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071684
Фотография i45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чип&ДейлДобрый день, уважаемые форумчане)
Подскажите как вставить все содержимое record в документ excel

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Dim dbs As DAO.Database
Dim rs As DAO.Recordset
Set dbs = DAO.OpenDatabase ("C:\test.mdb")
Set rs=dbs.OpenRecordset("Select t1.p1, t1.p2, t1.p4, t1.p6, t1.p7, t1.p10 from t1")
Set ea=CreateObject("Excel.Application")
ea.Visible=true
Set ed=ea.Workbooks.Open("C:\test1.xls")



А вот дальше проблема возникает, как вставить записи из рекорда по порядку как они в нем записаны? и как вставить записи из рекорда в нужном мне порядке?
Например, в первом случае нужно вставить поля p1,p2,p4,p6,p7,p10 в A1,B1,C1,D1,E1 соответственно, а во втором случае эти же поля нужно вставить в A1,С1,D1,F1,G1


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

В запросе используйте ORDER BY
...
Рейтинг: 0 / 0
Вставка Recordset
    #39071707
Чип&Дейл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не совсем понятно, зачем 2 рекордсета? Второму присвоить значение первого или просто в оба рекорда записать одинаковые запросы?
...
Рейтинг: 0 / 0
Вставка 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
49 сообщений из 49, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вставка Recordset
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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