powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Женитьба Excel и SQLite
25 сообщений из 29, страница 1 из 2
Женитьба Excel и SQLite
    #39163747
kos20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем снова здрасте!
Сразу опишу суть проблемы. Мне по работе нужно на первом этапе подготавливать некий объём информации (порой он может быть значительным до 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
Женитьба Excel и SQLite
    #39163759
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kos20но вот как выгрузить данные поле получения"поле" - это "после"? И что имеется ввиду под "выгрузить"? из полученного рекордсета в на лист экселя? или выгрузить измененные данные обратно в базу?

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

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

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

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

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

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

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

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

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

Я же писал - не надейся на экстрасенсов. Задавать встречные вопросы надоедает после третьего.
...
Рейтинг: 0 / 0
Женитьба Excel и SQLite
    #39164218
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Женитьба Excel и SQLite
    #39164343
anvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Женитьба Excel и SQLite
    #39165261
kos20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Женитьба Excel и SQLite
    #39165264
kos20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Женитьба Excel и SQLite
    #39165308
anvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток
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
Женитьба Excel и SQLite
    #39165343
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
повторюсьShocker.Proда, и чем обусловлен выбор SQLite? Почему не традиционно accdb?агрументkos20лучше все же в БДkos20решил поженить Excel с SQLiteдостаточно странный, зачем женить незнакомых друг другу людей, когда есть две сестры, прекрасно знающих и работающих друг с другом, не требующих установки каких-либо драйверов?
...
Рейтинг: 0 / 0
Женитьба Excel и SQLite
    #39165586
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proзачем женить незнакомых друг другу людей, когда есть две сестры, прекрасно знающих и работающих друг с другомзадумался...
...
Рейтинг: 0 / 0
Женитьба Excel и SQLite
    #39165587
kos20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProповторюсьShocker.Proда, и чем обусловлен выбор SQLite? Почему не традиционно accdb?агрументkos20лучше все же в БДkos20решил поженить Excel с SQLiteдостаточно странный, зачем женить незнакомых друг другу людей, когда есть две сестры, прекрасно знающих и работающих друг с другом, не требующих установки каких-либо драйверов?

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

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

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

для того, чтобы использовать базу акцесса не обязательно ставить сам акцесс
...
Рейтинг: 0 / 0
Женитьба Excel и SQLite
    #39165602
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kos20Вот например у меня на работе Access нет.Офисная программа Access и БД mdb/accdb - это не одно и то же. Драйвер для доступа к этим базам - JET - поставляется вместе с системой, начиная с XP, и от наличия Access на машине никак не зависит.
...
Рейтинг: 0 / 0
Женитьба Excel и SQLite
    #39165690
kos20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Спасибо anvg за ссылочки, все работает - зашибись...
2. Зачем и для чего. Повторюсь, Accecc хорош до 100 мб, далее дикая нагрузка на сеть и жудкие тормоза. Рано или поздно нужно будет уходить от файл-клиент к серверной технологии... Сейчас данные будут в SQLite, потом просто перекину по аналогии на MySQL и ву-аля...
...
Рейтинг: 0 / 0
Женитьба Excel и SQLite
    #39165700
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kos20Accecc хорош до 100 мб, далее дикая нагрузка на сеть и жудкие тормоза.У SQLite не будет дикой нагрузки на сеть и жутких тормозов при этом объеме? То есть аргументация никак не связана с вопросом. Уход на серверную СУБД при росте объема - логичное решение, но на вопрос, почему именно SQLite, не отвечает. Тем более, что предложенное решение для SQLite, как я понял, не использует ADO.
...
Рейтинг: 0 / 0
Женитьба Excel и SQLite
    #39165701
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...то есть, в случае ADO при переходе на ССУБД достаточно, грубо говоря, поменять строку подключения, а в вашем случае - переписывать слой работы с данными.
...
Рейтинг: 0 / 0
Женитьба Excel и SQLite
    #39165738
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
25 сообщений из 29, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Женитьба Excel и SQLite
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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