SQL-запрос, ерунда какая-то

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

SQL-запрос, ерунда какая-то

Сообщение lord0n » 23.08.2005 (Вт) 10:48

Код: Выделить всё

date1 = Format(cboMounth.ListIndex + 1, "00") & "/" & Format(x, "00") & "/" & cboYear.Text
.....   
RS.Open "select distinct f4 from [Excel-sheet$] where f1 = '" & date1 & "'", db, adOpenStatic, adLockOptimistic


при первом запуске выдает ошибку:
"Выбранная последовательность сортировки не поддерживается операционной системой"
при остальных запусках все нормально
не понимаю :shock:
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.08.2005 (Вт) 11:09

может все-таки :
Код: Выделить всё
f1 = #" & date1 & "#"


если это Access

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 23.08.2005 (Вт) 11:14

если в акцесе то да
а это екселевская книга :(
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.08.2005 (Вт) 11:52

и что?
все тоже самое

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.08.2005 (Вт) 11:53

если конечно у тебя для столбца f1 явно не указан текстовый формат данных :?

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 23.08.2005 (Вт) 12:32

А у меня не получается задать никакой формат кроме текстового
даже если я специально задаю формат даты, rs открывается в текстовом формате :(
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.08.2005 (Вт) 12:34

покажи свой код открытия ADO-соединения с файлом excel

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 23.08.2005 (Вт) 12:37

Код: Выделить всё

Set db = New Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & lblDispTab.Caption & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"""

Set oEx = CreateObject("excel.Application")
With oEx
.workbooks.Open FileName:=App.Path & "\KPI.xls", ReadOnly:=True

kolall = 0

For x = 1 To Left(kondate, 2)

    date1 = Format(x, "00") & "." & Format(cboMounth.ListIndex + 1, "00") & "." & cboYear.Text
    Set RS = New Recordset
   
    On Error Resume Next
    RS.Open "select distinct f4 from [Excel-sheet$] where f1 = '" & date1 & "'", db, adOpenStatic, adLockOptimistic
   
    .Windows("KPI.xls").Activate

Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: SQL-запрос, ерунда какая-то

Сообщение Andrey Fedorov » 23.08.2005 (Вт) 12:57

lord0n писал(а):при первом запуске выдает ошибку:
"Выбранная последовательность сортировки не поддерживается операционной системой"
при остальных запусках все нормально
не понимаю :shock:


В обработчике ошибок поставь для этой ошибки

Код: Выделить всё
Resume
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 23.08.2005 (Вт) 13:05

только этим и спасаюсь
но это не дело, надо чтоб по нормальному было
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.08.2005 (Вт) 13:23

Код: Выделить всё
Dim rs as ADODB.Recordset
Dim db as ADODB.Connection
...
set db=New ADODB.Connection
set rs=New ADODB.Recordset


проверь какая библиотека у тебя работает

mnzol
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 29.09.2004 (Ср) 11:02

Сообщение mnzol » 23.08.2005 (Вт) 13:26

Честно говоря точно не помню, но был какой-то bug у Билли, что тип поля определяется по первым скольки-то строкам и если есть варианты, то тип принимается за текст, а какие-либо установки ему в этом случае по барабану. Ну или что-то в этом роде ...

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 23.08.2005 (Вт) 13:34

Konst_One писал(а):
Код: Выделить всё
Dim rs as ADODB.Recordset
Dim db as ADODB.Connection
...
set db=New ADODB.Connection
set rs=New ADODB.Recordset


проверь какая библиотека у тебя работает


Microsoft ActiveX Data Objects 2.0 Lib
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.08.2005 (Вт) 13:35

итог - таков, нужно полное содержимое твоего экселевского файла, тогда и решение появится

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.08.2005 (Вт) 13:36

Подключай ADO 2.5 как минимум :!:

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 23.08.2005 (Вт) 13:40

Konst_One писал(а):итог - таков, нужно полное содержимое твоего экселевского файла, тогда и решение появится
Вложения
Таблица.rar
(4.82 Кб) Скачиваний: 37
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.08.2005 (Вт) 13:51

у тебя ничего не выйдет таким способом, так как у тебя несколько строк в начале страницы занимает шапка документа. Один единственный вариант - сначала вырезать необходимый диапазон, сохранить его в новый sheet, а его уже открывать в рекордсете, тогда у тебя все будет ок.

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 23.08.2005 (Вт) 14:09

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

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 23.08.2005 (Вт) 14:39

Konst_One писал(а):у тебя ничего не выйдет таким способом, так как у тебя несколько строк в начале страницы занимает шапка документа. Один единственный вариант - сначала вырезать необходимый диапазон, сохранить его в новый sheet, а его уже открывать в рекордсете, тогда у тебя все будет ок.


Да нет - дело не в этом.

К примеру, у меня его xls-файл в Recordset открывается без проблем - в отдельном проекте. И в то же время DBF-ка в составе большого проекта открывается с вышеприведенной ошибкой (приходится использовать Resume). Разбираться в чем дело было не дюже охота - поэтому так и стоит, хотя, конечно, узнать истину хочется...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 23.08.2005 (Вт) 14:49

Konst_One писал(а):у тебя ничего не выйдет таким способом, так как у тебя несколько строк в начале страницы занимает шапка документа. Один единственный вариант - сначала вырезать необходимый диапазон, сохранить его в новый sheet, а его уже открывать в рекордсете, тогда у тебя все будет ок.


Шапка документа скорей всего влечет за собой то что в Recordset-e все колонки будут распознаны как строковые. Но Recordset откроется.

Кроме того запрос может быть написан в виде:

Код: Выделить всё
r.Open "SELECT * FROM [Расход$A5:Q22]", cn, adOpenStatic, adLockReadOnly
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 23.08.2005 (Вт) 15:23

с этим проблема:
это не полный файл (весь файл занимает 10 мб)
плюс к этому файл постоянно пополняется
из этого следует:
1. либо открывать простой (без where) рекордсет, затем вычислять конечную строку, затем его переоткрывать с пораметром A5:Qx
(x - последняя строка)
2. открывать сразу с параметром A5:Q65536, но у юзера для которого она предназначена очень слабая машина и я боюсь что будет долго открываться
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 23.08.2005 (Вт) 15:29

lord0n писал(а):2. открывать сразу с параметром A5:Q65536, но у юзера для которого она предназначена очень слабая машина и я боюсь что будет долго открываться


Ну ты попробуй - вряд ли он будет пытаться взять в Recordset несуществующие строки.

Ну и уводи эту задачу с Excel со временем...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 23.08.2005 (Вт) 15:34

я бы с удовольствием все в базу засунул, но начальник не разрешает
грит что для операторов сложно будет, но отчет с использованием этого файла должен быть :)
вот такой директор
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 23.08.2005 (Вт) 15:40

lord0n писал(а):я бы с удовольствием все в базу засунул, но начальник не разрешает
грит что для операторов сложно будет, но отчет с использованием этого файла должен быть :)
вот такой директор


Дык сделай так чтобы удобно и просто все было было и покажи ему.
Там делов-то...

P.S Метод убеждает на 100%. Если, конечно, сам не намудришь :lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 23.08.2005 (Вт) 15:47

дык, показывал - не хочет :roll:
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 23.08.2005 (Вт) 15:50

lord0n писал(а):дык, показывал - не хочет :roll:


Значит намудрил :lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.08.2005 (Вт) 15:53

не-а,у него тяжелый случай. там несколько столбцов с объединением в колонках D и E , из-за этого провайдер и дает ошибки, так как появляются пустые строки по столбцам A,B, C , но заполненные по D и E и тд

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 23.08.2005 (Вт) 15:57

5 копеек вдогонку. Вместо вот этого кошмара:
Код: Выделить всё
date1 = Format(cboMounth.ListIndex + 1, "00") & "/" & Format(x, "00") & "/" & cboYear.Text
используй функцию DateSerial().

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.08.2005 (Вт) 15:58

вот посмотри, что выходит:
Вложения
xls_test.zip
(91.14 Кб) Скачиваний: 27

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 23.08.2005 (Вт) 16:18

Konst_One писал(а):не-а,у него тяжелый случай. там несколько столбцов с объединением в колонках D и E , из-за этого провайдер и дает ошибки, так как появляются пустые строки по столбцам A,B, C , но заполненные по D и E и тд


Да никакой ошибки из-за этого не выдается. Попробуй с его табличкой:

Код: Выделить всё

    Dim cn As New ADODB.Connection
    Dim r As New ADODB.Recordset
    cn.CursorLocation = adUseClient
    cn.Provider = "Microsoft.Jet.OLEDB.4.0"
    cn.Properties![Extended Properties] = "Excel 8.0; HDR=No"
    cn.Properties![Data Source] = "C:\Temp\Таблица.xls"
    cn.Open
    r.Open "SELECT * FROM [Расход$A5:Q65536]", cn, adOpenStatic, adLockReadOnly


Природа ошибки совсем другая...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 125

    TopList