|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
попробуй скачать файл отсюда или найди его на msdn или support.microsoft.com http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=492885&msg=4900746 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2011, 20:01 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
сосед-акцессник, Спасибки Вам и "бабай". Интересный файл, там много чего интересного подробно написано. Читаю и изучаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2011, 09:07 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Как программно отправить на печать только определенные страницы отчета с заданным количеством экземпляров? Допустим, имеется отчёт с несколькими страницами. Скажем - 100 страниц. Нам нужно напечатать все страницы начиная с 10 по 20 в 2-х экземплярах. Как это сделать программно? Для этого создадим следующую 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.
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2011, 15:26 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Очепятка в предыдущем посте. :) Вместо "Intiger" читать как "Integer" в параметрах функции. Как известно в VBA есть стандартный MsgBox. В принципе и в библиотеке "WSript.Shell" есть свой MsgBox. Код: plaintext
Есть также у Win API свой MsgBox. Код: plaintext
MsgBox в WinAPI и в WSript.Shell в отличии от стандартного MsgBox в VBA не модальный, т.е. даже когда Вы получаете MsgBox и ещё не нажали на кнопку, то Вы можете параллельно запускать любую процедуру/функцию и VBA параллельно будет выполнять. Но только клавиша F11 при этом не работает. :) P.S. Случайно наткнулся на топик MsgBox на нерусском в русской версии win и MA?, где уважаемый Бенедикт предложил способ вывода текста MsgBox на любом языке (хоть на арабском). Код уважаемого Бенедикта Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2011, 10:20 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Чтобы в запросах произвести условную сортировку, т.е. если выполняется 1-условие, то 1-блок данных сортируется первым, если 2-условие, то 2-блок и т.д., обычно пользуются функцией IIf. Что-то вроде этого: Код: plaintext 1. 2.
Код: plaintext 1. 2.
Код: plaintext 1. 2.
Есть ещё 1 нюанс: если таблица не "родная" для Access, а линкованная через ODBC (скажем таблица SQL Server), то такой номер не проходит, произойдёт ошибка: Код: plaintext 1. 2.
В таком случае специально нужно использовать функцию, которая отсутствует на стороне SQL Server, и тогда запрос будет работать на УРА: Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2011, 14:17 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Вот здесь показан способ перехвата нажатия на кнопку меню. В качестве примера показан случай перехвата сортировки: Код, который ловит событие нажатие кнопки сортировки 1. включите ссылку на библиотеку офис 2. в начале модуля формы : Private WithEvents SortACBtn As Office.CommandBarButton Private WithEvents SortDeBtn As Office.CommandBarButton Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Там же имеется таблица с указанием ID контролов меню. Я по аналогии попробовал блокировать FIND (найти), т.е. если пользователь захочет найти запись, то я программно хочу заменить "Поиск" на "Фильтр", ибо как известно поиск работает значительно медленнее чем фильтр. Но почему-то код, прекрасно блокирующий сортировку, не хочет блокировать поиск. Что здесь не так? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Видимо здесь проблема с Id контрола. Как найти правильный Id? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2011, 13:26 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
С id=141 клик кнопки меню отлавливает, а комбинацию Ctrl+F - фиг. (А2003) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2011, 14:57 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
nord-woolfС id=141 клик кнопки меню отлавливает, а комбинацию Ctrl+F - фиг. (А2003) Thank you! :-)) Ну тогда сделаю 141 для перехвата меню и параллельно буду перехватывать комбинацию клавиш Ctrl + F. Ещё 1 вопрос: можно ли переделать данный код так, чтобы возможно было позднее связывание, т.е. без подключения к MS Office? Пробовал разные варианты, но что-то у меня не получается. P.S. А как обстоят дела в А2007 и в А2010? Был бы признателен ежели кто-нибудь напишет будет ли работать данный код в этих версиях. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2011, 07:19 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
studieren, С подпиской на события позднее связывание не годится. Нужна типизированная переменная соответствующего класса. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2011, 08:47 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Если хотим узнать версию Windows, вызвав диалоговое окно "About", то можем использовать вот такой код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Оказывается в данном диалоговом окне можно кое-что добавить. Что то вроде этого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Правда маловато текста умещается. Для заголовка и первой строки - всего лишь 1 строка, а для "середины" - 2 строки. :) Здесь же можно ещё добавить иконку. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2011, 12:53 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
studieren, А для чего это? Просто интересно, подумал, подумал и не нашёл применения. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2011, 02:04 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
alvk, Просто "спортивный интерес". Оказывается и такое возможно. :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2011, 07:18 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Есть 1 топик: Вопросы по форматированию полей . Там вопрос № 1 гласит так: В "Word"е имеется возможность выравнивания текста по ширине (в VBA ".ParagraphFormat.Alignment = wdAlignParagraphJustify"). В "Access"е также имеется свойство полей "Выравнивание текста" (TextAlign), где можно присвоить значение 4 (Distribute), после чего текст будет выровнен по ширине. Но имеется один недостаток: если последняя строка состоит из 1 или 2 слов, то Access расширит текст чуть ли не по буквам. А это в официальных документах (таких как контракт) не допустимо! Как же сделать так, чтобы последнюю строку "Access" не трогал так же как в "Word"е? В этом топике есть пост nord-wolf 9510505 , где в приложенном файле имеется код, который и расширяет текст. Однако есть небольшие недостатки: I) если текст имеет перевод строки (Chr(13) + Chr(10)), то выглядит отчёт немного не так как надо; II) высота поля должна быть неизменной, ну а если в деталях отчёта будет выходить несколько записей и если высота полей нефиксированная, то в отчёте будет выходить либо пустота между записями (если мы увеличили с запасом высоту поля), либо "пропадают" строки (что конечно же не допустимо). Проблема в том, что если свойство поля "Visible" = False, то высота поля станет неизменной даже если свойство "Расширение" (CanGrow) имеет значение "Да". 2-проблему можно решить только в том случае, если сделать фон и шрифт поля прозрачным и тогда можно будет свойство поля "Вывод на экран" (Visible) указать как true. К сожалению, я пока не смог решить это. А вот для того, чтобы решить 1-проблему я немного изменил код nord-wolf (главное изменение: я не стал расширять текст, а расширил пробелы между текстами как это делает Word) и у меня получился такой вариант: Этот код можно разместить в модуле. Код: 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.
А в модуле отчёта можно указать примерно такой код Код: plaintext 1. 2. 3.
P.S. Код в принципе рабочий. Как только смогу решить и 2-проблему выложу здесь. Наверное Бенедикт или кто-то ещё из экспертов знает как сделать фон поля и шрифт сделать прозрачным, а не белым. Если подскажите как это сделать, был бы признателен. :) И ещё! Спасибо nord-wolf за его код. Если у кого-то более "продвинутый код", please поделитесь! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2011, 10:47 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Не помню откуда, но как то мне попался код, который запрещает открытие одной и той же базы 2 раза. А код достаточно простой, многократно использовал в разных проектах и ничего, работает. :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2011, 07:36 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Бывают случаи, когда в подчинённой таблице необходимо ввести не все значения ключевого поля главной таблицы, а избранные. В таких случаях часто в главной таблице создают дополнительное поле - некий признак: если признак соответствует каким-то требованиям, то значения ключевого поля только данной записи может быть в подчинённой таблице. Чтобы было более понятно приведу пример: Допустим есть таблица "tblCustomer", где ключевое поле "CustomerID". Есть также подчинённая таблица "tblBonus", где также имеется поле "CustomerID", куда необходимо ввести код не любого клиента, а только "VIP" клиентов. В таких случаях часто программисты создают дополнительное логическое поле "VIP" в таблице "tblCustomer" и создают Check Constraint (или триггер если таблицы находятся в "реальных" РСУБД), чтобы контролировать ввод клиентов из категории "VIP". А в Access многие вообще не возятся с Check Constraint, а в включают проверку на событие BeforeUpdate. А существует ли другой способ без Check Constraint, триггеров и проверок на событие BeforeUpdate, но чтобы "железно" гарантировать ввод избранных значений ключевого поля (например, только VIP клиентов)? Оказывается есть и для этого зачастую даже не требуется создание отдельного поля - признак в главной таблице. Итак, следует создать дополнительную таблицу "tblVIP", где будет единственное поле "CustomerID" и необходимо связать с главной таблицей "tblCustomer" по принципу "один к одному", при этом таблица "tblCustomer" должна находиться "левее". В таблицу "tblVIP" будем вводить код только VIP клиентов. А подчинённую таблицу "tblBonus" необходимо связать не с главной таблицей "tblCustomer", а с таблицей "tblVIP". Вот теперь без всяких Check Constraint, "триггеров" и проверок на событие BeforeUpdate "железно" можем гарантировать "избранных" значений ключевого поля. P.S. Связь "1 к 1" редко бывает полезным, но этот случай пожалуй исключение. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2011, 08:06 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Часто на форуме спрашивают как перевернуть текст на 90 градусов. (Сам тоже как-то спрашивал :), но теперь-то знаю как это просто.) В Аксессе есть конечно свойство "По вертикали", но оно переворачивает текст на 270 градусов. Как же всё-таки перевернуть на 90 градусов? Как правило, переворачивать текст следует в заголовках столбцов отчёта (т.е. в надписях, находящихся в верхнем колонтитуле или же в заголовке отчёта). А в самих деталях отчёта редко такое требуется. Самый простейший способ это создание нужного заголовка в виде таблицы в MS Excel. После этого просто копируем таблицу и в отчете Аксесса в режиме конструктора в верхнем колонтитуле или же в заголовке отчёта вставим из буфера обмена. Всё просто и ни одной строчки кода! :) Есть конечно сложные коды Лебенса (мне посоветовали тогда именно их 9504909 ), но зачем когда имеется самый простой способ. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2011, 14:59 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Komil_, а вот тут можно и спотыкнуться, когда параметры страницы менять будешь ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2011, 15:28 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Я раньше думал, что основное преимущество ADO перед DAO заключается в универсальности подключения к любой СУБД, находясь где угодно. Да хоть в Excel'е или в Word'е можем подключаться к Oracle, MySQL и т.п., а не только Access или SQL Server. Я раньше полагал, что DAO предназначен только для работы в Access и минуя ее не может подключится к другим СУБД. В смысле в Access'е создаём линкованную таблицу или запрос к серверу и только потом можем работать в других СУБД. Но как я понял позже, я ошибся, DAO тоже умеет работать с другими СУБД, минуя Access, главное - на клиентском компьютере должны быть соответствующие драйверы. Ещё одним большим сюрпризом для меня стало то, что объект RecordSet в DAO умеет работать и "чужим" синтаксисом (словно запрос к серверу), а не только синтаксисом Jet SQL. Но только для этого придётся "колдовать" и "шаманить" слегка. :) Из-за чистого спортивного интереса стал экспериментировать в DAO. Вот примерчик как можно подключиться к SQL Server (данный код можно использовать и в Excel'е): Код: 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.
Возникает вопрос: а в чём всё-таки бесспорное преимущество ADO от DAO? Что же умеет ADO чего не умеет DAO? Я знаю только то, что ADO "почти всё" умеет в стандарте ANSI92 SQL даже если сама база не переведена в этот стандарт (т.е. умеет запускать некоторые запросы на управления, которых DAO не может запускать без перехода в этот стандарт). Ну и сам Microsoft вроде бы грозился убрать DAO в будущих версиях, мол устаревшая технология. По крайнем мере в А2007 пока DAO жив (из-за не имения А2010 не знаю как там). А ещё в чём же преимущество? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 09:55 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
studieren....................... Возникает вопрос: а в чём всё-таки бесспорное преимущество ADO от DAO? Что же умеет ADO чего не умеет DAO? Я знаю только то, что ADO "почти всё" умеет в стандарте ANSI92 SQL даже если сама база не переведена в этот стандарт (т.е. умеет запускать некоторые запросы на управления, которых DAO не может запускать без перехода в этот стандарт). Ну и сам Microsoft вроде бы грозился убрать DAO в будущих версиях, мол устаревшая технология. По крайнем мере в А2007 пока DAO жив (из-за не имения А2010 не знаю как там). А ещё в чём же преимущество? Да какой смысл разбирать две устаревшие технологии доступа к данным? Из спортивного интереса если только? Могу подкинуть одно преимущество ADO (если конечно, не ошибаюсь): multiple recordsets. Эта возможность мне помогла добиться выполнения скрипта из нескольких SQL-команд в Jet-e, когда создавал для себя нечто вроде Query Analyzer. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 11:09 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Если не ошибаюсь, второй вариант ОДБС подключения (через опенконнект) называется ODBC direct и в А2010 не поддерживается. Обнаружил, когда для пробы переводил свою программу с А2003 на А2010 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 13:09 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Sator ArepoДа какой смысл разбирать две устаревшие технологии доступа к данным? Разве технология ADO (ADODB/ADOX) уже устарела? У нее есть альтернатива? Sator ArepoМогу подкинуть одно преимущество ADO (если конечно, не ошибаюсь): multiple recordsets. Вы имеете ввиду NextRecordset или что-то другое? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 13:20 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
studierenSator ArepoДа какой смысл разбирать две устаревшие технологии доступа к данным? Разве технология ADO (ADODB/ADOX) уже устарела? У нее есть альтернатива? Sator ArepoМогу подкинуть одно преимущество ADO (если конечно, не ошибаюсь): multiple recordsets. Вы имеете ввиду NextRecordset или что-то другое? Да, NextRecordset. Насчет "устаревшие" - может и погорячился. Альтернатив DAO/ADO для Аксесса в любом случае нет. Дык и Аксесс уже дедушка на пенсии - ADO.Net не для него. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 13:35 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
Вообще-то и в DAO есть NextRecordSet. Значит единственное преимущество (по крайнем мере другого пока не вижу) - это умение запускать спец запросов на управление (например, создание Check Constraint). Ну если ошибаюсь и всё-таки есть что-то, please напишите. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 13:50 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
studierenВообще-то и в DAO есть NextRecordSet. Значит единственное преимущество (по крайнем мере другого пока не вижу) - это умение запускать спец запросов на управление (например, создание Check Constraint). Ну если ошибаюсь и всё-таки есть что-то, please напишите. А чего желтым цветом-то? Спасибо, я не знал - т.к. необходимости не было, а когда начинал изучать Аксесс, вовсю пропогандировался ADO. Одно из многочисленных обсуждений http://www.accessmonster.com/Uwe/Forum.aspx/access-ado/1780/ADO-vs-DAO ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 13:52 |
|
интересные факты / наблюдения / анализ чужих и собственных решений
|
|||
---|---|---|---|
#18+
studierenВообще-то и в DAO есть NextRecordSet. Значит единственное преимущество (по крайнем мере другого пока не вижу) - это умение запускать спец запросов на управление (например, создание Check Constraint). Ну если ошибаюсь и всё-таки есть что-то, please напишите. вот еще интересное обсуждение http://blogs.msdn.com/b/michkap/archive/2007/07/13/3849288.aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2011, 13:57 |
|
|
start [/forum/topic.php?fid=45&msg=37372017&tid=1610226]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 294ms |
total: | 422ms |
0 / 0 |