powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / vb6 ado простой доступ к бд (помогите разобраться)
17 сообщений из 17, страница 1 из 1
vb6 ado простой доступ к бд (помогите разобраться)
    #35118504
Eric-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пожалуйста, дайте простой пример для выборки и добавления записи в базу данных, с использованием vb6 ado.

Меня интересует программный способ ( связанные элементы формы это не то.).

Английский знаю плохо, по этому запутался в msdn.

Смог выудить частично понятную информацию. Но применить к делу затрудняюсь. Поскольку даже не понимаю, что и где объявлять.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
dim rs ...
set rs ...
 

strSQL = "SELECT * FROM authors"
RS.Open strSQL, Conn 'открываем Recordset
RS.AddNew
RS("firstname") = ""
RS("lastname") = "anonimous"
RS.Update
RS.Close
...
Рейтинг: 0 / 0
vb6 ado простой доступ к бд (помогите разобраться)
    #35118554
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dim rs As New ADODB.Recordset
Dim con As New ADODB.Connection

con.Open " строка соединения"
With rs
.ActiveConnection = con
.CursorLocation = adUseClient
.CursorType = adOpenDynamic
.LockType = adLockBatchOptimistic
.Open "SELECT * FROM authors"
.AddNew
.Fields("firstname").Value = ""
.Fields("anonimous").Value = "anonimous"
.UpdateBatch
End With
rs.Close
con.Close

Set rs = Nothing
Set con = Nothing
...
Рейтинг: 0 / 0
vb6 ado простой доступ к бд (помогите разобраться)
    #35118633
Eric-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я вероятно, что-то не правильно сделал.
Compile error:
User-defined type not defined

На строке
Dim rs As New ADODB.Recordset

У меня в другой программе было:
dim oCat As ADOX.Catalog

Возможно я где-то на путал? Было ADOX, а стало adodb

И строка подключения, не знаю, что правильно писать, сделал:
Код: plaintext
1.
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\einfodrom.mdb"

Я раньше кодил на php + mysql, там совсем всё по другому. А тут сел за vb6 и теперь в полном ступоре от работы с базами данных. Думал, что начал немного понимать, но похоже, что это весьма далеко от правды.

Опишу задачу полностью.
программа должна работать со списком авторов.


Код: plaintext
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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
' подключиться к базе
dim conn As ADOX.Catalog

' создать базу
conn.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\einfodrom.mdb"

' открыть её
conn.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\einfodrom.mdb"

' создать таблицу
      Dim oTable As New Table
      oTable.Name = "authors"
conn.Tables.Append oTable
conn.Tables("authors").Columns.Append "id", adInteger
conn.Tables("authors").Columns.Append "firstname", adVarWChar
conn.Tables("authors").Columns.Append "lastname", adVarWChar
Set oTable = Nothing


' добавить автора
Dim rs As New ADODB.Recordset
With rs
.ActiveConnection = con
.CursorLocation = adUseClient
.CursorType = adOpenDynamic
.LockType = adLockBatchOptimistic
.Open "SELECT * FROM authors"
.AddNew
.Fields("ID").Value =  1 
.Fields("firstname").Value = ""
.Fields("anonimous").Value = "anonimous"
.UpdateBatch
End With
rs.Close
con.Close
Set rs = Nothing


' как-то вывести в список все записи

