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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Война с запросом VBA
 
 автор: Гоблин   (23.10.2009 в 22:47)   личное сообщение
14 Кб.
 
 

Всем привет.
Текст DoCmd.RunSQL "SELECT Таблица1.Поле1, Таблица1.Поле2, Таблица1.Поле3 FROM Таблица1; ", -1
Выдает это.

Так же точно запрос выглядит в модуле если преобразовать макрос запустить SQL запрос.

Чего ему надо?

  Ответить  
 
 автор: Lukas   (23.10.2009 в 23:03)   личное сообщение
 
 


Метод RunSQL выполняет макрокоманду ЗапускЗапросаSQL (RunSQL) в программе Visual Basic.

DoCmd.RunSQL инструкцияSQL[, использоватьТранзакцию]

ИнструкцияSQL - строковое выражение, представляющее допустимую инструкцию SQL
для запроса на изменение или управляющего запроса.
В этой инструкции используются инструкции INSERT INTO, DELETE, SELECT...INTO, UPDATE,
CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, или DROP INDEX.
Для доступа к другой базе данных следует использовать предложение IN.

  Ответить  
 
 автор: ShadowOfSun   (23.10.2009 в 23:06)   личное сообщение
 
 

Ошибка в том, что RunSQL предназначен для создания и изменения данных,
а твой запрос на отображение

В хелпе это написано:

RunSQL Method
See AlsoApplies ToExampleSpecificsThe RunSQL method carries out the RunSQL action in Visual Basic.

expression.RunSQL(SQLStatement, UseTransaction)
expression    Required. An expression that returns one of the objects in the Applies To list.

SQLStatement   Required Variant. A string expression that's a valid SQL statement for an action query (Запрос на изменение. Запрос, в котором выполняется копирование или изменение данных. В число запросов на изменение входят запросы на добавление, на удаление, на создание таблицы и на обновление. Такие запросы отмечаются в окне базы данных восклицательным знаком (!) рядом с именем запроса.) or a data-definition query (Управляющий запрос. Запрос SQL, содержащий инструкции языка описания данных DDL (Data Definition Language). Такие инструкции позволяют создавать или изменять объекты в базе данных.). It uses an INSERT INTO, DELETE, SELECT...INTO, UPDATE, CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, or DROP INDEX statement. Include an IN clause if you want to access another database.


  Ответить  
 
 автор: Гоблин   (23.10.2009 в 23:31)   личное сообщение
 
 

Спасибо все. Стало быть для просмотра данных запроса из VBA его надо присвоить в качестве источника строк форме.
Пытался на загрузку свободной формы. Но там полям тоже надо что-то присваивать. (Или я что-то не понял или одно из двух)
Me.Form.RecordSource = "SELECT Таблица1.Поле1, Таблица1.Поле2, Таблица1.Поле3 FROM Таблца1; " - ничего на выходе.

Вопрос к Лукас. В примерчике по спискам как создается запрос ясно. Но как он запускается в итоге? Или присваивается открываемым отчетам че-то расшифровке слабо поддается.

Плиз ткнуть носом. Если не трудно.

  Ответить  
 
 автор: Lukas   (24.10.2009 в 00:59)   личное сообщение
 
 

Из примера с флажками, модуль отчета:

Private Sub Report_Open(Cancel As Integer)
    Dim i As Integer
    Dim CountFields As Integer
    Dim rst As DAO.Recordset
    Dim intWidth As Integer
    
    Me.RecordSource = Nz(Me.OpenArgs, "SELECT * FROM tbl1") 'Присвоили отчету источник, переданный через OpenArgs

 'Откроем набор данных на основе источника отчета (без записей) для считывания свойств полей
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM (" & Me.RecordSource & ") WHERE False", dbOpenSnapshot)
        CountFields = rst.Fields.Count
        intWidth = Me.Width \ CountFields
        For i = 1 To CountFields
            With Me.Controls("lbl" & i)
                .Caption = rst.Fields(i - 1).Properties("Caption") 'Присвоили меткам подпись из свойства Caption полей набора данных
                .Visible = True
                .Left = (i - 1) * intWidth
                .Width = intWidth
            End With
            With Me.Controls("txt" & i)
                .Visible = True
                .Left = (i - 1) * intWidth
                .Width = intWidth
                .ControlSource = rst.Fields(i - 1).Name 'Присвоили источник (поле запроса/таблицы) текстовом полям (контролам) отчета.
            End With
        Next i
    rst.Close
    Set rst = Nothing
End Sub

  Ответить  
 
 автор: Гоблин   (24.10.2009 в 08:59)   личное сообщение
 
 

Ой ё. Спасибо.
Как все сложно-то на самом деле. Без бутылки не понять.
Спасибо. Пойду разбирать.

PS А ведь данный пример упустил из виду. Все со списками воюю. Спасибо за пояснения.

  Ответить  
 
 автор: Lukas   (24.10.2009 в 15:35)   личное сообщение
 
 

На самом деле это очень простой пример, с минимальными возможностями.
В рабочем отчете кода на 5-6 экранов.
Попробуй вывод в Excel или Html/Xml, может, проще будет.

  Ответить  
 
 автор: Гоблин   (24.10.2009 в 16:07)   личное сообщение
 
 

Трудно сказать что проще. Выход в своей ситуевине давно нашел - сводная табла. Но вот данную штуку по составлению динамического запроса и потом... (еще толком не знаю что с ним делать) весьма интересно применить.

  Ответить  
 
 автор: snipe   (24.10.2009 в 16:43)   личное сообщение
 
 

давным давно делал такую штуку что то типа напоминалки
суть сводилась к следующему - через несколько дней наступит столько то событий
соответственно получалась таблица свободных полей в которых данные считались через DCount ну а для того что бы посмотреть уточненные данные нужна была форма где источником служил переменный запрос (в зависимости от диапазона)
только делал я не так как Lukas
Изначально форма опиралась на запрос (т.е могла быть открыта в любом случае )
форма открывалась в невидимом режиме
потом ей менялся источник строк
форма обновлялась
ну а далее отображение формы

а пример Lukas-а пойду тоже изучать

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