Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Почему не работает OpenRecordset?
 
 автор: Glebozzz   (21.07.2007 в 11:10)   личное сообщение
 
 

Голову сломал. Очень долго пытался разобраться сам, но видимо во всем существует предел. Помогите разобраться.
Пытаюсь открыть таблицу в ДБ для чтения через DAO. Не открывает. Думал что-то в инструкции SQL напутал - купил книжку, прочитал. Вроде бы все правильно. Почему пишет ошибку "Объект ... не найден ядром БД... проверьте правильность имени и пути"?

Option Compare Database
Option Explicit
Public Function MadeString() As String
Dim rst As DAO.Recordset
Dim Str As String
Dim FullStr As String
Dim StrNum As Byte
Dim strSQL As String

strSQL = "SELECT  ОтгрузкаПодробности.Продукция FROM ОтгрузкаПодробности WHERE Номер_накладной = [Forms]![Отгрузка]![Номер накладной];"
'сылка на текущую базу данных.
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenTable)
'переходим к первой записи.
FullStr = Empty
StrNum = 1
With rst
    .MoveLast 'Заполнение набора записями
    .MoveFirst 'Возврат в начало
    Do Until .EOF
        Str = ![Продукция]
        FullStr = FullStr & StrNum & ") " & Str & "; "
        StrNum = StrNum + 1
        .MoveNext
    Loop
    .Close
End With
Set rst = Nothing
End Function

На выделенной строчке выдает ошибку "объект ... не найден..."
База не разделена. В базе таблица "ОтгрузкаПодробности" а в ней поле "Продукция" точно есть. Функцию запускаю из формы "Отгрузка" по нажатию кнопки.
Попытался прикрепить полностью базу на slil.ru - почему-то не получилось.Пробовал и сжимать и просто целую - никак.
Подскажите кто чем может, что делать с OpenRecordset, и если это "глюк" Acceess, как победить?
Заранее благодарен всем откликнувшимся.
С уважением Glebozzz.

  Ответить  
 
 автор: ГлазастыйМышь   (21.07.2007 в 11:54)   личное сообщение
 
 

попробуй так
если Номер_накладной числовое значение, то

strSQL = "SELECT  ОтгрузкаПодробности.Продукция FROM ОтгрузкаПодробности WHERE Номер_накладной = " & [Forms]![Отгрузка]![Номер накладной]

иначе заключи значение в апострофы

strSQL = "SELECT  ОтгрузкаПодробности.Продукция FROM ОтгрузкаПодробности WHERE Номер_накладной = '" & [Forms]![Отгрузка]![Номер накладной] & "'"

  Ответить  
 
 автор: Glebozzz   (22.07.2007 в 20:15)   личное сообщение
 
 

Спасибо огромное все пошло.
А к чему вообще эти апострофы?
хотя, в общем не суть - главное - работает!!!

  Ответить  
 
 автор: Силыч   (22.07.2007 в 22:17)   личное сообщение
 
 

>>хотя, в общем не суть - главное - работает!!!
если честно, то после такой фразы, обычно, отпадает охота обяснять "программисту" что-либо еще.

  Ответить  
 
 автор: Glebozzz   (23.07.2007 в 10:16)   личное сообщение
 
 

Ребята, не обижайтесь ради бога. Не всегда получается письменно изложить что думаешь, никого при этом не обидев.
Я так понимаю, здесь и все не от хорошей жизни вопросы задают. Только когда очень надо, а ума своего не хватает.
Если нет желания с придурками общаться - ну подскажите книжку умную по DAO или ADO. Книжки - они не обидчивые.

ГлазастыйМышь - вам - спасибо огромное.

  Ответить  
 
 автор: Explorer   (23.07.2007 в 15:17)   личное сообщение
 
 

в данном конкретном случае DAO или ADO не причем

речь идет о синтаксисе построения выражений и правилах их оформления.

еще более конкретно приведение типа данных

  Ответить  
 
 автор: Анатолий (Киев)   (23.07.2007 в 14:47)   личное сообщение
 
 

Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenTable)
В вашем случае dbOpenTable - аргумент неправильный. Это в случае, если открывается родная таблица (не прилинкованная) и указывается ее имя.
В остальных случаях dbOpenDynaset, или (если только прочитать данные, как в вашем примере, или набор записей заведомо необновляемый, например - с группировками) dbOpenSnapshot, или (если делать только .MoveNext) dbOpenForwardOnly.
DAO сам проверяет допустимый тип, но лучше сразу сделать правильно.

  Ответить  
 
 автор: Glebozzz   (24.07.2007 в 09:08)   личное сообщение
 
 

Ребята, спасибо. То, что dbOpenTable - неправильно я "допер" сам. Все действительно работает. Что характерно - нормально работает даже если второй аргумент в OpenRecordset просто опустить.
Всем спасибо огромное.
Тема закрыта.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList