powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel<->SQL с помощью VBA
10 сообщений из 10, страница 1 из 1
Excel<->SQL с помощью VBA
    #38333665
MalishPo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть vba скрипт на выборку данных из MS SQL сервера:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Function Crate_Tables()
    DSNConn = "OLEDB;DRIVER=SQL Server;SERVER=имя сервера;UID=логин;PWD=пароль;APP=2012 Microsoft Office system;WSID=текущий комп;DATABASE=имя базы"
    SQLQuery = "SELECT * FROM ""List_test"" WHERE " & QuaryWindow.SQLColumn.Value & " = " & QuaryWindow.SQLValue.Value & ""
    With ActiveSheet.QueryTables.Add(Connection:=DSNConn, Destination:=Range("$A$2"))
        .CommandType = xlCmdSql
        .CommandText = SQLQuery
        .Name = "База"
        .FieldNames = False
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = False
        .RefreshOnFileOpen = True
        .BackgroundQuery = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = True
        .SaveData = False
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = False
        .Refresh BackgroundQuery = False
    End With
End Function


Он обрабатывается, но его предел 11 тысяч строк. Когда пытаюсь вызвать строку больше 11 тысяч(к примеру 12345, на сервере их 300 000++) он ничего не делает :( Никаких ошибок, просто не выдает данные.
Я подозреваю что это лимит драйвера, как его обойти?
Спасайте, голова скоро лопнет :(
...
Рейтинг: 0 / 0
Excel<->SQL с помощью VBA
    #38333987
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда пытаетесь вызвать строку больше 11 тысяч(к примеру 12345, на сервере их 300 000++) ... то невероятным образом попадаете пальцем в небо в значения, которых нет в таблице, - в итоге получаете пустое множество.
...
Рейтинг: 0 / 0
Excel<->SQL с помощью VBA
    #38334301
MalishPo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такой умный ответ аж жуть берет, ниче что я делаю селект id? Порядкового значения, которое создается на каждой строчке, по ПОРЯДКУ. И что бы я ни вызвал в промежутке от 1 до 300 000 я точно попаду не пальцем в небо, а прямо в куда надо.
...
Рейтинг: 0 / 0
Excel<->SQL с помощью VBA
    #38335376
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MalishPoТакой умный ответ аж жуть берет, ниче что я делаю селект id? Порядкового значения, которое создается на каждой строчке, по ПОРЯДКУ. И что бы я ни вызвал в промежутке от 1 до 300 000 я точно попаду не пальцем в небо, а прямо в куда надо.
если Вы имеете ввиду поле типа IDENTITY, то там тоже могут быть пропуски

для начала попробуйте сделать так
Код: sql
1.
2.
3.
4.
5.
Function Crate_Tables()
    DSNConn = "OLEDB;DRIVER=SQL Server;SERVER=имя сервера;UID=логин;PWD=пароль;APP=2012 Microsoft Office system;WSID=текущий комп;DATABASE=имя базы"
    SQLQuery = "SELECT * FROM ""List_test"" WHERE " & QuaryWindow.SQLColumn.Value & "  >= " & QuaryWindow.SQLValue.Value & ""
    With ActiveSheet.QueryTables.Add(Connection:=DSNConn, Destination:=Range("$A$2"))
...

и вызовите с параметром 12345, будет ли что-нибудь выводиться


ЗЫЖ про лимит драйвера на кол-во строк не слышал
...
Рейтинг: 0 / 0
Excel<->SQL с помощью VBA
    #38336852
MalishPo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поле не IDENTITY, а PK. Да и вообще, >= не катит, т.к. вызываются данные из базы не только по ключевому полю, но и по другим. А там важно что поле = значение. Должна вызваться только 1 строка, а не все строки от определенной.
ПС: по вашему совету не вышло, вызывает все до 11000 строк, выше как отрезало.
...
Рейтинг: 0 / 0
Excel<->SQL с помощью VBA
    #38337011
MalishPo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавлю, максимально возможная для вызова строка 11060. Это с помощью скрипта. С помощью выгрузки через вкладку данные, выгружает все 300 000 строк.
...
Рейтинг: 0 / 0
Excel<->SQL с помощью VBA
    #38337034
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MalishPo
Код: vbnet
1.
    DSNConn = "OLEDB;DRIVER=SQL Server;SERVER=имя сервера;UID=логин;PWD=пароль;APP=2012 Microsoft Office system;WSID=текущий комп;DATABASE=имя базы"



тут, ваще-то, ODBC должно быть ...
...
Рейтинг: 0 / 0
Excel<->SQL с помощью VBA
    #38337036
MalishPo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и ODBC и OLEDB есть драйверы. Работают оба, к сожалению одинаково до 11060 строк
...
Рейтинг: 0 / 0
Excel<->SQL с помощью VBA
    #38338559
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MalishPoДобавлю, максимально возможная для вызова строка 11060. Это с помощью скрипта. С помощью выгрузки через вкладку данные, выгружает все 300 000 строк.
значит все таки у Вас проблема в запросе. Какое может быть ограничение у драйвера или тому подобное, если у Вас всегда возвращается одна строка? В добавок, запрос выполняет сервер, а не драйвер


MalishPoт.к. вызываются данные из базы не только по ключевому полю, но и по другим
значит как и сказал скукотища у Вас нет таких записей, которые удовлетворяли бы условию выборки


отловите свой запрос и выполните его в любой среде хоть SSMS, хоть в MS Query
...
Рейтинг: 0 / 0
Excel<->SQL с помощью VBA
    #38338734
MalishPo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблему решил. Косяк был мой. Точнее того идиота который переименовал компы, в итоге скрипт обращался к старому серверу :(
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel<->SQL с помощью VBA
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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