Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2009, 11:48   #1
eda
Пользователь
 
Регистрация: 14.08.2008
Сообщений: 78
По умолчанию Асинхронная передача данных

Скажите, пожалуйста, как можно выполнить асинхронную передачу данных с помощью ADODB.Recordset? Какой метод применяется? Может, естьк акие-нибудь полезные ссылки по этой теме?
eda вне форума Ответить с цитированием
Старый 17.08.2009, 13:11   #2
GES
Пользователь
 
Регистрация: 27.08.2008
Сообщений: 23
По умолчанию

Function GetIdAdd(ByVal What As String, ByVal Table As String, ByVal Fld As String, ByVal Name As String) As Long
Dim SQL As String
Dim Recordset As ADODB.Recordset
Dim Command As ADODB.Command
'пример
'What = КодЗаписи
'Table = Таблица
'Fld = ЗначениеЗаписиВТаблице
'Name = Условие
'выборка---------------------------------------------------------------------------------------------
Set Recordset = New Recordset
SQL = "SELECT " & What & " " & _
"FROM " & Table & " " & _
"WHERE " & Fld & " = '" & Name & "'"
Call Recordset.Open(SQL, ConnectionString, CursorTypeEnum.adOpenForwardOnly, _
LockTypeEnum.adLockReadOnly, CommandTypeEnum.adCmdText)
If Not Recordset.EOF Then
GetIdAdd = Recordset.Fields(0)
Else
Set Command = New ADODB.Command
Command.ActiveConnection = ConnectionString
SQL = "INSERT INTO " & Table & " (" & Fld & ") " _
& "VALUES ('" & Name & "')"
Call ExecuteCommand(Command, SQL)
Command.CommandText = "SELECT @@IDENTITY"
Set Recordset = Command.Execute(Options:=CommandTyp eEnum.adCmdText)
GetIdAdd = Recordset.Fields(0).Value
Command.ActiveConnection.Close
Set Command = Nothing
End If
Set Recordset = Nothing
End Function

По-моему асинхронная запись осуществляется с помощью command. Там нужно с параметрами поэксперементировать.

Public Property Get ConnectionString() As String
Dim strDB As String
strDB = "C:\BASE.mdb"
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;D ata Source=" & strDB & ";Persist Security Info=False"
End Property

Public Sub ExecuteCommand(ByVal Command As ADODB.Command, ByVal CommandText As String)
Command.CommandText = CommandText
Call Command.Execute(, , CommandTypeEnum.adCmdText Or ExecuteOptionEnum.adExecuteNoRecord s)
End Sub

Две последних процедуры нужны для работы 1й
Не забудь в Tools->References выбрать Microsoft ActiveX Data Objects 2.x Library
GES вне форума Ответить с цитированием
Старый 17.08.2009, 13:15   #3
GES
Пользователь
 
Регистрация: 27.08.2008
Сообщений: 23
По умолчанию

Собственно функция GetIdAdd ищет и возвращает ID записи в таблице access и если такой записи не существует, то добавляет ее и возвращает ID добавленной записи...
GES вне форума Ответить с цитированием
Старый 17.08.2009, 13:58   #4
eda
Пользователь
 
Регистрация: 14.08.2008
Сообщений: 78
По умолчанию

Спасибо!!! Но вот только у меня вопрос. Когда я запустила код, то в какие-то моменты чтения данных из рекордсета возникает ошибка "Операция не допускается, если объект закрыт", но буквально через секунду чтение восстанавливается в том же месте кода. Как с этим справиться?
eda вне форума Ответить с цитированием
Старый 17.08.2009, 14:16   #5
GES
Пользователь
 
Регистрация: 27.08.2008
Сообщений: 23
По умолчанию

Call Command.Execute(, , CommandTypeEnum.adCmdText Or ExecuteOptionEnum.AdAsyncExecute)
Вроди так, но нужно проверить...
Для асинхронных действий код больше и в набранном виде его у меня нет...пользую литературу Excel 2003 и VBA Поищи коды на www.wrox.com там должны быть...
А вообще лучше дописать чтоб при такой ошибке повторялась попытка записи или чтения (что не получается?) через goto
GES вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передача данных bbk_serg БД в Delphi 6 15.04.2009 14:23
Передача данных по ЛС PONKA Работа с сетью в Delphi 1 27.11.2008 09:57
Передача данных Ivanich JavaScript, Ajax 1 29.04.2008 00:25
Передача данных ChipLink Общие вопросы Delphi 4 06.01.2008 11:28