Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2012, 03:49   #1
devf
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 17
По умолчанию Не работает вложенный цикл

Здравствуйте уважаемые! Прошу совета.
К примеру, имею в Access базу с двумя таблицами.
В таблице «Даты» записываются только даты составления заявок.
В таблице «Заявки» записаны дата, название детали, код и т.д. на каждую деталь за весь период.
Т.к. в день может заказываться несколько деталей, то дата в «Заявках» повторяется.

Пытаюсь сделать чтобы на лист Excel выводилась информация в виде отдельных таблиц по датам из «Заявок», типа: заявка за 01.01.2012 – дальше ее таблица с заявками за этот день, отступ на 2 строки, заявка за 03. 03.2012 и т.д.
Пока пытаюсь на основе вложенного цикла вытащить даты т.е. беру дату из таблицы «Дата»(Основной цикл), и вытащить все записи с этой датой из таблицы «Заявки»(вложенный цикл).
Что то не получается - вложенный цикл не работает – все идет по основному.
Где неправильно? Извиняюсь за код, я – начинающий.


Sub proba2()
Dim db As ADODB.Connection
Dim rs_data, rs_zayav As ADODB.Recordset
Dim sql_data, sql_zayav, str_data, str_zayav As String

Set rs_data = CreateObject("ADODB.Recordset")
Set rs_zayav = CreateObject("ADODB.Recordset")
Set db = New ADODB.Connection
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;D ata Source=D:\vba_t\Zakaz.mdb"

sql_data = "SELECT * FROM `Даты`" '-- запрос к табл. Даты
rs_data.Open sql_data, db
'''''''''''''-- Цикл общий --''''''''''''''''''''''''''''''''''' ''''
While Not rs_data.EOF
str_data = rs_data.Fields("Дата").Value
'-- запрос к табл. Заявки
sql_zayav = "SELECT * FROM `Заявки` WHERE `Дата`=' " & str_data & " ' "
rs_zayav.Open sql_zayav, db
''''''''''-- Вложенный цикл --''''''''''''''''''''''''''''''''''' ''''
While Not rs_zayav.EOF
str_zayav = rs_zayav.Fields("Дата").Value
rs_zayav.MoveNext
Wend
'''''''''''''''''-- Конец вложенного цикла --'''''''''''''''''''''''
rs_zayav.Close
rs_data.MoveNext
Wend
'''''''''''''''''''-- Конец общего цикла --''''''''''''''''''''''''''
db.Close
Set db = Nothing

End Sub
devf вне форума Ответить с цитированием
Старый 05.02.2012, 04:07   #2
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

Код:
sql_zayav = "SELECT * FROM `Заявки` WHERE `Дата`=' " & str_data & " ' "

у вас дата похоже ищется не в том формате, а посему --выборка пустая

надо #mm/dd/yyyy#
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 05.02.2012, 04:14   #3
devf
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 17
По умолчанию

Цитата:
Сообщение от shanemac51 Посмотреть сообщение
Код:
sql_zayav = "SELECT * FROM `Заявки` WHERE `Дата`=' " & str_data & " ' "

у вас дата похоже ищется не в том формате, а посему --выборка пустая

надо #mm/dd/yyyy#

У меня дата в формате строки и запрос выполняется.
Да дело не в этом - если циклы разделить они работают как надо, а так -не работает вложенный цикл, программа проскакивает его на общий и не читает.
devf вне форума Ответить с цитированием
Старый 05.02.2012, 19:34   #4
devf
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 17
По умолчанию

Цитата:
Сообщение от devf Посмотреть сообщение
Здравствуйте уважаемые! Прошу совета.
К примеру, имею в Access базу с двумя таблицами.
В таблице «Даты» записываются только даты составления заявок.
В таблице «Заявки» записаны дата, название детали, код и т.д. на каждую деталь за весь период.
Т.к. в день может заказываться несколько деталей, то дата в «Заявках» повторяется.

Пытаюсь сделать чтобы на лист Excel выводилась информация в виде отдельных таблиц по датам из «Заявок», типа: заявка за 01.01.2012 – дальше ее таблица с заявками за этот день, отступ на 2 строки, заявка за 03. 03.2012 и т.д.
Пока пытаюсь на основе вложенного цикла вытащить даты т.е. беру дату из таблицы «Дата»(Основной цикл), и вытащить все записи с этой датой из таблицы «Заявки»(вложенный цикл).
Что то не получается - вложенный цикл не работает – все идет по основному.

End Sub
Со вложенными циклами так и не разобрался - во внутреннем цикле ругается "BOF или EOF имеют значение TRUE и т.д." ничего с этим не поделать...
Но оказывается задачу можно решить по-другому: в цикл вставить QueryTable – и все получается даже лучше.
Кому интересно, код:

Sub проба()
Dim db As ADODB.Connection
Dim rs_data, rs_zayav As ADODB.Recordset
Dim sql_data, sql_zayav, str_data As String
Dim QT1 As QueryTable

Set rs_data = CreateObject("ADODB.Recordset")
Set rs_zayav = CreateObject("ADODB.Recordset")
Set db = New ADODB.Connection
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;D ata Source=D:\vba_t\Zakaz.mdb"

sql_data = "SELECT * FROM `Даты`"
rs_data.Open sql_data, db

'''''''''''-- Цикл --''''''''''''''''''''''''''''''''''' ''''
While Not rs_data.EOF
str_data = rs_data.Fields("Дата").Value
sql_zayav = "SELECT * FROM Заявки WHERE `Дата`='" & str_data & "' "
rs_zayav.Open sql_zayav, db
Set QT1 = ActiveSheet.QueryTables.Add(rs_zaya v, Range("C15"))
QT1.Refresh
rs_zayav.Close
rs_data.MoveNext
Wend
'''''''''''''''''''—Конец цикла --''''''''''''''''''''''''''
db.Close
Set db = Nothing
End Sub
devf вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перестать выполнять вложенный цикл если условие истинно n1l Microsoft Office Excel 8 25.01.2012 15:09
Тема: Вложенный цикл. Кристина Н Паскаль, Turbo Pascal, PascalABC.NET 3 04.12.2011 21:06
Двойной вложенный цикл haim Паскаль, Turbo Pascal, PascalABC.NET 1 30.01.2011 02:13
вложенный цикл FOR в вызываемой функции lifeton Общие вопросы Delphi 6 02.06.2010 17:35
Switch вложенный в бесконечный цикл coper Общие вопросы C/C++ 2 16.11.2009 02:31