Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поругайте алгоритм работы с SQL в проекте ADP / 9 сообщений из 9, страница 1 из 1
19.11.2004, 15:37:15
    #32791739
Pantalone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поругайте алгоритм работы с SQL в проекте ADP
От прошлого програмиста досталась небольшая база, вся ее работа базируется на главно алгоритме взаимодействия с SQL сервером:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Function MyExecute(ByVal sSQL As String, ByRef vt As Variant) As Long
    
On Error GoTo LogErr
        
Dim cnnData As New ADODB.Connection

Set cnnData = CurrentProject.Connection
    
    Dim rst As New ADODB.Recordset

    Set rst = cnnData.Execute(sSQL)
    If UCase(Left(sSQL,  6 )) = "SELECT" Then
        If rst.RecordCount >  0  Then vt = rst.GetRows
    End If
    Exit Function

LogErr:
    MsgBox Err.Description
End Function

Эта функция вызывается везде и повсюду в базе следующим образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
-----------------
    sSQL = "SELECT ... WHERE ..."         
             
    Glb_mts.MyExecute sSQL, vt
    
    If Not IsEmpty(vt) Then
        fdId = Trim(vt( 1 , i))
        fdNumber = Trim(nz(vt( 1 , i),""))
    End If
-----------------
    Glb_mts.MyExecute sSQL, vt

    sSQL = "SELECT @@Identity"
    Glb_mts.MyExecute sSQL, vt

    If Not IsEmpty(vt) Then ......
-----------------
    sSQL = "DELETE FROM ..."
    Glb_mts.MyExecute sSQL, vt
-----------------
    On Error GoTo ErrSub
    
    sSQL = "Begin Transaction"
    Glb_mts.MyExecute sSQL, vt
    
    sSQL = "INSERT INTO ..."
           
    Glb_mts.MyExecute sSQL, vt
    
    sSQL = "SELECT @@IDENTITY"
    
    Glb_mts.MyExecute sSQL, vt
    
    sSQL = "Commit Transaction"
    Glb_mts.MyExecute sSQL, vt
    
    If Not IsEmpty(vt) Then ...
    
    Exit Function
ErrSub:
    sSQL = "RollBack Transaction"
    Glb_mts.MyExecute sSQL, vt
    
    MsgBox Err.Description

Как вы смотрите на такую организацию работы с данными?
...
Рейтинг: 0 / 0
19.11.2004, 15:41:33
    #32791755
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поругайте алгоритм работы с SQL в проекте ADP
в принципе логично использовать нечто подобное если часто используется ...

тока если создаются объекты типа конекшен и рекордсет то их
ОБЯЗАТЕЛЬНО надо закрывать и уничтожать иначе память кончится рано или поздно
...
Рейтинг: 0 / 0
19.11.2004, 15:56:25
    #32791833
Pantalone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поругайте алгоритм работы с SQL в проекте ADP
Разве после выхода из функций где они были созданы они мами не уничтожаются автоматом?
Есть этот же самый проект написаный на VB с минимальными различиями в коде, вот там память отъедается весьма и весьма!
...
Рейтинг: 0 / 0
19.11.2004, 16:31:11
    #32791952
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поругайте алгоритм работы с SQL в проекте ADP
>Разве после выхода из функций где они были созданы они мами не уничтожаются автоматом?
Вообщето должны,только не при выходе из функции,
а когда не останется ни одной ссылки на них

В принципе если ссылка находится в переменной объявленной в функции
и эта переменныя не Static
то по завершениии переменная уничтожается ,
а следовательно должен уничтожится и объект

но практика показавает, что такие объекты как Connection и Recordset
могут дотавить много хлопот
поэтому

.Close
SET =Nothing

PS Ты видиш суслика?Я тоже не вижу,но он есть. :)
...
Рейтинг: 0 / 0
19.11.2004, 17:39:52
    #32792118
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поругайте алгоритм работы с SQL в проекте ADP
критикую:

1) сама функция ничего не возвращает
2) возврат через параметр обычно чуть хуже возврата значения функции
3) рекордсет пытаются использовать даже там, где он не нужен.

--------------

я бы разделил на 3-4:
а) ExecDML
b) GetDBArray b') ExecOneRec ( ... )
c) getRecordSet
...
Рейтинг: 0 / 0
20.11.2004, 15:44:08
    #32792664
Pantalone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поругайте алгоритм работы с SQL в проекте ADP
Victosha возврат через параметр обычно чуть хуже возврата значения функции
Это чем же?

Victosha рекордсет пытаются использовать даже там, где он не нужен.
Почему?

Victosha я бы разделил на 3-4:
а) ExecDML
b) GetDBArray b') ExecOneRec ( ... )
c) getRecordSet
А расписать? :)
...
Рейтинг: 0 / 0
22.11.2004, 08:57:56
    #32793286
Pantalone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поругайте алгоритм работы с SQL в проекте ADP
Люди!
...
Рейтинг: 0 / 0
22.11.2004, 09:28:03
    #32793319
Shurgenz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поругайте алгоритм работы с SQL в проекте ADP
по поводу функций...

они обычно что-нить возвращают... и их используют как

some_value=my_func(some_parameters)

у Вас функция хоть и заявлена, как возвращающая Long, однако, не возвращает ничего, тогда как можно было бы, чтоб возвращала хотя-бы recordset. Она и возвращает, но так, как возвращала бы процедура. Согласен с Pantalone... это криво.

К тому же... не все запросы возвращают рекордсеты. Есть SQL, а есть и DML,
Это, мне кажется, имелось в виду.
...
Рейтинг: 0 / 0
22.11.2004, 09:29:39
    #32793326
Shurgenz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поругайте алгоритм работы с SQL в проекте ADP
тьфу, не посмотрел, кто автор то критики... я Виктошу имел в виду... с ним согласен
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поругайте алгоритм работы с SQL в проекте ADP / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]