Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Как изменить SQL строку сохраненного запроса  [new]
NG
Member

Откуда: Екатеринбург
Сообщений: 1492
Нужен именно сохраненный запрос. Но в нем надо менять условия отбора и сортировку. SQL строку формирую программно. Теперь ее надо сохранить в виде запроса в mdb Access2003.
PS
Проверять существование запроса в базе я умею.
27 июн 06, 22:08    [2818622]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить SQL строку сохраненного запроса  [new]
NG
Member

Откуда: Екатеринбург
Сообщений: 1492
Ну, или удалить и создать заново.
27 июн 06, 22:41    [2818696]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить SQL строку сохраненного запроса  [new]
LeonM
Member

Откуда: Bayern, Deutschland
Сообщений: 598
'Create a query. Return a query name or an empty string
Public Function MakeQuery(qname As String, sql As String) As String
    Dim q As QueryDef
    MakeQuery = ""
    On Error GoTo wrong
    If sql = "" Then
        Set q = CurrentDb.CreateQueryDef(qname)
    Else
        Set q = CurrentDb.CreateQueryDef(qname, sql)
    End If
    MakeQuery = qname
wrong:
    Select Case Err.Number
    Case 0
    Case 3012
        CurrentDb.QueryDefs.Delete qname
        Resume
    Case Else
        MsgBox Err.Description, , "MakeQuery " & Err.Number
    End Select
End Function
Public Function NewQuery(qname As String, sql As String) As QueryDef
    Dim s As String
    s = MakeQuery(qname, sql)
    If s = "" Then
        Set NewQuery = Nothing
    Else
        Set NewQuery = CurrentDb.QueryDefs(qname)
    End If
End Function

'Create a new table "tbl" after a query "req"
'Return a table name or empty string
Public Function MakeTable(tbl As String, req As String) As String
    Dim q As QueryDef
    MakeTable = ""
    On Error GoTo wrong
    Set q = NewQuery("def" & tbl, req)
    q.Execute dbFailOnError
    MakeTable = tbl
    CurrentDb.QueryDefs.Delete "def" & tbl
    Exit Function
wrong:
    Select Case Err.Number
    Case 3010
        MakeTable = tbl
    Case Else
        MsgBox Err.Description, , "MakeTable " & Err.Number
    End Select
End Function
27 июн 06, 22:50    [2818715]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить SQL строку сохраненного запроса  [new]
NG
Member

Откуда: Екатеринбург
Сообщений: 1492
2 LeonM
Спасибо! Сделаю попытку перевести в ADO по вашему примеру.
27 июн 06, 22:55    [2818724]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить SQL строку сохраненного запроса  [new]
LeonM
Member

Откуда: Bayern, Deutschland
Сообщений: 598
А зачем переделывать? Проще ссылки установить. Я для этого сохраняю ссылки в специальной таблице. Держите модуль класса:
'LbReferences

Private Const c_tbl As String = "RefTable"  'Dable name

Private m_rs As ADODB.Recordset

Private Sub Class_Initialize()
    Const c_sql As String = "CREATE TABLE " & c_tbl & " (fname TEXT(30) UNIQUE,fguid GUID PRIMARY KEY,fmajor LONG,fminor LONG);"
    On Error GoTo notable
    Set m_rs = New ADODB.Recordset
    m_rs.CursorLocation = adUseClient
    m_rs.Open c_tbl, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    Exit Sub
notable:
    DBEngine.Workspaces(0).Databases(0).Execute c_sql
    Resume
End Sub
Private Sub Class_Terminate()
    m_rs.Close
    Set m_rs = Nothing
End Sub
'Save current references in the table RefTable. Return a numer of the saved references
Public Function SaveReferences() As Integer
    Dim rf As Access.Reference
    On Error GoTo thereis
    SaveReferences = 0
    For Each rf In Application.References
        m_rs.AddNew
        m_rs.Fields("fname").Value = rf.Name
        m_rs.Fields("fguid").Value = rf.Guid
        m_rs.Fields("fmajor").Value = rf.Major
        m_rs.Fields("fminor").Value = rf.Minor
        m_rs.Update
        SaveReferences = SaveReferences + 1
    Next