If RS.BOF = True Or RS.EOF = True Then 'данных нет
label1.caption = "<br>данные отсутствуют<br>"
Else 'данные есть
RS.MoveLast
RS.MoveFirst
label1.caption = "всего записей в базе данных: " & RS.RecordCount
Do While Not RS.EOF 'перебираем все записи
'проверяем, достигнут ли конец базы данных
'если да, то выходим из цикла
If RS.BOF = True Or RS.EOF = True Then Exit Do
list1.addItem(RS.Fields("lastName")
RS.MoveNext
Loop
End If

' отключится от базы
Set con = Nothing
...
Рейтинг: 0 / 0
vb6 ado простой доступ к бд (помогите разобраться)
    #35118830
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на какой строке ошибаеться?
добавь в референсах MS ActiveX Data Objects
и MS ADO Ext. for DLL and Securety
...
Рейтинг: 0 / 0
vb6 ado простой доступ к бд (помогите разобраться)
    #35119124
Eric-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создал ещё один тестовый проект. Код ниже.
Он же в прекреплённом архиве.

Run-time error '91':
Object variable or With block variable not set

Не встаёт на строчку. Курсор в начале кода.

Ошибок куча, и какую как лечить, не имею понятия.

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

Код: plaintext
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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
Option Explicit

Private Sub Form_Load()

Me.AutoRedraw = True
Form1.Caption = "AUTHORS"


' подключиться к базе
Dim con As ADOX.Catalog
      Dim rs As New ADODB.Recordset
Dim oTable As New Table

' создать базу
con.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\einfodrom.mdb"

' открыть её
con.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\einfodrom.mdb"

' создать таблицу
            oTable.Name = "authors"
con.Tables.Append oTable
con.Tables("authors").Columns.Append "id", adInteger
con.Tables("authors").Columns.Append "firstname", adVarWChar
con.Tables("authors").Columns.Append "lastname", adVarWChar
Set oTable = Nothing


' добавить автора
With rs
.ActiveConnection = con
.CursorLocation = adUseClient
.CursorType = adOpenDynamic
.LockType = adLockBatchOptimistic
.Open "SELECT * FROM authors"
.AddNew
.Fields("ID").Value =  1 
.Fields("firstname").Value = ""
.Fields("anonimous").Value = "anonimous"
.UpdateBatch
End With
rs.Close



' как-то вывести в список все записи

If rs.BOF = True Or rs.EOF = True Then 'данных нет
Label1.Caption = "<br>данные отсутствуют<br>"
Else 'данные есть
rs.MoveLast
rs.MoveFirst
Label1.Caption = "всего записей в базе данных: " & rs.RecordCount
Do While Not rs.EOF 'перебираем все записи
'проверяем, достигнут ли конец базы данных
'если да, то выходим из цикла
If rs.BOF = True Or rs.EOF = True Then Exit Do
List1.AddItem (rs.Fields("lastName"))
rs.MoveNext
Loop
End If

' отключится от базы
Set rs = Nothing
Set con = Nothing

End Sub

...
Рейтинг: 0 / 0
vb6 ado простой доступ к бд (помогите разобраться)
    #35119398
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для работы с Dim rs As New ADODB.Recordset
надо библиотеку подключать Microsoft ActiveX Data Object XXXX

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
vb6 ado простой доступ к бд (помогите разобраться)
    #35119471
Eric-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я подключил:
Microsoft ActiveX Data Objects 2.8 Library
Microsoft ADO Ext. 2.8 for DDL and Security
Это не то? А тогда что мне подключать и главное как?
...
Рейтинг: 0 / 0
vb6 ado простой доступ к бд (помогите разобраться)
    #35120146
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если добавить строку
Код: plaintext
1.
' создать базу
Set con = New ADOX.Catalog

и дописать
Код: plaintext
1.
With rs
.ActiveConnection = con.ActiveConnection

и такого поля в таблице у Вас нет
Код: plaintext
.Fields("anonimous").Value = "anonimous"
возможно имели ввиду lastname

после того как Вы сделали rs.Close
в строке
Код: plaintext
If rs.BOF = True Or rs.EOF = True Then 'данных нет
будет ошибка
либо не закрывайте рекордсет, либо открывайте его вновь

в остальном вроде ошибок нет

?

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
vb6 ado простой доступ к бд (помогите разобраться)
    #35121038
Eric-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В очередной раз переделываю. Выбросил всё лишнее и стал добавлять до первой ошибки с которой не могу справится.

Run-time error '3001':
Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом.

Ошибка на строке
Код: plaintext
1.
.ActiveConnection = con

Вот новый код:
Код: plaintext
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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
Dim con As ADOX.Catalog
      Dim rs As New ADODB.Recordset
Dim oTable As New Table

' удаляем файл базы иначе выскакивает ошибка
Kill "einfodrom.mdb"

' подключение к базе данных
Set con = New ADOX.Catalog

' создание базы
con.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\einfodrom.mdb"

' делаем базу активной
con.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\einfodrom.mdb"

' создать таблицу
            oTable.Name = "authors"
con.Tables.Append oTable
' возможно я неправильно выбрал тип данных,
' хотел то что называется text в mysql
con.Tables("authors").Columns.Append "NAME", adVarWChar
Set oTable = Nothing

' добавить автора
' ошибка появилась, когда я добавил этот блок
With rs
.ActiveConnection = con
.CursorLocation = adUseClient
.CursorType = adOpenDynamic
.LockType = adLockBatchOptimistic
.Open "SELECT * FROM authors"
.AddNew
.Fields("NAME").Value = "anonimous"
.UpdateBatch
End With
' rs.Close

' отключится от базы
Set rs = Nothing
Set con = Nothing
...
Рейтинг: 0 / 0
vb6 ado простой доступ к бд (помогите разобраться)
    #35121108
Eric-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HandKotа если добавить строку
Код: plaintext
1.
' создать базу
Set con = New ADOX.Catalog

и дописать
Код: plaintext
1.
With rs
.ActiveConnection = con.ActiveConnection

А разве
Код: plaintext
1.
Dim con As ADOX.Catalog
делает не тоже самое?


и такого поля в таблице у Вас нет
Код: plaintext
.Fields("anonimous").Value = "anonimous"
возможно имели ввиду lastname

Совершенно верно. Скопировал код и не обратил внимания, что название поменялось.


после того как Вы сделали rs.Close
в строке
Код: plaintext
If rs.BOF = True Or rs.EOF = True Then 'данных нет
будет ошибка
либо не закрывайте рекордсет, либо открывайте его вновь

На счёт закрытия понял rs.close , А как заново открывать?
...
Рейтинг: 0 / 0
vb6 ado простой доступ к бд (помогите разобраться)
    #35121570
Фотография Fatty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так

Код: plaintext
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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
Sub MakeDBTable()

Dim cat As ADOX.Catalog
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strSQL As String
Dim oTable As New Table

On Error Resume Next

Kill CurrentProject.Path & "\Books.mdb"
If Err Then
Err.Clear
End If
On Error GoTo  0 

Set cat = New ADOX.Catalog
Set rs = New ADODB.Recordset
Set con = New ADODB.Connection

cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.Path & "\Books.mdb"
strSQL = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.Path & "\Books.mdb"
con.Open strSQL
Set cat.ActiveConnection = con

oTable.Name = "authors"
cat.Tables.Append oTable

cat.Tables("authors").Columns.Append "NUM_ID", adInteger,  7 
cat.Tables("authors").Columns.Append "AUTHOR", adVarWChar,  50 
cat.Tables("authors").Columns.Append "BOOK", adVarWChar,  50 
Set oTable = Nothing

With rs
.ActiveConnection = con
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockPessimistic
.Open "authors"
.AddNew
.Fields("NUM_ID").Value = "777"
.Fields("AUTHOR").Value = "А.С.Шибко-Умный"
.Fields("BOOK").Value = "Воспоминания сивой К."
.Update
End With

rs.Close
Set rs = Nothing
con.Close
Set con = Nothing
Set cat = Nothing

End Sub

~'J'~
...
Рейтинг: 0 / 0
vb6 ado простой доступ к бд (помогите разобраться)
    #35121649
Eric-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю за помощь! И за то что не ругались, на мою непонятливость.

Я сделал, оно даже заработало и показало, так как я хотел! Некоторые места остались непонятными, но надеюсь дальше разберусь сам.

Код: plaintext
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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
Option Explicit

Private Sub Form_Load()



Me.AutoRedraw = True
Form1.Caption = "AUTHORS"


Dim cat As ADOX.Catalog
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strSQL As String
Dim oTable As New Table

On Error Resume Next

Kill "C:\Books.mdb"
If Err Then
Err.Clear
End If
On Error GoTo  0 

Set cat = New ADOX.Catalog
Set rs = New ADODB.Recordset
Set con = New ADODB.Connection

cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\Books.mdb"

strSQL = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\Books.mdb"
con.Open strSQL
Set cat.ActiveConnection = con

oTable.Name = "authors"
cat.Tables.Append oTable

cat.Tables("authors").Columns.Append "NUM_ID", adInteger,  7 
cat.Tables("authors").Columns.Append "AUTHOR", adVarWChar,  50 
cat.Tables("authors").Columns.Append "BOOK", adVarWChar,  50 
Set oTable = Nothing

With rs
.ActiveConnection = con
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockPessimistic
.Open "authors"
.AddNew
.Fields("NUM_ID").Value = "777"
.Fields("AUTHOR").Value = "А.С.Шибко-Умный"
.Fields("BOOK").Value = "Воспоминания сивой К."
.Update
.Close
End With


' выводим в список авторов
With rs
.ActiveConnection = con
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockPessimistic
.Open "authors"

If .BOF = True Or .EOF = True Then 'данных нет
Label1.Caption = "<br>данные отсутствуют<br>"
Else 'данные есть
.MoveLast
.MoveFirst
Label1.Caption = "всего записей в базе данных: " & Str(.RecordCount)
Do While Not .EOF 'перебираем все записи
'проверяем, достигнут ли конец базы данных
'если да, то выходим из цикла
If .BOF = True Or .EOF = True Then Exit Do
List1.AddItem (.Fields("author"))
.MoveNext ' следующий
Loop
End If
.Close
End With

Set rs = Nothing
con.Close
Set con = Nothing
Set cat = Nothing

End Sub
...
Рейтинг: 0 / 0
vb6 ado простой доступ к бд (помогите разобраться)
    #35122702
Eric-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стыдно даже признаться, что я искал, но к сожалению так и не нашел текста понятного про ado. Даже примера нужных мне функций. Чуствую себя некуда негодным растяпой.

Мне сейчас нужно две проверки. существует ли база и таблица.

В крайнем случае можно обрабатывать исключения on error.

Наличие же базы, конечно можно проверить, посмотрев есть ли файл *.mdb или нет. Но это же совсем не правильно!

Подскажите пожалуйста, как правильно?! Наверняка же есть методы!

p.s.
Также буду благодарен если вы подскажите, где можно взять справочник ado для vb6, желательно русский.
...
Рейтинг: 0 / 0
vb6 ado простой доступ к бд (помогите разобраться)
    #35122849
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Sub OpenBase()
Dim strSQL As String
Dim cnn As Connection
    On Error GoTo errH
    strSQL = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\fuckingbase.mdb"
    Set cnn = New Connection
    cnn.ConnectionString = strSQL
    cnn.Open
    cnn.Close
errH:
    MsgBox Err.Description, vbCritical + vbOKOnly, "ADO Connect failed"

End Sub
...
Рейтинг: 0 / 0
vb6 ado простой доступ к бд (помогите разобраться)
    #35123412
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно без применения on error так

Код: plaintext
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.
28.
29.
Private Sub Command1_Click()
If ExistsFile("C:\Books.mdb") = True Then
    If ExistsTable("authors") = True Then
        Debug.Print "Есть таблица"
    Else
        Debug.Print "Нет такой таблицы"
    End If
Else
  Debug.Print "Файл не найден"
End If
End Sub

Public Function ExistsFile(strPath As String) As Boolean ' проверка на наличие файла
If Dir(strPath) <> Empty Then
    ExistsFile = True
End If
End Function

Public Function ExistsTable(strTableName As String) As Boolean ' проврка на наличие таблицы
Dim cat As New ADOX.Catalog
Dim i As Long
cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Books.mdb"
For i =  0  To cat.Tables.Count -  1 
    If UCase(cat.Tables(i).Name) = UCase(strTableName) Then
        ExistsTable = True
        Exit For
    End If
Next i
Set cat = Nothing
End Function
...
Рейтинг: 0 / 0
vb6 ado простой доступ к бд (помогите разобраться)
    #35123843
Eric-S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это я и называю извращенством!
Но последний способ, где перебираются все таблицы, мне нравится больше.

Сейчас попробую запихать, ваши функции, в проект и посмотрю, как оно будет работать.

В мускуле помнится писал просто
create table if not exist …
И одной строчкой создавал таблицу, если её небыло.

А ведь ado можно подключать не только к acces *.mdb, но и вроде даже к mssql или mysql? И тогда эти способы загнутся?

p.s.
Просто рассуждения. После кодинга для веб ломает переходить на обычные приложения. Всё время так и тянет, разбивать всё на страницы. А оно же ведь единое и неразделимое! И можно забыть о всяких сессиях.

И даже бд можно подключить при запуске программы, а отключить при выгрузке? Только как быть если бд будет нужна в нескольких потоках?
...
Рейтинг: 0 / 0
vb6 ado простой доступ к бд (помогите разобраться)
    #35125715
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проверку таблиц лучше производить встроенным методом ADO
Код: plaintext
OpenSchema


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / vb6 ado простой доступ к бд (помогите разобраться)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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