Я на форуме был - Quick_yak, может помнишь еще. Сейчас, к сожалению, времени нет. :-(
Во-первых, я благодарен за соглашения Реддика для VB. (Где то 2 месяца назад я скачал и с тех пор активно импользую). А также за весьма полезные статьи и примеры кода на Форум+. И во-вторых у меня имеются некоторые предложения.
1.Некоторые изменения для QuickService: (по-моему более красиво) (Абсолютно согласен)
'******************************************************** 'Функция устанавливает значение Info = strInfo в таблице '"tblInfo" c ID = strID, если запись с таким ID есть '******************************************************** Public Function SetInfoTbl(ByVal strID As String, _ ByVal strInfo As String) As Boolean
Dim db As Database, strSQL$
On Error GoTo ErrHandler
SetInfoTbl = False strSQL = "UPDATE tblInfo SET tblInfo.[Info] = '" & _ strInfo & "' WHERE (((tblInfo.[ID]) ='" & strID & "'));" Set db = CurrentDb db.Execute strSQL If db.RecordsAffected Then SetInfoTbl = True 'Если что-нибудь обновили, то Истина
ErrHandler: End Function
2.Классная функция округления! Я до этого использовал свою, но она была намного медленней. А эту я немнго подкорректировал, чтобы она стала считать быстрее.
Function Round2(ByVal X As Double, _ Optional ByVal D As Byte = 2) As Double
'без нее 0.41 сек, с ней 0.34 сек на 110000 записей Dim cur As Currency: cur = 10 ^ D
Round2 = Sgn(X) * Int(Abs(X) * cur + 0.5) / cur End Function
3.И наконец, альтернатива стандартной функции TableExist, которая перебором по семейству TableDefs ищет соответствие имени переданной таблицы. 1 вариант - это с закомментированной строкой strSQL, а второй - это открытый.
'******************************************************** '* Функция возвращает существует ли таблица с именем strTbl в базе '* В системной таблице узнаем есть ли элемент с именем strTbl и родителем = Tables (или ParentId = 251658241) 'Имя таблицы Кол-во циклов Проц - Перебор таблиц Проц-1вариант Проц-2вариант (в секундах) '"MSysACEs" 1100 7,34 5,71 3,25 - 4,04 '"ЦеныАрхив" 1100 7,59 - 10,55 5,65 3,38 - 3,61 '***************************************************************************** *****
Public Function IsTableExist(ByVal strTbl As String) Dim db As Database, rst As Recordset Set db = CurrentDb 'Set rst = db.OpenRecordset("SELECT Id FROM " & _ '" MSysObjects " & " WHERE Name = '" & strTbl & _ '"' AND ParentId IN (SELECT Id FROM MSysObjects " & _ 'WHERE Name ='Tables')")
Set rst = db.OpenRecordset("SELECT Id FROM " & _ "MSysObjects WHERE (Name = '" & strTbl & "') And " & _ "(ParentId = 251658241)", dbOpenDynaset) IsTableExist = (rst.RecordCount > 0) rst.Close: Set rst = Nothing: Set db = Nothing End Function
Счастливо. Ярослав.
P.S. Если что-нибудь пришось по вкусу, можешь выложить к себе на Форум+.