thereis:
    Select Case Err.Number
    Case 0
    Case -2147467259
        SaveReferences = SaveReferences - 1
        m_rs.CancelUpdate
        Resume Next
    Case Else
        SaveReferences = SaveReferences - 1
        Debug.Print "SaveReferences", Err.Number, Err.Description
        Stop
    End Select
End Function
'Restore saved references. Return a numer of the restored references
Public Function RestoreRefs() As Integer
    Dim rf As Access.Reference
    On Error GoTo thereis
    m_rs.MoveFirst
    While Not m_rs.EOF
        Set rf = Application.References(m_rs.Fields("fname").Value)
        m_rs.MoveNext
    Wend
thereis:
    Select Case Err.Number
    Case 0
    Case 9
        Set rf = Application.References.AddFromGuid(m_rs.Fields("fguid").Value, m_rs.Fields("fmajor").Value, m_rs.Fields("fminor").Value)
        RestoreRefs = RestoreRefs + 1
        Resume Next
    Case Else
        Debug.Print "RestoreRefs", Err.Number, Err.Description
        Stop
    End Select
End Function
27 июн 06, 23:19    [2818757]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить SQL строку сохраненного запроса  [new]
NG
Member

Откуда: Екатеринбург
Сообщений: 1492
2 LeonM
Видимо придется DAO цеплять... Я уж ADOX подвязал, да не нашел в нем запросов (View не в счет).
Еще раз спасибо!
27 июн 06, 23:24    [2818765]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить SQL строку сохраненного запроса  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
NG
Как изменить SQL строку сохраненного запроса

currentdb.querydefs!myquery.sql=...
27 июн 06, 23:31    [2818778]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить SQL строку сохраненного запроса  [new]
NG
Member

Откуда: Екатеринбург
Сообщений: 1492
2 ВС
Сейчас попробую. Спасибо!
27 июн 06, 23:34    [2818784]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить SQL строку сохраненного запроса  [new]
сосед-акцессник
Guest
NG
2 LeonM
Видимо придется DAO цеплять... Я уж ADOX подвязал, да не нашел в нем запросов (View не в счет).
Еще раз спасибо!


если нужно упереться именно в адокс, то там на каталоге есть коллекция процедурес.
ей можно добавлять ээкземпляры коммандов.
так создают запросы на адоксах
примерно так же и меняют им текст.
посмотри объектную модель адоксову+адову.
28 июн 06, 00:01    [2818839]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить SQL строку сохраненного запроса  [new]
сосед-акцессник
Guest
вот открыл чправку. в ней на слово процедурес сразу таку бяку отрисовывают

чправка
Command and CommandText Properties Example (VB)
The following code demonstrates how to use the Command property to update the text of a procedure.

' BeginProcedureTextVB
Sub ProcedureText()

Dim cnn As New ADODB.Connection
Dim cat As New ADOX.Catalog
Dim cmd As New ADODB.Command

' Open the Connection
cnn.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\Program Files\Microsoft Office\" & _
"Office\Samples\Northwind.mdb;"

' Open the catalog
Set cat.ActiveConnection = cnn

' Get the Command
Set cmd = cat.Procedures("CustomerById").Command

' Update the CommandText
cmd.CommandText = "Select CustomerId, CompanyName, ContactName " & _
"From Customers " & _
"Where CustomerId = [CustId]"

' Update the Procedure
Set cat.Procedures("CustomerById").Command = cmd

End Sub
' EndProcedureTextVB
28 июн 06, 00:21    [2818873]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить SQL строку сохраненного запроса  [new]
Serge Gavrilov
Member

Откуда:
Сообщений: 3248
NG
2 LeonM
Видимо придется DAO цеплять... Я уж ADOX подвязал, да не нашел в нем запросов (View не в счет).
Еще раз спасибо!

Чтобы с DAO работать, не обязательно и ссылку устанавливать.
CurrentDb всегда под рукой (для mdb).
28 июн 06, 00:23    [2818877]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить SQL строку сохраненного запроса  [new]
NG
Member

Откуда: Екатеринбург
Сообщений: 1492
Всем спасибо. С вашей помощью решил задачку.
28 июн 06, 01:20    [2818953]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить