Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Женитьба Excel и SQLite / 25 сообщений из 29, страница 1 из 2
05.02.2016, 12:13
    #39163747
kos20
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
Всем снова здрасте!
Сразу опишу суть проблемы. Мне по работе нужно на первом этапе подготавливать некий объём информации (порой он может быть значительным до 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.
'тут соединяемся
Sub ConnectDB()
Set rtrn = New ADODB.Connection

If SQLite3Initialize = 0 Then Debug.Print "SQlite инициализирована!"

fullPath = "C:\Documents and Settings\KonKram\Рабочий стол\XLSQLite\SQLite\XLSQLiteDemo.sqlite"
    rtrn = SQLite3Open(fullPath, 0)
    If rtrn = 0 Then
        MsgBox "Connection to database successful.", vbOKOnly + vbInformation, "SQLite - [Database Connection]"
    Else
        MsgBox "Error:" & vbCr & vbCr & sqlManager.getError, vbCritical + vbOKOnly, "SQLite - [Database Connection]"
    End If
End Sub

' это по идее получение данных, но у меня здесь ошибка (((
Dim rs As ADODB.Recordset
Private Sub InsertData()
    Set rs = New ADODB.Recordset
    ConnectDB
    With wsBooks
        For rowCursor = 2 To 11
            strSQL = "select c1, c2, c3 from table1"
            rs.Open strSQL, oConn, adOpenDynamic, adLockOptimistic
        Next
    End With
End Sub
...
Рейтинг: 0 / 0
05.02.2016, 12:21
    #39163759
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
kos20но вот как выгрузить данные поле получения"поле" - это "после"? И что имеется ввиду под "выгрузить"? из полученного рекордсета в на лист экселя? или выгрузить измененные данные обратно в базу?

kos20
Код: vbnet
1.
но у меня здесь ошибка

это, конечно, весьма информативно. Текст ошибки нам предстоит угадать?

Не надейтся на экстрасенсов, лучше максимально подробно описывай проблему. Потому что, если не найдется человека, которому не лень будет выспрашивать у тебя подробности твоего же вопроса, ответа ты не получишь.
...
Рейтинг: 0 / 0
05.02.2016, 12:22
    #39163761
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
да, и чем обусловлен выбор SQLite? Почему не традиционно accdb?
...
Рейтинг: 0 / 0
05.02.2016, 13:42
    #39163885
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
совет да любовь!

зы: топег нечетал, но поздравляю!
...
Рейтинг: 0 / 0
05.02.2016, 13:57
    #39163931
anvg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
Доброе время суток
Зря вы пытаетесь скрестить ежа с ужом. Проект SQLite for Excel не предоставляет возможности использовать ADODB. Только двухуровневый вызов функций SQLite: от VBA, через вспомогательную dll проекта к dll "движка" базы SQLite с sqlite.org. Тот AddIn, на который вы ссылаетесь, использует такую возможность для достижения результата, но не использует ADODB.
Если вы хотите работать через ADODB, то установите SQLite ODBC Driver
Успехов.
...
Рейтинг: 0 / 0
05.02.2016, 13:58
    #39163933
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
Antonariyсовет да любовь!

зы: топег нечетал, но поздравляю!ты стал слишком много времени проводить в ПТ, они на тебя дурно влияют
...
Рейтинг: 0 / 0
05.02.2016, 14:37
    #39163996
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
Shocker.ProAntonariyсовет да любовь!

зы: топег нечетал, но поздравляю!ты стал слишком много времени проводить в ПТ, они на тебя дурно влияют

:)
...
Рейтинг: 0 / 0
05.02.2016, 16:11
    #39164180
kos20
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
Shocker.Pro,

После соединения конечно же....
Файл ошибки в эттаче...
...
Рейтинг: 0 / 0
05.02.2016, 16:14
    #39164186
kos20
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
anvg,

Все верно, я подключаюсь напрямую с dll. Почему ADODB не будет работать?
К БД я то уже подключился, осталось данные выгрузить ADODB.Recordset.
...
Рейтинг: 0 / 0
05.02.2016, 16:33
    #39164216
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
kos20Файл ошибки в эттаче...прекрасно. Текст мы увидели. Теперь бы узнать, на какой строке.

Я же писал - не надейся на экстрасенсов. Задавать встречные вопросы надоедает после третьего.
...
Рейтинг: 0 / 0
05.02.2016, 16:36
    #39164218
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
kos20
Код: vbnet
1.
2.
3.
4.
        For rowCursor = 2 To 11
            strSQL = "select c1, c2, c3 from table1"
            rs.Open strSQL, oConn, adOpenDynamic, adLockOptimistic
        Next

это что еще за пляски с бубном? зачем десять раз подряд пытаться открыть один и тот же рекордсет, к тому же не закрывая его.
...
Рейтинг: 0 / 0
05.02.2016, 17:58
    #39164343
anvg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
kos20Почему ADODB не будет работать?Потому что вы Connection не подключили к базе. Покажите вашу строку подключения. В приведённом коде её нет.
А, учитывая, что у вас нет объявлений переменных и их типов (а Option Explicit вы не используете, судя по всему), то
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
'создали переменную типа вариант и присвоили ссылку на новый объект класса Connection
Set rtrn = New ADODB.Connection
'...
'а тут заменили значение переменной тем, что вам вернула функция
rtrn = SQLite3Open(fullPath, 0)
'установите код остановки и посмотрите в Locals что у вас в rtrn?
Stop
...
Рейтинг: 0 / 0
08.02.2016, 09:36
    #39165261
kos20
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
anvg,

Код: vbnet
1.
rtrn = SQLite3Open(fullPath, 0)



После остановки rtrn = 0 - те все ок...
Долее идет сообщение что все подключились

Код: vbnet
1.
2.
3.
    If rtrn = 0 Then
        MsgBox "Connection to database successful.", vbOKOnly + vbInformation, "SQLite - [Database Connection]"
    Else



Те к БД подключаемся, а потом, как я понимаю, можно recordset ом как-то вытащить данные...
...
Рейтинг: 0 / 0
08.02.2016, 09:37
    #39165264
kos20
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
anvg,

Вот функция SQLite для подключения
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
'=====================================================================================
' Database connections

Public Function SQLite3Open(ByVal fileName As String, ByRef dbHandle As Long) As Long
    SQLite3Open = sqlite3_stdcall_open16(StrPtr(fileName), dbHandle)
End Function
              
...
Рейтинг: 0 / 0
08.02.2016, 10:47
    #39165308
anvg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
Доброе время суток
kos20 , вот, теперь смотрим внимательно. Функция SQLite3Open возвращает тип Long - целое 32битное число со знаком, а для того чтобы работать с базой данных, используя библиотеку ADODB, нужен объект ADODB.Connection, который подключается к БД через соответствующий драйвер, указываемый в строке подключения.
Думаю, разница очевидна. Поэтому у вас такой способ работать не будет.
По мимо этого в вашем первом посте ещё одна ошибка
Код: vbnet
1.
rs.Open strSQL, oConn, adOpenDynamic, adLockOptimistic


А где и как вы создали требуемый объект подключения oConn?

Так что, в отличии от .Net Framework, вряд ли есть что то готовое решение (хотя, чего только порой не найдётся на просторах), позволяющее работать с базой SQLite как со встроенной (внедрённой). Если вы знакомились с вариантами работы через API, то есть проект SQLite for Excel . Там в частности, есть пример проекта SQLite for Access , созданной на базе SQLite for Excel, который обещает предоставить интерфейс подобный DAO, то есть не такой зубодробительный для использования как Sqlite3.bas VBA module.
Не смотрел, но вы можете попробовать и отписаться - удалось ли вам работать с базой SQLite как со встоенной.
Успехов.
...
Рейтинг: 0 / 0
08.02.2016, 11:16
    #39165343
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
повторюсьShocker.Proда, и чем обусловлен выбор SQLite? Почему не традиционно accdb?агрументkos20лучше все же в БДkos20решил поженить Excel с SQLiteдостаточно странный, зачем женить незнакомых друг другу людей, когда есть две сестры, прекрасно знающих и работающих друг с другом, не требующих установки каких-либо драйверов?
...
Рейтинг: 0 / 0
08.02.2016, 14:39
    #39165586
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
Shocker.Proзачем женить незнакомых друг другу людей, когда есть две сестры, прекрасно знающих и работающих друг с другомзадумался...
...
Рейтинг: 0 / 0
08.02.2016, 14:40
    #39165587
kos20
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
Shocker.ProповторюсьShocker.Proда, и чем обусловлен выбор SQLite? Почему не традиционно accdb?агрументkos20лучше все же в БДkos20решил поженить Excel с SQLiteдостаточно странный, зачем женить незнакомых друг другу людей, когда есть две сестры, прекрасно знающих и работающих друг с другом, не требующих установки каких-либо драйверов?

На SQLite хочу обкатать способ прямого подключения драйверов (возможно для MySQL)... Все эти танцы с бубнами лишь из-за того, что не все организации оперативно ставят нужный софт. Вот например у меня на работе Access нет. А таким способом можно достаточно оперативно установить и работать.
...
Рейтинг: 0 / 0
08.02.2016, 14:40
    #39165588
kos20
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
anvg,

За ссылки спасибо, посмотрю...
...
Рейтинг: 0 / 0
08.02.2016, 14:41
    #39165593
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
kos20Shocker.Proповторюсьпропущено...
агрументпропущено...
пропущено...
достаточно странный, зачем женить незнакомых друг другу людей, когда есть две сестры, прекрасно знающих и работающих друг с другом, не требующих установки каких-либо драйверов?

На SQLite хочу обкатать способ прямого подключения драйверов (возможно для MySQL)... Все эти танцы с бубнами лишь из-за того, что не все организации оперативно ставят нужный софт. Вот например у меня на работе Access нет. А таким способом можно достаточно оперативно установить и работать.

для того, чтобы использовать базу акцесса не обязательно ставить сам акцесс
...
Рейтинг: 0 / 0
08.02.2016, 14:45
    #39165602
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
kos20Вот например у меня на работе Access нет.Офисная программа Access и БД mdb/accdb - это не одно и то же. Драйвер для доступа к этим базам - JET - поставляется вместе с системой, начиная с XP, и от наличия Access на машине никак не зависит.
...
Рейтинг: 0 / 0
08.02.2016, 16:00
    #39165690
kos20
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
1. Спасибо anvg за ссылочки, все работает - зашибись...
2. Зачем и для чего. Повторюсь, Accecc хорош до 100 мб, далее дикая нагрузка на сеть и жудкие тормоза. Рано или поздно нужно будет уходить от файл-клиент к серверной технологии... Сейчас данные будут в SQLite, потом просто перекину по аналогии на MySQL и ву-аля...
...
Рейтинг: 0 / 0
08.02.2016, 16:13
    #39165700
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
kos20Accecc хорош до 100 мб, далее дикая нагрузка на сеть и жудкие тормоза.У SQLite не будет дикой нагрузки на сеть и жутких тормозов при этом объеме? То есть аргументация никак не связана с вопросом. Уход на серверную СУБД при росте объема - логичное решение, но на вопрос, почему именно SQLite, не отвечает. Тем более, что предложенное решение для SQLite, как я понял, не использует ADO.
...
Рейтинг: 0 / 0
08.02.2016, 16:15
    #39165701
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
...то есть, в случае ADO при переходе на ССУБД достаточно, грубо говоря, поменять строку подключения, а в вашем случае - переписывать слой работы с данными.
...
Рейтинг: 0 / 0
08.02.2016, 16:44
    #39165738
DirksDR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Женитьба Excel и SQLite
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

...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Женитьба Excel и SQLite / 25 сообщений из 29, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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