|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
Всем снова здрасте! Сразу опишу суть проблемы. Мне по работе нужно на первом этапе подготавливать некий объём информации (порой он может быть значительным до 100 000 строк), на втором этапе нужно эту информацию где-то хранить. Можно и в фале (файлах) оставить, но недавно пришел к мысли, что лучше все же в БД. В связи стем, что драйвера БД вряд ли поставят, да и БД нормальной не стоит (говорю по MySQL), решил поженить Excel с SQLite. Нашел в принципе пример. http://www.gatekeeperforexcel.com/other-freebies.html . Сумел самостоятельно (глядя на пример) подключиться к БД, но вот как выгрузить данные поле получения, я не разобрался... Может кто подскажет как сие сделать. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2016, 12:13 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
kos20но вот как выгрузить данные поле получения"поле" - это "после"? И что имеется ввиду под "выгрузить"? из полученного рекордсета в на лист экселя? или выгрузить измененные данные обратно в базу? kos20 Код: vbnet 1.
это, конечно, весьма информативно. Текст ошибки нам предстоит угадать? Не надейтся на экстрасенсов, лучше максимально подробно описывай проблему. Потому что, если не найдется человека, которому не лень будет выспрашивать у тебя подробности твоего же вопроса, ответа ты не получишь. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2016, 12:21 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
да, и чем обусловлен выбор SQLite? Почему не традиционно accdb? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2016, 12:22 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
совет да любовь! зы: топег нечетал, но поздравляю! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2016, 13:42 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
Доброе время суток Зря вы пытаетесь скрестить ежа с ужом. Проект SQLite for Excel не предоставляет возможности использовать ADODB. Только двухуровневый вызов функций SQLite: от VBA, через вспомогательную dll проекта к dll "движка" базы SQLite с sqlite.org. Тот AddIn, на который вы ссылаетесь, использует такую возможность для достижения результата, но не использует ADODB. Если вы хотите работать через ADODB, то установите SQLite ODBC Driver Успехов. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2016, 13:57 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
Antonariyсовет да любовь! зы: топег нечетал, но поздравляю!ты стал слишком много времени проводить в ПТ, они на тебя дурно влияют ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2016, 13:58 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
Shocker.ProAntonariyсовет да любовь! зы: топег нечетал, но поздравляю!ты стал слишком много времени проводить в ПТ, они на тебя дурно влияют :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2016, 14:37 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
Shocker.Pro, После соединения конечно же.... Файл ошибки в эттаче... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2016, 16:11 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
anvg, Все верно, я подключаюсь напрямую с dll. Почему ADODB не будет работать? К БД я то уже подключился, осталось данные выгрузить ADODB.Recordset. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2016, 16:14 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
kos20Файл ошибки в эттаче...прекрасно. Текст мы увидели. Теперь бы узнать, на какой строке. Я же писал - не надейся на экстрасенсов. Задавать встречные вопросы надоедает после третьего. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2016, 16:33 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
kos20 Код: vbnet 1. 2. 3. 4.
это что еще за пляски с бубном? зачем десять раз подряд пытаться открыть один и тот же рекордсет, к тому же не закрывая его. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2016, 16:36 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
kos20Почему ADODB не будет работать?Потому что вы Connection не подключили к базе. Покажите вашу строку подключения. В приведённом коде её нет. А, учитывая, что у вас нет объявлений переменных и их типов (а Option Explicit вы не используете, судя по всему), то Код: vbnet 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2016, 17:58 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
anvg, Код: vbnet 1.
После остановки rtrn = 0 - те все ок... Долее идет сообщение что все подключились Код: vbnet 1. 2. 3.
Те к БД подключаемся, а потом, как я понимаю, можно recordset ом как-то вытащить данные... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2016, 09:36 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
anvg, Вот функция SQLite для подключения Код: vbnet 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2016, 09:37 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
Доброе время суток kos20 , вот, теперь смотрим внимательно. Функция SQLite3Open возвращает тип Long - целое 32битное число со знаком, а для того чтобы работать с базой данных, используя библиотеку ADODB, нужен объект ADODB.Connection, который подключается к БД через соответствующий драйвер, указываемый в строке подключения. Думаю, разница очевидна. Поэтому у вас такой способ работать не будет. По мимо этого в вашем первом посте ещё одна ошибка Код: vbnet 1.
А где и как вы создали требуемый объект подключения oConn? Так что, в отличии от .Net Framework, вряд ли есть что то готовое решение (хотя, чего только порой не найдётся на просторах), позволяющее работать с базой SQLite как со встроенной (внедрённой). Если вы знакомились с вариантами работы через API, то есть проект SQLite for Excel . Там в частности, есть пример проекта SQLite for Access , созданной на базе SQLite for Excel, который обещает предоставить интерфейс подобный DAO, то есть не такой зубодробительный для использования как Sqlite3.bas VBA module. Не смотрел, но вы можете попробовать и отписаться - удалось ли вам работать с базой SQLite как со встоенной. Успехов. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2016, 10:47 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
повторюсьShocker.Proда, и чем обусловлен выбор SQLite? Почему не традиционно accdb?агрументkos20лучше все же в БДkos20решил поженить Excel с SQLiteдостаточно странный, зачем женить незнакомых друг другу людей, когда есть две сестры, прекрасно знающих и работающих друг с другом, не требующих установки каких-либо драйверов? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2016, 11:16 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
Shocker.Proзачем женить незнакомых друг другу людей, когда есть две сестры, прекрасно знающих и работающих друг с другомзадумался... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2016, 14:39 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
Shocker.ProповторюсьShocker.Proда, и чем обусловлен выбор SQLite? Почему не традиционно accdb?агрументkos20лучше все же в БДkos20решил поженить Excel с SQLiteдостаточно странный, зачем женить незнакомых друг другу людей, когда есть две сестры, прекрасно знающих и работающих друг с другом, не требующих установки каких-либо драйверов? На SQLite хочу обкатать способ прямого подключения драйверов (возможно для MySQL)... Все эти танцы с бубнами лишь из-за того, что не все организации оперативно ставят нужный софт. Вот например у меня на работе Access нет. А таким способом можно достаточно оперативно установить и работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2016, 14:40 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
anvg, За ссылки спасибо, посмотрю... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2016, 14:40 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
kos20Shocker.Proповторюсьпропущено... агрументпропущено... пропущено... достаточно странный, зачем женить незнакомых друг другу людей, когда есть две сестры, прекрасно знающих и работающих друг с другом, не требующих установки каких-либо драйверов? На SQLite хочу обкатать способ прямого подключения драйверов (возможно для MySQL)... Все эти танцы с бубнами лишь из-за того, что не все организации оперативно ставят нужный софт. Вот например у меня на работе Access нет. А таким способом можно достаточно оперативно установить и работать. для того, чтобы использовать базу акцесса не обязательно ставить сам акцесс ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2016, 14:41 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
kos20Вот например у меня на работе Access нет.Офисная программа Access и БД mdb/accdb - это не одно и то же. Драйвер для доступа к этим базам - JET - поставляется вместе с системой, начиная с XP, и от наличия Access на машине никак не зависит. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2016, 14:45 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
1. Спасибо anvg за ссылочки, все работает - зашибись... 2. Зачем и для чего. Повторюсь, Accecc хорош до 100 мб, далее дикая нагрузка на сеть и жудкие тормоза. Рано или поздно нужно будет уходить от файл-клиент к серверной технологии... Сейчас данные будут в SQLite, потом просто перекину по аналогии на MySQL и ву-аля... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2016, 16:00 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
kos20Accecc хорош до 100 мб, далее дикая нагрузка на сеть и жудкие тормоза.У SQLite не будет дикой нагрузки на сеть и жутких тормозов при этом объеме? То есть аргументация никак не связана с вопросом. Уход на серверную СУБД при росте объема - логичное решение, но на вопрос, почему именно SQLite, не отвечает. Тем более, что предложенное решение для SQLite, как я понял, не использует ADO. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2016, 16:13 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
...то есть, в случае ADO при переходе на ССУБД достаточно, грубо говоря, поменять строку подключения, а в вашем случае - переписывать слой работы с данными. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2016, 16:15 |
|
Женитьба Excel и SQLite
|
|||
---|---|---|---|
#18+
kos20, Пример чтения из MSSQL через ADODB. Выдрал из рабочей программы, может удалил лишнего. Ну, примерно, так. Option Explicit Public cn As ADODB.Connection Public cn_ok As Boolean Public ServerName As String Public DatabaseName As String Public UserName As String Public Password As String Public delta_pr As Single 'рабочие переменные Dim aSheet As Worksheet Dim sqlstr As String Dim rs_rep As ADODB.Recordset Sub cn_open() ServerName = "...." DatabaseName = "...." UserName = "..." Password = "..." ' Set connection properties. Set cn = New ADODB.Connection cn.ConnectionTimeout = 25 cn.CommandTimeout = 180 cn.Provider = "sqloledb.1" cn.Properties("Data Source").Value = ServerName cn.Properties("Initial Catalog").Value = DatabaseName cn.Properties("User ID").Value = UserName cn.Properties("Password").Value = Password cn.CursorLocation = adUseClient ' Change mousepointer while trying to open database. Application.Cursor = xlWait ' Open the database. cn.Open Debug.Print cn.State ' Change mousepointer back to the default after open. Application.Cursor = xlDefault cn_ok = True 'формируем признак Exit Sub ErrorConnect: ' Change mousepointer back to the default after open. Application.Cursor = xlDefault cn_ok = False MsgBox "No server connection.", , "Login" 'Call cn_close End Sub Sub cn_close() cn.Close Set cn = Nothing End Sub Sub read_data() 'процедура чтения выборки и переноса данных на лист Dim sqlstr As String Dim i_rows As Integer Dim i_cols As Integer Dim i As Integer Dim j As Integer 'считываем данные sqlstr = "set nocount on set dateformat dmy " sqlstr = sqlstr & " declare @dtmDatBeg datetime declare @dtmDatEnd datetime " sqlstr = sqlstr & " set @dtmDatBeg='" & dtmDatBeg & "'" sqlstr = sqlstr & " set @dtmDatEnd='" & dtmDatEnd & "'" sqlstr = sqlstr & " exec li_Pkol_get_lg @dtmDatBeg, @dtmDatEnd" 'MsgBox (sqlstr) Debug.Print sqlstr On Error GoTo Error_Checker Set rs_rep = New ADODB.Recordset rs_rep.CursorLocation = adUseClient rs_rep.CursorType = adOpenStatic Application.Cursor = xlWait rs_rep.Open sqlstr, cn, , , adCmdText Application.Cursor = xlDefault If rs_rep.EOF = True And rs_rep.BOF = True Then MsgBox "Пустая таблица для данных параметров" GoTo exit_sub End If 'создаем лист add_list = True 'создаем лист Set aSheet = Worksheets.Add aSheet.Name = "данные" aSheet.Visible = False 'настраиваем лист i = 2 'куда вставлять i_cols = rs_rep.Fields.Count i_rows = rs_rep.RecordCount 'вставляем заголовки For j = 1 To i_cols aSheet.Cells(1, j) = rs_rep.Fields.Item(j - 1).Name Next j 'заполняем лист из рекордсета Application.StatusBar = " заносим на лист " While rs_rep.EOF = False '--------------------------- For j = 1 To i_cols 'w = rs_rep.Fields.Item(j - 1).Type If rs_rep.Fields.Item(j - 1).Type = 200 Then 'для символьных If IsNull(rs_rep.Fields.Item(j - 1)) Then w = "" Else w = Trim(rs_rep.Fields.Item(j - 1)) End If If InStr(w, vbCr) > 0 Then w = Replace(w, vbCr, "_") w = Replace(w, vbLf, "_") End If Else w = rs_rep.Fields.Item(j - 1) End If aSheet.Cells(i, j) = w Next j i = i + 1 rs_rep.MoveNext Wend '---------------------------- exit_sub: rs_rep.Close Set rs_rep = Nothing 'On Error GoTo 0 Exit Sub Error_Checker: 'display a comprehensive (исчерпывающий) MsgBox error handler With Err MsgBox "Error: " & .Number & vbCrLf & _ "Possible Causes: " & .Description, _ vbOKOnly, "ERROR in: " & .Source End With 'On Error GoTo 0 End Sub ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2016, 16:44 |
|
|
start [/forum/topic.php?fid=60&fpage=16&tid=2155299]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
105ms |
get tp. blocked users: |
2ms |
others: | 319ms |
total: | 528ms |
0 / 0 |