Суперкод подключения к БД

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Суперкод подключения к БД

Сообщение MOV » 01.04.2004 (Чт) 17:46

Dim WithEvents Cn As ADODB.Connection
Dim WithEvents Rs As ADODB.Recordset

Private Sub Cn_ConnectComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
Rs1.ActiveConnection = Cn
Rs1.Source = "IR61BHED   IR Header" ' имя таблицы, к котрой
End Sub ' подключаюсь

Private Sub Form_Load()
Set Cn = New ADODB.Connection
Set Rs = New ADODB.Recordset
Cn.ConnectionString = "Provider=MSDASQL.1; Persist Security Info=False;Data Source=sam_all_demo32"
End Sub

Вот такой вот код. Это лучше чем ADODC- контрол, но с серваком все равно работает дико медленно. Склоняюсь к мысли, что на VB, используя его библиотеки и контролы, быстрее все равно не получится :? Только, если писать модуль на языке самой базы.
А может кто знает, как ускорить процесс (в таблице надо обновлять поля). Пробовали свойство Rs.Filter, но по времени получается то же самое, если не медленне.

И вот еще вопрос ведь по идее, в Rs.Source можно вставить SQL-запрос. Но драйвер ODBC ругается и не хочет его обрабатывать. Подскажите работающий синтаксис (SQL запроса)а? :) Пробовал ставить зарпос, формируемый в Access - все равно не хочет. Возможно, конечно, это сам драйвер косячит, а там к.е.з.
В общем как сделать быстрее? :?

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 01.04.2004 (Чт) 18:39

Не совсем поняла, как связаны rs.Filter и обновление полей...
SQL-запрос должен нормально кушаться. Если с ним еще не разобрался - напиши, что за запрос и какую ошибку выдает - разберемся.

По поводу скорости ничего определенного сказать не могу. Могу только дать еще пару способов работы с рекордсетом (не уверена, что это будет быстрее)

Глянь на метод у объекта Recirdset - Open. Туда передается текст запроса, активная коннекция и флаги. Флаги регулирут способ открытия рекордсета в зависимости от того, что ты собираешься с ним делать - просто просмтаривать, обновлять через методы Edit + Update, AddNew + Update или что еще...
http://msdn.microsoft.com/library/defau ... topic5.asp

Кроме способа модификации самого рекордсета, есть возможность создать объект Command и обновлять базу с помощью него (но тогда тебе грозит requery рекодрсета).
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Сообщение MOV » 02.04.2004 (Пт) 9:45

По моему, все дело в SQL запросе, может, я что-то не так пишу в нем?

Dim WithEvents Cn As ADODB.Connection
Dim WithEvents Rs1 As ADODB.Recordset
Dim Sour As String

Private Sub Cn_ConnectComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
Rs1.ActiveConnection = Cn
Rs1.CursorType = adOpenStatic
Rs1.LockType = adLockOptimistic
Rs1.Source = "SELECT [Doc #],[Item #] From [IR61BLIN IR Details] WHERE [Doc #]=" + "'" + Text1.Text + "'"
'Rs1.Source = "IR61BLIN IR Details" 'если с этой строкой (то есть просто выбираешь таблицу),
'то все работает, а с предыдущей - нет
End Sub

Private Sub Form_Load()
Set Cn = New ADODB.Connection
Set Rs1 = New ADODB.Recordset
Cn.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=sam_all_demo32"
Cn.Open
End Sub

Private Sub Command1_Click()
Rs1.Open
' Дальше процедура обновления определенных полей выбранных записей
' хотя, если он съест SQL, думаю, что можно сделать обновление
' сразу в самом запросе, но даже такой вот простой запрос не работает
' пишет дословно:
' Run-Time Error '-2147217887 (80040e21)
' Драйвер ODBC не поддерживает требуемые свойства

' Если заремить Rs1.CursorType= ... и Rs1.LockType= ...
' то тоже все работает, но, если обращаться в целом к таблице, а не запросом
' если с запросом, то пишет:
' Run-Time Error '-214721790 (80040e14)'
' [LINK]Unexpected extratoken: Details]
' и тоже бросает на Rs1.Open. Пробовал по разному, с разными ключами и без
End Sub

В общем, думаю, что проблема в SQL запросе, но ведь, если сделать SQL запрос в Accesse
То там он работает (через этот же драйвер), да и просто с таблицей в VB работает ведь и с разными ключами. Что не так, может сам MS Activex Data Objects 2.5 Librery криво работает с ODBC? :?

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 02.04.2004 (Пт) 14:04

начнем с того, что через ODBC-провайдер доступ к данным происходит намного медленнее, нежели при использовании родного провайдера. для MS SQL Server (судя по всему именно он используется) - это будет так
Код: Выделить всё
CN.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=<UserName>;Password=<Password>;Initial Catalog=<DataBaseName>;Data Source=<DataBaseServer>"

и, естественно, обнови библиотеку ADO (а точнее Microsoft Data Access Components)

да, и еще... прочитай книгу "Руководство разработчика баз данных на Visual Basic 6"
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Сообщение MOV » 02.04.2004 (Пт) 16:28

"начнем с того, что через ODBC-провайдер доступ к данным происходит намного медленнее..."
Это, кончено, понятно, но по другому никак, если только написать свой драйвер, хотя бы для необходимых таблиц, но это долго. :?
Быстрее выучить Access C (на нем написана база и, соответственно, дописав свой модуль, может что-то получится :? )

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 04.12.2005 (Вс) 20:34

Люди! Помоите пожалуйста!
Нужно сделать таблицу с определенным кол-вом столбцов и одной строкой, причем при добавлении текста в одну из ячеек строки должна добавляться другая строка. :?:
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.12.2005 (Пн) 17:23

Причём здесь базы данных и причём здесь этот топик?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList