![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 14.08.2008
Сообщений: 78
|
![]()
Скажите, пожалуйста, как можно выполнить асинхронную передачу данных с помощью ADODB.Recordset? Какой метод применяется? Может, естьк акие-нибудь полезные ссылки по этой теме?
|
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 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 |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 27.08.2008
Сообщений: 23
|
![]()
Собственно функция GetIdAdd ищет и возвращает ID записи в таблице access и если такой записи не существует, то добавляет ее и возвращает ID добавленной записи...
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 14.08.2008
Сообщений: 78
|
![]()
Спасибо!!! Но вот только у меня вопрос. Когда я запустила код, то в какие-то моменты чтения данных из рекордсета возникает ошибка "Операция не допускается, если объект закрыт", но буквально через секунду чтение восстанавливается в том же месте кода. Как с этим справиться?
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 27.08.2008
Сообщений: 23
|
![]()
Call Command.Execute(, , CommandTypeEnum.adCmdText Or ExecuteOptionEnum.AdAsyncExecute)
Вроди так, но нужно проверить... Для асинхронных действий код больше и в набранном виде его у меня нет...пользую литературу Excel 2003 и VBA Поищи коды на www.wrox.com там должны быть... А вообще лучше дописать чтоб при такой ошибке повторялась попытка записи или чтения (что не получается?) через goto |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
передача данных | 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 |