Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменить код запроса, програмно 
V
    Опции темы
alexIrish
Дата 22.5.2007, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



Здравствуйте.
можно ли програмно переписать (изменить) SQL koд готового запроса?
Есть Запрос:
Select T1.F1, T2.F2 into Temp1
From T3
Where <uсловие отбора1>

данный запрос нужно применить несколько раз но при етом поменять 
таблицу назначения и условиe отбора, т.е.:
Select T1.F1, T2.F2 into Temp2
From T3
Where <uсловие отбора2>
потом
Select T1.F1, T2.F2 into Temп3
From T3
Where <uсловие отбора3> и т.д.

Можно конечно написАть много запросов, но ... хотелось бы через модуль.
PM MAIL   Вверх
alexIrish
Дата 22.5.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



Dа и еще хотел спросить, большоe кол-во маленьких запросов- ето нормально? 
Любую инфо можно получить используя один запрос для другого и т.д.
У меня v итогe получается более 50 v проекте и я начинаю сердится потому как приходится ужe время тратить на поиск нужного.

да и скорость нe впечатляет. Может если писать длинные запросы будет быстрее?
PM MAIL   Вверх
Akina
Дата 22.5.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(alexIrish @  22.5.2007,  13:56 Найти цитируемый пост)
можно ли програмно переписать (изменить) SQL koд готового запроса?

Да, можно. См. коллекцию QueryDefs. А можно использовать параметрический запрос... а можно... есть еще несколько вариантов.

Цитата(alexIrish @  22.5.2007,  14:43 Найти цитируемый пост)
большоe кол-во маленьких запросов- ето нормально? 

Вопрос не имеет однозначного ответа

Цитата(alexIrish @  22.5.2007,  14:43 Найти цитируемый пост)
У меня v итогe получается более 50 v проекте и я начинаю сердится потому как приходится ужe время тратить на поиск нужного.

Не умеете именовать? не хотите скрыть промежуточные? 

Цитата(alexIrish @  22.5.2007,  14:43 Найти цитируемый пост)
Может если писать длинные запросы будет быстрее? 

Вопрос не имеет однозначного ответа


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
alexIrish
Дата 22.5.2007, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



Однозначно спасибо.
А чтo такоe параметрический запрос?
Цитата

не хотите скрыть промежуточные? 

Да я то скрыл! Страшно когда раскрываешь! smile 
PM MAIL   Вверх
Akina
Дата 22.5.2007, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(alexIrish @  22.5.2007,  17:44 Найти цитируемый пост)
А чтo такоe параметрический запрос?

http://office.microsoft.com/training/train...=RC010969991049



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
alexIrish
Дата 25.5.2007, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



Срочно нужно доделать.
Посмотрите код, надо завершить работу с querydef.
v идеале нужно временный запрос который бы существовал пока открыта форма. Но можно и постоянный. Я его потом просто удалять буду.
А со временным потом разберусь.
Все работает до создания запроса и передачи его как источника данных в BAResult (sub форма в основной)
Ругается, что "Query must have at least one destination fild"

V chem delo?

Код

Private Sub RunReport_Click()
Dim SourceTable As Recordset ' Source table for Subform
Dim qdfRecords As QueryDef ' Defind future request
Dim strGroupMethod As String ' part of query - define group method
Dim InclBusiness As String ' Part of query - define included businesses
InclBusiness = "Having [BASourceQuery].[BusinessID] in ("
Dim DateFilter As String
Dim strSQL As String       ' query base
Dim SDate As String, Fdate As String
SDate = Format(StartDate.Value, "mm/dd/yy")
Fdate = Format(EndDate.Value, "mm/dd/yy")
    ' create SQL Query based on user choice
        ' First: group method
Select Case GroupMethod.Value
Case 1
    strGroupMethod = " Format$([BASourceQuery].[Date],'mmmm yyyy',"
Case 2
    strGroupMethod = " Format$([BASourceQuery].[Date],'mmmm  ww'), "
Case Else
    strGroupMethod = "[BASourceQuery].[Date]"
End Select
        ' Second: Date filter
If StartDate.Value > EndDate.Value Then
    MsgBox "LOWER Date is greater then UPPER Date", , "WARNING"
    StartDate.SetFocus
    
Else
    DateFilter = "Where [BASourceQuery].[Date] Between #" & SDate & "# and #" & Fdate & "#"
End If
        'Third: Business Filter
If opApple.Value = True Then InclBusiness = InclBusiness + "'Apple'"

If opCanon.Value = True Then
    If InclBusiness = "Having [BASourceQuery].[BusinessID] in (" Then
        InclBusiness = InclBusiness + "'Canon'"
    Else: InclBusiness = InclBusiness + ",Canon'"
    End If
End If

If opDell.Value = True Then
    If InclBusiness = "Having [BASourceQuery].[BusinessID] in (" Then
        InclBusiness = InclBusiness + "'Dell_P1','Dell_Sercom'"
    Else: InclBusiness = InclBusiness + ",'Dell_P1','Dell_Sercom'"
    End If
End If

If opMapInfo.Value = True Then
    If InclBusiness = "Having [BASourceQuery].[BusinessID] in (" Then
        InclBusiness = InclBusiness + "'MapInfo'"
    Else: InclBusiness = InclBusiness + ",'MapInfo'"
    End If
End If

If opNortel.Value = True Then
    If InclBusiness = "Having [BASourceQuery].[BusinessID] in (" Then
    InclBusiness = InclBusiness + "'Nortel'"
    Else: InclBusiness = InclBusiness + ",'Nortel'"
    End If
