powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel ODBC Oracle #1004
17 сообщений из 17, страница 1 из 1
Excel ODBC Oracle #1004
    #39633125
ping2die
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток

Столкнулся с непонятной проблемой. Есть 2 ПК на которых установлены ODBC для подключения к БД Оracle. Есть Excel файл с Vba скриптом который тянет инфу из базы, так вот на одном из ПК работает данный эксель и тянет инфу, а у другого, в том числе и с моего ПК, не тянет и выдает ошибку. Сравнивал Визуально настройки ODBC на двух пк в окнах - все идентично, не знаю где капнуть глубже в этом плане.

VBA script для подключения

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
   On Error GoTo QuerryError
        With Xls_Import.QueryTables.Add( _
            "ODBC;DSN=chainora_RU_DOM;UID=ruuser;PWD=ruuser;SERVER=PHMKCHW;", Xls_Import.Cells(FirstLineData, 1) _
          , MasterSqlCode)
            .BackgroundQuery = False
            .FieldNames = False
            .AdjustColumnWidth = True
            .PreserveFormatting = True
            .RefreshStyle = xlOverwriteCells
            .Refresh False
        End With



MasterSqlCode должен иметь след вид:

SELECT* FROM CCG_STATUS
WHERE "creation date">=to_date('" & FromDate & "', 'dd.mm.yyyy')"
AND "creation date"<=to_date('" & ToDate & "', 'dd.mm.yyyy')"
AND "supplier" like '%' order by 1


Ошибку отлавливаю таким образом

MsgBox "Error # " & Err & " : " & Error(Err)
Выдает #1004


С одной стороны почитал, что данная ошибка говорит о том, что не получается найти объект в БД. Думал проблема с таблицей CCG_STATUS, оказалось что это представление, но не в этом суть.

Решил сделать простенький запрос и поменял MasterSqlCode на SELECT * FROM CCG_STATUS и ВУА-ЛЯ - работает, далее запрос начал постепенно усложнять и дошел до момент, когда, добавив функцию to_date, все ломается и получаю ошибку #1004

В чем может быть проблема, подскажите пожалуйста?
...
Рейтинг: 0 / 0
Excel ODBC Oracle #1004
    #39633131
ping2die
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поправлю SQL код, чтобы не вводить в заблуждение


MasterSqlCode

Код: sql
1.
2.
3.
4.
5.
SELECT * 
FROM CCG_STATUS 
WHERE "creation date">=to_date('" & FromDate & "', 'dd.mm.yyyy')
AND "creation date"<=to_date('" & ToDate & "', 'dd.mm.yyyy')
AND "supplier" like '%' order by 1



КАк он выглядит в VBA

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SqlCode1 = " select * "
SqlCode2 = " from CCG_STATUS"
SqlCode3 = " where "
If DateType = "C-F Date" Then
SqlCode4 = "    ""c-f date"">=to_date('" & FromDate & "', 'dd.mm.yyyy')"
SqlCode5 = "    and ""c-f date""<=to_date('" & ToDate & "', 'dd.mm.yyyy')"
ElseIf DateType = "Creation" Then
SqlCode4 = "    ""creation date"">=to_date('" & FromDate & "', 'dd.mm.yyyy')"
SqlCode5 = "    and ""creation date""<=to_date('" & ToDate & "', 'dd.mm.yyyy')"
ElseIf DateType = "Validation" Then
SqlCode4 = "    ""validation date"">    =to_date('" & FromDate & "', 'dd.mm.yyyy')"
SqlCode5 = "    and ""validation date""<=to_date('" & ToDate & "', 'dd.mm.yyyy')"
End If

If (ClientSearchName = "") Or (ClientSearchName = " ") Then
SqlCode6 = "    and ""supplier"" like '%'"
Else
SqlCode6 = "    and ""supplier"" like '%" & ClientSearchName & "%'"
End If

SqlCode7 = "    order by 1"

