imho.ws |
![]() |
![]() |
|
Сообщения:
Перейти к новому /
Последнее
|
Опции темы |
![]() |
# 1 | |||
Member
Регистрация: 12.07.2004
Адрес: Очень странное место.
Сообщения: 328
![]() ![]() |
Проблема с DoCmd.RunSQL ,SELECT и кнопкой "отменить" (VBA и Access)
Доброго времени суток.
Вопрос по использованию DoCmd.RunSQL. DoCmd.RunSQL("INSERT...") DoCmd.RunSQL("DELETE...") работают без проблем. А как справится с DoCmd.RunSQL("SELECT proff FROM proff_t;") Выдает ошибку Цитата:
(DoCmd.RunSQL "SELECT * FROM [имя таблицы] INTO [имя любой другой таблицы];" работает нормально.) Куда я в случае выполнения такого запроса получу результат ? Как его изменить, что бы получить что типа RecordSet ? И в каком виде ? В хелпе написано что получу обьект типа DoCmd ![]() Цитата:
И второй вопрос: Когда я выполняю любую DoCmd.RunSQL команду access переспрашивает вы точно хотите добавить-удалить-изменить столько то записей ? Отвечаешь "да" - и все ок. Отвечаешь нет - программа тут же говорит о ошибке и предлагает дебагить. Текст ошибки: Цитата:
![]() |
|||
![]() |
![]() |
# 2 |
Junior Member
Регистрация: 30.03.2003
Адрес: СПб
Сообщения: 162
![]() ![]() ![]() |
1. Если хочешь получить ответ SELECT в объект, то смотри в справке RowSource Property. Там даже примерчик есть.
2. Чтобы отключить подтверждение исполнения SQL запросов надо в меню Сервис->Параметры вкладка Правка и поиск снять галочку Подтверждение запросов на изменение. Если с RowSource не разберешься - я вечерком примерчик приведу.
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981. Все "спасибо" в репутацию ![]() |
![]() |
![]() |
# 3 |
Junior Member
Регистрация: 16.10.2002
Адрес: Россия-матушка
Пол: Male
Сообщения: 96
![]() ![]() |
Raven B.
1. Чтобы получить результат выполнения запроса, пиши так: Код:
Dim dbs As Database Dim rst As Recordset Set dbs = CurrentDb Set rst = dbs.OpenRecordset("Select * From [ConnectInfo]") Код:
DoCmd.SetWarnings False ' Действия... DoCmd.SetWarnings True
__________________
1 миллибайт = 1/1024 байта |
![]() |
![]() |
# 4 | |
Member
Регистрация: 12.07.2004
Адрес: Очень странное место.
Сообщения: 328
![]() ![]() |
2Al-x:
RowSource насколько я понял позволяет менять источник данных для ListBox,ComboBox и т.д. У меня немного другая задача. Например: пользователь выбирает в листбоксе название професии. Я селектом в программе получаю id професии. Потом получаю из таблицы - связки все id опасных факторов для данной професии. потом вывожк их в соседний listBox. И т.п. То есть селект нужен для "сложных" с логической точки зрения операций (не помите неправильно - это самый простой пример) и тех операций, при которых надо перед передачей информации пользователю ее обработать. 2LightImage: 2. прекрасно решило проблему. 1. не работает =( Пишет: Цитата:
Dim dbs As Database Что это может значить? Это еж по идее обьект DAO ? 2. Из хелпа OpenRecordset - ф-я DAO... И требует открытия соответствующего соединения. или нет ? В примере вроде как открывают. CurrentDb открывает соединение с текущей базой данных ? Стоит Office 2003. ОC win2k |
|
![]() |
![]() |
# 5 |
Junior Member
Регистрация: 30.03.2003
Адрес: СПб
Сообщения: 162
![]() ![]() ![]() |
CurrentDb - текущая открытая база. НИчего с ней дополнительно открывать не надо.
User defined type not defined ругается на то, что тип не определен. Проверь, стоит ли галочка Microsoft DAO 3.6 Object Library (ну или не 3.6 ![]() Про RecordSet пишут, что Код:
For Connection [b]and Database[b] objects:
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981. Все "спасибо" в репутацию ![]() |
![]() |
![]() |
# 6 | |
Junior Member
Регистрация: 16.10.2002
Адрес: Россия-матушка
Пол: Male
Сообщения: 96
![]() ![]() |
Raven B.
Про compiler error полностью ответил Al-x. Цитата:
1. Создаешь форму frm_Профессии, для нее источником данных ставишь "SELECT id_профессии FROM Т_Профессии". В ней создаешь listbox с именем lbx_СписокЭлементов, для него ставишь источник строк "SELECT id_профессии, НазваниеПрофессии FROM Т_Профессии". Свойство "Данные" (ControlSource) этого листбокса оставляешь пустым. Ширину столбцов листбокса ставишь "0;4" (чтобы в нем не отображалось поле id_профессии). Для него пишешь обработчик события "После обновления", который переводит текущую запись формы на выбранную профессию: Код:
Private Sub lbx_СписокЭлементов_AfterUpdate() Me.RecordsetClone.FindFirst "id_профессии=" & lbx_СписокЭлементов.Value Me.Bookmark = Me.RecordsetClone.Bookmark End Sub Код:
Private Sub Form_Current() lbx_СписокЭлементов.Value = Me!id_профессии End Sub 3. Добавляешь на форму frm_Профессии подчиненную форму, свойство "Объект-источник" для нее указываешь sfrm_ОпасныеФакторы, в свойствах "Подчиненные поля" и "Основные поля" пишешь "id_профессии". 4. Наслаждаешься полученными результатами =)
__________________
1 миллибайт = 1/1024 байта Последний раз редактировалось LightImage; 14.10.2005 в 11:16. Причина: дополнение |
|
![]() |
![]() |
# 7 | ||
Member
Регистрация: 12.07.2004
Адрес: Очень странное место.
Сообщения: 328
![]() ![]() |
Дико извиняюсь, но опять не работает.
![]() Код:
Private Sub proff_n_list_Click() Dim dbs As Database Dim rstTemp As RecordSet Dim sql_q As String Set dbs = CurrentDb sql_q = "Select ph_f_id From ph_f_n_t where ph_f_n='" + proff_n_list.Value + "';" Set rstTemp = dbs.OpenRecordset(sql_q, dbOpenForwardOnly, dbReadOnly) rstTemp.Close End Sub Цитата:
Пробовал различные type. Когда его "можно" использовать та же ошибка. Если нельзя - ругается на type... Бред какой то... Я что то еще забыл подключить ? Цитата:
Помогите пожалуста разобратся. ![]() Последний раз редактировалось Raven B.; 14.10.2005 в 12:56. |
||
![]() |
![]() |
# 8 | |
Junior Member
Регистрация: 30.03.2003
Адрес: СПб
Сообщения: 162
![]() ![]() ![]() |
Цитата:
Код:
Visual Basic For Applications Microsoft Access 11.0 Object Library OLE Automation Microsoft DAO 3.6 Object Library Microsoft ActiveX Data Objects 2.1 Library
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981. Все "спасибо" в репутацию ![]() |
|
![]() |
![]() |
# 9 | |
Member
Регистрация: 12.07.2004
Адрес: Очень странное место.
Сообщения: 328
![]() ![]() |
У меня
Цитата:
2Al-x: ВЫ ГЕНИЙ. Все работает !!!! Порядок действительно имет значение =) ![]() Единственное что плохо - это невозможность еще раз поднять вам репутацию. =) ![]() Еще один вопрос по ходу. я получаю записи таким образом: For Each fldLoop In rst.Fields MsgBox fldLoop.Name & " - " & fldLoop.Value Next fldLoop Вроде бы показывает все записи попавшие в выборку. Это так или это только кажется ![]() |
|
![]() |
![]() |
# 10 | |
Junior Member
Регистрация: 30.03.2003
Адрес: СПб
Сообщения: 162
![]() ![]() ![]() |
Цитата:
![]() Эта конструкция выводит список полей со значениями первой записи. Я думаю, что имелось ввиду вот это (id и val имена полей в таблице): Код:
With rst Do MsgBox !id & " - " & !Val .MoveNext Loop Until .EOF = True End With
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981. Все "спасибо" в репутацию ![]() |
|
![]() |
![]() |
# 11 |
Guest
Сообщения: n/a
|
столкнулся с той же проблемой. Прочитал все выше сказанное, попробывал сделать по анологии с Raven B.! в результате ничего не происходит, программа доходит весь код и просто закрывается, не выводя ни запрос, ни ошибки!
С чем это может быть связано? Подскажите кто чем может, на вас последняя надежда. |