End If

If InclBusiness <> "Having [BASourceQuery].[BusinessID] in (" Then
InclBusiness = InclBusiness + ")"
Else
MsgBox "No Businesses were selected", , "WARNING"
End If

srtSQL = " SELECT DISTINCTROW [BASourceQuery].[BusinessID]," & strGroupMethod & "," _
& "Sum([BASourceQuery].[Receipt TOs]) AS [Sum Of Receipt TOs],Sum([BASourceQuery].[Receipt Locations]) AS [Sum Of Receipt Locations]," _
& "Sum([BASourceQuery].[Receipt Items]) AS [Sum Of Receipt Items], Sum([BASourceQuery].[Transfers TOs]) AS [Sum Of Transfers TOs]," _
& "Sum([BASourceQuery].[Transfers Locations]) AS [Sum Of Transfers Locations], Sum([BASourceQuery].[Transfers Items]) AS [Sum Of Transfers Items]," _
& "Sum([BASourceQuery].[ProductionPicks TOs]) AS [Sum Of ProductionPicks TOs],Sum([BASourceQuery].[ProductionPicks Locations]) AS [Sum Of ProductionPicks Locations]," _
& "Sum([BASourceQuery].[ProductionPicks Items]) AS [Sum Of ProductionPicks Items], Sum([BASourceQuery].[Shipping TOs]) AS [Sum Of Shipping TOs]," _
& "Sum([BASourceQuery].[Shipping Locations]) AS [Sum Of Shipping Locations], Sum([BASourceQuery].[Shipping Items]) AS [Sum Of Shipping Items]," _
& "Sum([BASourceQuery].[Involved Operators]) AS [Sum Of Involved Operators] FROM BASourceQuery" _
& DateFilter & "Group by [BASourceQuery].[BusinessID]," & strGroupMethod & ";"
Set qdfRecords = CurrentDb.CreateQueryDef("SourceForBAResult", strSQL)
Set SourseTable = qdfRecords.OpenRecordset
BAresult.SourceObject = "SourceForBAResult"
Me.BAResult.Visible = True
End Sub

PM MAIL   Вверх
alexIrish
Дата 28.5.2007, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



Привет.
Подскажите где я нe прав!
Мнe надо создать временный запрос, вывести набор записей выбранных тим запросом в дочернюю форму нa основной.
Пишу:
Код

Dim qdf as QueryDef, rst as RecordSet
Dim strSQL as String
StrSQL =" Select * ..." ' Запрос рабочий проверил мастером
Set qdf =CurrentDB.CreateQueryDef ("",strSQL)
Set rst = qdf.OpenRecordSet 

А дальше не понимаю:
во первых strSQL нe передается в qdf. T.e koгда я пытаюсь вернуть значение qdf.SQL tо у меня получается чисто "Select;" i все.

Ну а дальше, могу ли я RecordSet uказать как SourceObject for SubForm:

SubForm.SourceObject = rst;
Или Надо сам обьект QueryDef указывать, или создавать временную таблицу?

Растолкуйте а, плиз.
А то я посмотрел вот тут:http://www.firststeps.ru/
вроде вседелаю ка там написано, но... :(
спасибо.

PM MAIL   Вверх
alexIrish
Дата 28.5.2007, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



Oп ля!
А что, когда создаешь объект queryDef, Sql sтроку нельзя передавать как
заранее определенную техтовую переменную?
Надо писать  сам запрос?
PM MAIL   Вверх
Akina
Дата 28.5.2007, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(alexIrish @  28.5.2007,  13:54 Найти цитируемый пост)
А что, когда создаешь объект queryDef, Sql sтроку нельзя передавать как
заранее определенную техтовую переменную?
Надо писать  сам запрос? 

Если надо, загони текст запроса не в текстовую переменную, а в свойство SQL своего QueryDef, после чего вызывай CreateQueryDef без передачи ему строки запроса. А из текстовой переменной - не получается...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
alexIrish
Дата 28.5.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



Все вопрос по запросу снялся. Была ошибка в техте запроса.
Каюсь грешен.

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

Если пишу 

Форма.SorceObject = Query.QueryName
где QueryName имя созданного запроса (при помощи CreateQueryDef)
ругается что нужен обьект.

PM MAIL   Вверх
alexIrish
Дата 28.5.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



делал так:
написал запрос Запрос1
потом 
Код

Dim qdf as QueryDef
Set qdf = CurrentDB.QueryDefs![Запрос1]
qdf.SQL = strSQL ' заранее определена


Потом пытаюсь сделать СабФорма.Requery Но она ни фига не обновляется.
а вот если закрыть всю форму и открыть опять то получишь то что хотел до етого. Короче все на шаг сзади.

Почему? smile 

PM MAIL   Вверх
bopoha
Дата 30.5.2007, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Насколько я понимаю. "Запрос1" источник записей для подчиненной формы. Попробуй вместо СабФорма.Requery, СабФорма.RecordSource  = "Запрос1".

PM MAIL WWW ICQ Skype GTalk   Вверх
alexIrish
Дата 30.5.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.1.2006
Где: Ireland, Dublin

Репутация: нет
Всего: нет



Все, сделал.
Код

Dim qdfRecords as QueryDef, strSQL as String
strSQL= "Select ...."
Set qdfRecords = CurrentDb.QueryDefs![SourceForBAResult]
qdfRecords.SQL = strSQL
Me!BAResult.Form.RecordSource = Me!BAResult.Form.RecordSource
Me!BAResult.Visible = True


That's it.

Thanks to everyone involved. smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0667 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.