MasterSqlCode = SqlCode1 & SqlCode2 & SqlCode3 & SqlCode4 & SqlCode5 & SqlCode6 & SqlCode7
...
Рейтинг: 0 / 0
Excel ODBC Oracle #1004
    #39633215
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в том, что на разных компах разные региональные настройки, в частности формат даты.
Не нужно полагаться на то, что дата волшебным образом отформатируется так, как вам надо, нужно либо принудительно форматировать ее на клиенте в формат однозначный и понятный серверу (например анси - '2008-01-20', либо (лучше) делать запрос к серверу с параметрами, а не пытаться полностью отформатировать запрос на клиенте
...
Рейтинг: 0 / 0
Excel ODBC Oracle #1004
    #39633220
mnbvcx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ping2die, Вообще допустимо использовать в качестве строки запроса диалект оракл скл?
...
Рейтинг: 0 / 0
Excel ODBC Oracle #1004
    #39633353
ping2die
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Можешь поподробнее указать на ошибку?

У меня есть столбец "creation date" в представлении на который я накладываю ограничение по периоду.
Столбец храниться в типом строки(VARCHAR2) в формате 'dd.mm.yyyy'

Пытался скормить след запрос -

Код: plsql
1.
2.
3.
4.
 select *  from CCG_STATUS "ccg" 
where     to_date("creation date",'dd.mm.yyyy')>='10.04.2018'    
and to_date("creation date",'dd.mm.yyyy')<='20.04.2018'   
 and "supplier" like '%'    order by 1



В SQLDEveloper работает на ура...в VBA падает в ошибку. Не понимаю немного механизма работы. что с датами происходит, куда в кого надо конвертнуть =)
...
Рейтинг: 0 / 0
Excel ODBC Oracle #1004
    #39633355
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое FromDate и ToDate? Какой тип?
...
Рейтинг: 0 / 0
Excel ODBC Oracle #1004
    #39633360
ping2die
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Текстовые переменные.Ввожу из формы. Формат dd.mm.yyyy
...
Рейтинг: 0 / 0
Excel ODBC Oracle #1004
    #39633363
ping2die
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mnbvcx,

По идее проблем быть не должно, так как есть другие vba скрипты, которые работают.
...
Рейтинг: 0 / 0
Excel ODBC Oracle #1004
    #39633365
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что написано в Err.Description?
Какое значение принимает MasterSqlCode перед отправкой?
...
Рейтинг: 0 / 0
Excel ODBC Oracle #1004
    #39633367
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, тут очень много глупостей. Почему дата хранится в виде строки? почему вы пытаетесь сравнить дату со строкойping2die
Код: plsql
1.
where     to_date("creation date",'dd.mm.yyyy')>='10.04.2018'   
...
Рейтинг: 0 / 0
Excel ODBC Oracle #1004
    #39633372
ping2die
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Значение перед отправкой след

select * from CCG_STATUS
where to_date("creation date",'dd.mm.yyyy')>='10.04.2018'
and to_date("creation date",'dd.mm.yyyy')<='20.04.2018'
and "supplier" like '%' order by 1

Почему во вьюхе так сделано, к сожалению не знаю, видимо не предполагали дальше ее обрабатывать sql кодом.


Ошибка Error #1004 Общая ошибка ОDBC

если добавить конверт строки в дату получу туже самую ошибку - пробовал.
...
Рейтинг: 0 / 0
Excel ODBC Oracle #1004
    #39633489
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ping2dieесли добавить конверт строки в дату получу туже самую ошибку - пробовал.
т.е ошибка будет даже, если послать такой запрос:
Код: plsql
1.
2.
3.
4.
select *  from CCG_STATUS 
where     to_date("creation date",'dd.mm.yyyy')>=to_date('10.04.2018','dd.mm.yyyy')    
and to_date("creation date",'dd.mm.yyyy')<=to_date('20.04.2018','dd.mm.yyyy')   
 and "supplier" like '%'    order by 1
...
Рейтинг: 0 / 0
Excel ODBC Oracle #1004
    #39633501
mnbvcx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Если убрать like из текста VBA, то ошибки не будет?
2. Если переменные заменить на константы в нужном формате? С like и без.
...
Рейтинг: 0 / 0
Excel ODBC Oracle #1004
    #39633559
ping2die
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем кто откликнулся.


Не знаю почему, но помогло решение от HandKot, хоть я и написал ранее, что не сработает перевод строки в дату, видимо что-то сам не так делал при тестах. Попробовал еще раз - все заработало.

Кто-то может пояснить почему в SQLdeveloper/DBeaver код работаеn без приведения типов, а в данном случае при VBA "отправке" нет?
...
Рейтинг: 0 / 0
Excel ODBC Oracle #1004
    #39633566
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разное окружение у коннекшенов скорее всего - локализация и т.п.

Повторюсь, если не делать глупости типа сравнения даты со строкой и не полагаться на неявные преобразования (формат даты, десятичный разделитель и т.п., зависящее от региональных настроек), то такие проблемы никогда и не возникнут.
...
Рейтинг: 0 / 0
Excel ODBC Oracle #1004
    #39633577
ping2die
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Спасибо.
...
Рейтинг: 0 / 0
Excel ODBC Oracle #1004
    #39633722
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ping2dieКто-то может пояснить почему в SQLdeveloper/DBeaver код работаеn без приведения типов, а в данном случае при VBA "отправке" нет?
считаю злом сравнивать значения разных типов без их приведения к одному типу
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel ODBC Oracle #1004
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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