Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
> Автор: aduka05adm > по идее передавала бы себе в цикле каждый раз и нормально > каждый раз по 7 параметров Ты или перед каждум созданием параметров очищай коллекцию параметров(что не есть гуд :) ) или один раз создай параметры и в цикле присваивай им разные значения(собственно это и есть основной плюс параметров :) ) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2010, 18:44 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, Игорь ГорбоносТы или перед каждум созданием параметров очищай коллекцию параметров(что не есть гуд :) ) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. и в цикле присваивай им разные значения(собственно это и есть основной плюс параметров :) ) щас буду пробовать ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2010, 19:16 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
> Автор: aduka05adm блин, Адука, ну что же ты делаешь? давай ещё впендюрь туда пару циклов до милиона, что-бы показать пользователю как "тяжела и неказиста, жизнь простого программиста" Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Вот и вся проба Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2010, 19:47 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, ваш код бомба вообще)) спасибо большое) хотел еще спросить читал что можно печатать с формы причем на основании шаблона так вот подскажите направление) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2010, 20:03 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
aduka05adm, Насчет печати формы, у самой формы есть метод Print, который выводит форму на принтер. Я им никогда не пользовался, потому что попробовал один раз, мне не подошло, и я сделал перенос картинки из PictureBox'а в вмр на диске и последующую вставку картинки в ворд с нужным текстом(мне нужно было коммерческое предложение делать) как бонус - получил возможность редактирования конечного файла перед печатью :) Насчет шаблона не слышал, если что-то ещё помнишь, то по-подробнее плиз :) З.Ы. Кстати практически у всех коллекций есть метод Clear который очищает всю коллекцию сразу и не нужно устраивать цикл по-элементного удаления ;) Это к удалению параметров :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2010, 23:31 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
Адука, не вникал в твои примеры, просто хочу подсказать.... У коллекции Command.Parameters есть такой метод Refresh Он сам заполняет коллекцию параметров, запросив ее у сервера (соответственно, имя процедуры, тип и т.п. уже должно быть заполнено). После чего ты заполняешь коллекцию значениями и выполняешь процедуру. С одной стороны - это лишний запрос к серверу, с другой стороны - не требуется мучиться с параметрами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 00:15 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
Shocker.ProС одной стороны - это лишний запрос к серверу, с другой стороны - не требуется мучиться с параметрами. из за этого и мучался , хотя refresh намного проще Игорь Горбонос Насчет шаблона не слышал, если что-то ещё помнишь, то по-подробнее плиз :) щас поищу здесь где то на форуме читал) опять вопрос у меня возник) создал две функции Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. и еще спросить хотел , создал процедуру которая закрывает соединения, рекордсет и комманд Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 00:36 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, самый простой способ)) и видимо то что мне запомнилось Игорь ГорбоносЗ.Ы. Кстати практически у всех коллекций есть метод Clear который очищает всю коллекцию сразу и не нужно устраивать цикл по-элементного удаления ;) Это к удалению параметров :) это у меня на автомате так ) в интернете нашел пример по очистке LISTBOX(цикл) и понеслось) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 00:57 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
ADO Connection & Recordset Functions сделал по данному примеру и все заработало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 15:10 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
> Автор: aduka05adm > и ... заработало А что хоть, не работало?!?! Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 15:25 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, было так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. сделал так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ну и функции подправил было Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. стало) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. aduka05admвыходит ошибка argument not optional в этом проблема была ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 16:25 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
> автор: aduka05adm > было так > сделал так ну, особой разницы не заметил, учитывая дальнейший комментарий. см. ниже :) > ну и функции подправил > было > стало) то что ты подправил свои функции работы с коннекшином и рекордсетом это похвально, НО! я ни в одной из функций не вижу обработки ошибок :) И если вдруг что-то случится, вся программа скажет "до свидания" :) Это и правильно :) При ошибках нужно так и делать :) Класс, которым я пользуюсь в VBA, если нужно что-то вытащить из какой-нить базы Option Explicit Private cn As New ADODB.Connection Private cmd As New ADODB.Command Private bIsOpen As Boolean 'Private mProgramSettings As CProgramSettings '*********************************************************************** '* Открывает коннест к базе '*********************************************************************** Function OpenConnect(sConnectionString As String) As Boolean Dim sErrDesc As String OpenConnect = False bIsOpen = False On Error GoTo labErr 'cn.Provider = "LCPI.IBProvider" cn.Open sConnectionString 'cn.State cmd.ActiveConnection = cn OpenConnect = True bIsOpen = True 'cn.BeginTrans Exit Function labErr: 'OpenConnect = False sErrDesc = Err.Description sErrDesc = Replace(sErrDesc, vbLf, " | ", , , vbTextCompare) 'Call OutputErrorMessage(sErrDesc, , , "OpenConnect") End Function '*********************************************************************** '* Закрывает коннест к базе '*********************************************************************** Private Sub CloseConnect() On Error GoTo labErr 'cn.CommitTrans labErr: cn.Close Set cn = Nothing Set cmd = Nothing End Sub 'Private Sub CreateProgramSettings() ' Set mProgramSettings = New CProgramSettings ' ' ' Set property settings to determine where the settings will ' ' be saved. In this example, the settings to into the same location ' ' used by the VB SaveSetting/GetSettings routines. This could be your ' ' company name, or the name of another known company such as "Microsoft" ' ' With mProgramSettings ' .RootKey = psrHKEY_LOCAL_MACHINE ' .MainBranch = "SOFTWARE" ' .RegBase = "ECUS" ' .Program = "DBOptions" ' .Section = "" ' ' End With ' 'End Sub '*********************************************************************** '* Выполняет запрос подготовленный заранее '*********************************************************************** Public Function ExecQueryBase(sSql As String) As Boolean Dim sErrDesc As String Dim erCur As ADODB.Error On Error GoTo labErr ExecQueryBase = False If Not bIsOpen Then ' If Not OpenConnect Then Exit Function ' End If End If 'If cn.State = adStateClosed Then Exit Function cn.BeginTrans cmd.CommandText = sSql cmd.Prepared = True cmd.Execute cn.CommitTrans ExecQueryBase = True Exit Function labErr: On Error Resume Next If cn.State <> adStateClosed Then cn.RollbackTrans End If sErrDesc = "" 'Err.Description & " <-> " ' Get the ADO errors. If cn.Errors.count > 0 Then For Each erCur In cn.Errors sErrDesc = sErrDesc & erCur.Source & ": " & erCur.Description & " | " Next erCur End If sErrDesc = Replace(sErrDesc, vbLf, " | ", , , vbTextCompare) Call OutputErrorMessage(sErrDesc, , , "ExecQueryBase", cmd.CommandText) End Function '*********************************************************************** '* Выполняет запрос подготовленный заранее '*********************************************************************** Public Function ExecQueryBaseRS(sSql As String) As ADODB.Recordset Dim sErrDesc As String Dim erCur As ADODB.Error Set ExecQueryBaseRS = Nothing 'If Not bIsOpen Then ' If Not OpenConnect Then ' Exit Function ' End If 'End If 'cn.BeginTrans On Error GoTo labErr cmd.CommandText = sSql cmd.Prepared = True Set ExecQueryBaseRS = cmd.Execute.NextRecordset 'cn.CommitTrans Exit Function labErr: If cn.State <> adStateClosed Then cn.RollbackTrans End If sErrDesc = "" 'Err.Description & " <-> " On Error Resume Next ' Get the ADO errors. If cn.Errors.count > 0 Then For Each erCur In cn.Errors sErrDesc = sErrDesc & erCur.Source & ": " & erCur.Description & " | " Next erCur End If sErrDesc = Replace(sErrDesc, vbLf, " | ", , , vbTextCompare) Call OutputErrorMessage(sErrDesc, , , "GetID", cmd.CommandText) End Function '*********************************************************************** '* Получает из базы значения генераторов '* для вставки данных в базу '*********************************************************************** 'Public Function GetId(val As TypeID) As Long 'Dim sErrDesc As String 'Dim erCur As ADODB.Error ' ''If Not bIsOpen Then '' If Not OpenConnect Then '' Exit Function '' End If ''End If ' 'On Error GoTo labErr 'cn.BeginTrans 'Select Case val 'Case ID_PHONE ' cmd.CommandText = "execute procedure SP_GEN_INF_PHONE_ID" 'Case ID_SUBSCRIBER ' cmd.CommandText = "execute procedure SP_GEN_INF_SUBSCRIBER_ID" 'Case ID_DIVISION ' cmd.CommandText = "execute procedure SP_GEN_INF_DIVISION_ID" 'End Select ' 'automating defining of parameters ---------------------------------------------- ''cmd.Parameters.Refresh 'cmd.Parameters.Append cmd.CreateParameter("ID", adInteger, adParamOutput) 'cmd.Execute 'GetId = cmd.Parameters("ID").Value 'cmd.Parameters.Delete (0) 'cn.CommitTrans 'Exit Function 'labErr: 'cmd.Parameters.Delete (0) 'If cn.State <> adStateClosed Then ' cn.RollbackTrans 'End If ' 'sErrDesc = "" 'Err.Description & " <-> " ' 'On Error Resume Next ' '' Get the ADO errors. 'If cn.Errors.Count > 0 Then ' For Each erCur In cn.Errors ' sErrDesc = sErrDesc & erCur.Source & ": " & erCur.Description & " | " ' Next erCur 'End If 'sErrDesc = Replace(sErrDesc, vbLf, " | ", , , vbTextCompare) 'Call OutputErrorMessage(sErrDesc, , , "GetID", cmd.CommandText) 'Err.Raise 70, "GetID" 'End Function Public Sub ClearDataInBD() ' Очищаем БД от данных 'If Not bIsOpen Then ' If Not OpenConnect Then ' If g_iRowError > 2 Then ' If Not shErr Is Nothing Then ' shErr.Visible = xlSheetVisible ' shErr.Select ' Set shErr = Nothing ' g_iRowError = 2 ' End If ' End If ' Exit Sub ' End If 'End If Call ExecQueryBase("delete from INF_SUBSCRIBER") Call ExecQueryBase("delete from INF_DIVISION") Call ExecQueryBase("delete from INF_PHONE") Call ExecQueryBase("delete from INF_LINK_PDS") Call ExecQueryBase("delete from CATEG") End Sub Private Sub Class_Initialize() 'If Not OpenConnect Then ' Err.Raise vbObjectError + 1, "clsDataBaseWork : Class_Initialize", _ ' , ThisWorkbook.Path & "\Создание_справочника.chm" 'End If End Sub Private Sub Class_Terminate() Call CloseConnect End Sub Класс изначально ориентировался на работу с FireBird'ом и обладал некоторой спецификой, сейчас, выродился в простую установку соединения и выполнения каких-то коммандных запросов, типа вставок или удалений, или выполнение запросов возвращающих рекордсет. Вот пример заливки данных их екселя в БД, причем в виде мастер-детаил :) Option Explicit Dim g_BD As clsDataBaseWork Dim v As Variant Dim mCol As Collection Dim sh As Worksheet, shOut As Worksheet Sub LoopInData() If g_BD Is Nothing Then Set g_BD = New clsDataBaseWork End If Set mCol = New Collection 'Set sh = Application.Worksheets("Лист3") Set sh = Application.Worksheets("Лист1") ' Если база не открылась, работать дальше нельзя If Not g_BD.OpenConnect("Provider=sqloledb;Data Source=igor;Initial Catalog=ttt;Integrated Security=SSPI;") Then Set g_BD = Nothing Exit Sub End If Dim nRow As Long, nCol As Long, i As Long nRow = 1 nCol = 1 For nRow = 2 To 666 sh.Cells(nRow, 15).Value = InsertRec(nRow) Next nRow Set g_BD = Nothing Set mCol = Nothing Set sh = Nothing Set shOut = Nothing End Sub Function InsertRec(nRow As Long) As String Dim s As String, sCode As String, rs As Recordset s = "INSERT INTO [ttt].[dbo].[objects](code_owher, name, land_tipe, number, code_land, adres) VALUES(" & _ CStr(sh.Cells(nRow, 1).Value) & ", '" & Trim(CStr(sh.Cells(nRow, 3).Value)) & "', " & _ CStr(sh.Cells(nRow, 4).Value) & ", " & CStr(sh.Cells(nRow, 5).Value) & ", " & _ CStr(sh.Cells(nRow, 6).Value) & ", " & CStr(sh.Cells(nRow, 7).Value) & ", " & _ vbCrLf & "SELECT SCOPE_IDENTITY() AS code" Set rs = g_BD.ExecQueryBaseRS(s) 'rs.MoveFirst sCode = CStr(rs.Fields("code").Value) Set rs = Nothing InsertRec = sCode s = "INSERT INTO [ttt].[dbo].[objects_plus_directions](code_directions, code_objects) VALUES(" & _ CStr(sh.Cells(nRow, 14).Value) & ", " & sCode & ")" Call g_BD.ExecQueryBase(s) 'Call g_BD.ExecQueryBase(s) 'rs.MoveFirst Debug.Print s End Function Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 17:38 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
Класс, которым я пользуюсь в VBA, если нужно что-то вытащить из какой-нить базы Код: 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. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. щас будем разбираться спасибо вам) Вот пример заливки данных их екселя в БД, причем в виде мастер-детаил :) Код: 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. 44. 45. 46. 47. 48. 49. это так для читабельности) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 18:18 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
можно вопросы ) Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 18:36 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
aduka05admможно вопросы ) это че функция типо не выполняется? ................. а здесь пустили на выполнение? .................... нет :) т.к. функция возвращает логическое значение показателя удачности установки соединения, то для экономии, изначально предполагается что функция не выполнится и поэтому присваиваем False. Если установка соединения произошла успешно, тогда изменяем возвращаемое значение на True aduka05adm и еще ............... f Not bIsOpen Then ' прикольно замутили ) ................ Там изначально была проверка на неоткрытость соединения с БД и попытка установить соединение, а потом из-за чего-то переделал как сейчас aduka05adm как раз искал пример , он же работает только в пределах одного connection? а если я в пределах одного connection делаю несколько запросов со вставкой и обн-ем они все отменятся? Да, все что будет выполненно между BeginTrans и CommitTrans будет считатся атомарной операцией, и если что-то пойдет не так, откатится всё что было выполненно с момента подачи команды BeginTrans aduka05admтоже прикольно :) это из МСДН, пример обработки ошибок aduka05adm а это где)? а вот оно :) Недостающий остаток для примера заливки данных Код: 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. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 19:02 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, спасибо )) будем думать и учиться Игорь ГорбоносНедостающий остаток для примера заливки данных это вы так лог ведете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 19:10 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
> Автор: aduka05adm > это вы так лог ведете? Для екселя, да. А вообще там может быть и запись в файл, и в базу и ещё куда нить :) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 19:20 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
доработал Код: 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. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. гляньте когда время будет , может че неправильно делаю или попроще можно сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 22:52 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
> Автор: aduka05adm > +доработал Это у тебя класс или просто набор функций в модуле? Если это класс, то я не вижу смысла в приватных переменных strquery, proc, strconn уровня класса без свойств Let и Get. Можно понять если бы ты, объявил константой строку подключения, но ты этого не сделал :) .Вынесено объявление парметров, такой-же вопрос - для чего они на уровне класса, без соответствующих свойств для чтения/установки по имени/номеру. Рекордсет - зачем он для всего класса? Запрос выполнили, получили в результате рекордсет, отдали его вызывавшему и забыли, зачем хранить его в переменной? Это лишняя связь удерживающая ресурсы, пока этой переменной не присвоить Nothing или новый рекордсет, старый будет "болтатся" в памяти. Не понятно, что делает функция заполнения грида в классе работы с SQL server'ом ? Это если у тебя класс, теперь если у тебя модуль и просто набор функций, но эти вопросы касаются и класса :) Мне не понравились имена параметров функций, совпадающие с именами функций. Читая код не понятно, ты используешь параметр или вызываешь функцию. Теперь просто критика :) Не во всех функциях у параметров указаны типы данных, и в функции вывода лога в БД не предусмотренна обработка ошибок и ни в одной из функций не предусмотренна проверка корректности передаваемых параметров. Вполне возможен случай(у меня зачастую бывает :) ) создал таблицу, заполнил её данными, а потом пишу селект из клиентского приложения, а мне в ответ ошибка. Потому, что забыл дать права на селект. Так вот, у тебя соединение установится, а при попытке выполнить запрос может свалится и функция вернёт не рекордсет, а Nothing а т.к. проверок нет, вывалится :( Это, то что сразу бросилось в глаза :) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2010, 10:43 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, Игорь ГорбоносЭто у тебя класс или просто набор функций в модуле? набор функций в модуле Игорь ГорбоносЕсли это класс, то я не вижу смысла в приватных переменных strquery, proc, strconn уровня класса без свойств Let и Get. я даже не в курсе как надо в классе че делать , надо поинтересоваться как с ним работать Игорь ГорбоносМожно понять если бы ты, объявил константой строку подключения, но ты этого не сделал :) верно , я вообще константы никогда не использую ) Игорь ГорбоносРекордсет - зачем он для всего класса? Запрос выполнили, получили в результате рекордсет, отдали его вызывавшему и забыли, зачем хранить его в переменной? Код: plaintext 1. 2. 3. 4. если имеете ввиду эту строку Код: plaintext Игорь ГорбоносМне не понравились имена параметров функций, совпадающие с именами функций думал понятней будет , получилось наоборот ) Игорь ГорбоносТеперь просто критика :) тоже думал это поправить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2010, 13:26 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
aduka05admИгорь ГорбоносРекордсет - зачем он для всего класса? Запрос выполнили, получили в результате рекордсет, отдали его вызывавшему и забыли, зачем хранить его в переменной? Код: plaintext 1. 2. 3. 4. а теперь представим ситуацию, что во время выполнения произошла ошибка и эта строка не выполняется, а выполняется код: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2010, 14:31 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
Игорь Горбоносaduka05admИгорь ГорбоносРекордсет - зачем он для всего класса? Запрос выполнили, получили в результате рекордсет, отдали его вызывавшему и забыли, зачем хранить его в переменной? Код: plaintext 1. 2. 3. 4. а теперь представим ситуацию, что во время выполнения произошла ошибка и эта строка не выполняется, а выполняется код: Код: plaintext 1. 2. 3. 4. 5. 6. если переменная rs объявлена в рамках ф-ии/процедуры, то ничего не страшно, а вот если глобально, то да, могут быть проблемы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2010, 14:36 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, Игорь Горбоноса здесь нет освобождения рекордсета, а он создан по New :) надо будет туда тоже добавить) Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2010, 15:07 |
|
||
|
Полуение уникального ID
|
|||
|---|---|---|---|
|
#18+
Konst_One, Konst_Oneесли переменная rs объявлена в рамках ф-ии/процедуры, то ничего не страшно а что с ним будет происходить тогда в данном случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2010, 15:08 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=36752284&tid=2159523]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 250ms |
| total: | 376ms |

| 0 / 0 |
