powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поругайте алгоритм работы с SQL в проекте ADP
9 сообщений из 9, страница 1 из 1
Поругайте алгоритм работы с SQL в проекте ADP
    #32791739
Pantalone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
От прошлого програмиста досталась небольшая база, вся ее работа базируется на главно алгоритме взаимодействия с 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
Поругайте алгоритм работы с SQL в проекте ADP
    #32791755
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в принципе логично использовать нечто подобное если часто используется ...

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

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

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

.Close
SET =Nothing

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

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

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

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

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

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

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

some_value=my_func(some_parameters)

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

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


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