|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
Форумчане, прошу помощи, ибо не могу придумать код для следующей ситуации: Есть БД, которая раз в сутки заполняется данными с приборов учёта. Каждому числу месяца соответствуют определённые данные. С помощью макроса эти показания попадают в определённый столбец экселя, так чтобы они соответствовали дате в соседнем столбце. Если в БД есть данные за все дни месяца, то заполняется ексель правильно, А если, например, за 15е нет данных, а запрашиваются с 1 по 20, то вместо того, чтобы ячейку напротив 15-го числа оставить пустой, она заполняется за 16-е, 16 за 17 и т.д. В этом всё и дело: как сделать, чтобы при недостающих данных в БД в соответствующих клетках экселя было тоже пусто, или 0, или НЕТ ДАННЫХ... Мой скрипт запроса: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Модератор: Учимся использовать тэги оформления кода - FAQ ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 23:00 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
Я так понял, что на листе Excel, в определённой колонке проставлены даты статически? А не пробовали выводить через запрос и дату и данные? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2017, 09:42 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
Да не, то, что Вы предлагаете, частично решит, конечно, вопрос, но основному требованию не удовлетворит - интерфейс не трогать - только макрос подрихтовать. Требование начальника отдела. Сейчас вот добился, чтобы RecordCount корректно показывал содержание рекордсета, ну и всё, пока не знаю дальше что с ним делать. Опыта в программировании нет, сейчас вот на старости лет приходится вникать ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2017, 22:04 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
На SQL-сервере довольно редко бывает нехватка данных, но в такие моменты хочется, чтоб прога корректно отрабатывала. В конце концов - вопрос профессионального честолюбия. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2017, 22:10 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
kovax, Вам надо допилить запрос так, чтобы он всегда возвращал все дни не знаю какая у Вас версия скуля, но можно примерно так (кто-то и поправит при желании) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
ЗЫЖ 1. плохо назвать поля зарезервированными словами, 2. дату лучше писать в каноническом виде YYYMMDD HH:MM:SS 3. в запросе лучше заменить даты в условии на параметры ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2017, 06:47 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
Долго, чувствую, буду "переваривать" Ваш код, HandKot. Во всяком случае, на данный момент отладчик ругается за синтаксис, пока не могу разобраться, в чём дело. Скул у меня 2008R2, формат даты он "ест" такой - mm-dd-yyyy, проверено. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2017, 23:19 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
HandKot, а не могли бы Вы привести пример кода для записи числа из ячейки, например А1, листа "Лист1" в SQL-сервер, таблицу SPNetArchive, столбец RequestID и присвоить этому значению, например RequestID=100. Строка подключения та же, что в первом вопросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2017, 23:50 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
kovaxпример кода для записи числа из ячейки, например А1, листа "Лист1" в SQL-сервер, таблицу SPNetArchive, столбец RequestID и присвоить этому значению, например RequestID=100. Строка подключения та же, что в первом вопросе. если правильно понял, то пишите простой UPDATE примерно так (не проверял) Dim cmd As New ADODB.Command Dim cn As New ADODB.Connection cn.ConnectionString = "" cn.Open set cmd.Connection = cn cmd.Execute "update SPNetArchive set RequestID = " & ThisWorkbiik.Worksheets("Лист1"),Range("A1").Value & " where тут условие для конкретной строки" . kovaxВо всяком случае, на данный момент отладчик ругается за синтаксис, пока не могу разобраться, в чём дело что за ошибка? указанный запрос на 2008 должен работать ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2017, 06:53 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
Ошибка выскакивает следующая: "Невозможно использовать подключение для выполнения операции. Оно закрыто или не допускается в данном контексте". Я тогда добавил в конце Вашей строки cn, ошибка после этого изменилась на "Incorrect syntax near nthe keyword 'values'" ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2017, 09:23 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
kovax, мы сейчас о чём говорим? по поводу запроса на выборку. Он у Вас в том виде, который я написал, через Management Studio работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2017, 10:41 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
HandKot, скрин приложил в качестве аргумента. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2017, 13:06 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
kovax, можно вывести 2 столбца Код: vbnet 1.
, вставить недостающие записи, ориентируясь по дате-времени, удалить столбец с датами, примерно так Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2017, 22:29 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
kovaxHandKot, скрин приложил в качестве аргумента. MS Query конечно же не понимает данный синтаксис. Он остался, я думаю, на уровне SQL 7 Запрос надо вставить вместо Вашего в строке Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2017, 07:13 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
Наверно, сейчас глупость спрошу... Казанский, чёт не соображу - а куда вставить CopyFromRecordset rst? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2017, 09:11 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
kovax, оставьте его на месте. Мой код вставьте перед End Sub, подправьте строку запроса. Чтобы убедиться в правильности работы, пройдите код по шагам - F8. Требуется, чтобы столбец С был изначально свободен, иначе запрос затрет его. Если это невозможно, надо перед CopyFromRecordset вставить столбец, или вообще выгружать рекордсет на новый лист и там обрабатывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2017, 10:31 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
Казанский, сделал, как Вы сказали. Выкладываю результат выполнения. В БД нет данных за 1 и 9 ноября. За 9.11.2017 всё верно - нет данных, а за 01.11.2017 не отработал алгоритм. За 10 данные "съехали" почему-то в колонку с датами ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2017, 11:00 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
А если ещё раз нажать кнопку, то... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2017, 11:01 |
|
sql vba excel проверка наличия данных по дате
|
|||
---|---|---|---|
#18+
kovax, выложите лист после вставки двух столбцов (файл Excel, не картинку!). Еще для правильной работы алгоритма нужны начальная и конечная даты, используемые в запросе - откуда берутся эти даты? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2017, 11:52 |
|
|
start [/forum/topic.php?fid=60&tid=2155173]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 137ms |
0 / 0 |