-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4

Invalid link!








Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.

Исходная информация - http://www.sql.ru/forum/actualtopics.aspx?bid=4.
Данный дневник сформирован из открытого RSS-источника по адресу http://www.sql.ru/forum/actualrss.aspx?id=4, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

[Обновить трансляцию]

Номер записи в форме работает, но медленно.

Среда, 17 Июля 2019 г. 02:09 + в цитатник
ЗВ (Здравствуйте все). Аксесс 2010, файл формата 2003.
Вывести в поле номер записи в форме с помощью функции в поле данных:

Private Function GetN(N) As Long 'N As Long) As Long

Me.RecordsetClone.FindFirst "[COD]=" & N
GetN = Me.RecordsetClone.AbsolutePosition + 1

End Function


работает медленно. (N-уникальный код записи в глобальной таблице.)
Нельзя ли предложить более быстрый алгоритм в форме или в соответствующем запросе?
Заранее благодарен.

https://www.sql.ru/forum/1314861/nomer-zapisi-v-forme-rabotaet-no-medlenno


syntax error

Вторник, 16 Июля 2019 г. 12:09 + в цитатник
стороннее неофисное приложение работает через АДО с базой в Аксе
стопицот раз используются похожие на эту команды
rs.Open ("select * from mainm where mainm.code=" & mat(1, j) & ";"), conndb, adOpenStatic, adLockReadOnly


а вот это
rst.Open ("select * from comp where comp.codm= " & codm & " and comp.codmc=" & Eval(mat(1, j)) & ";"), conndb, adOpenStatic, adLockReadOnly

выдает - syntax error in from clause
проверяю значение строки в отладчике - получаю
select * from comp where comp.codm=7556 and comp.codmc=7509;

подставляю в запрос в аксе - все работает.....
в чем может быть дело???

https://www.sql.ru/forum/1314835/syntax-error


VBA - Остерегайтесь ошибок в вычислениях (функция int())

Вторник, 16 Июля 2019 г. 10:58 + в цитатник
Статья Даниеля Пино - VBA - Остерегайтесь ошибок в вычислениях (функция int())

https://www.devhut.net/2019/04/11/vba-beware-of-flawed-math/

Я решил, что расскажу об ошибке, доведенной до моего сведения Джейсоном, касающуюся проблемы с использованием функции Int() .

Всегда были проблемы с вычислениями из-за проблем с плавающей запятой, о которых я даже не собираюсь рассказывать в этом посте. Есть гораздо большие умы, которые разрабатывали эту тему в прошлом. Тем не менее, всякий раз, когда вам нужно выполнить какой-либо расчет, лучше всего всегда использовать денежные или десятичные типы данных.

Возвращаясь к сегодняшнему сообщению, проблема с функцией Int(). Int () используется для возврата целой части числа из числа. Так,

? Int (1)
1
? Int (5.25)
5
? Int (13.65)
13

Недостаток!

В Access Query
В запросе
SELECT 40*0.3 AS Expr1, Int(12) AS Expr2, Int(40*0.3) AS Expr3;

Результаты в
12 | 12 | 12

В рабочем листе Excel
= INT(40 * 0,3) 
Результаты в
12

НО В VBA (ошибка)

? 40 * 0,3
12
? INT(12)
12

но возникает проблема с

? int(40 * .3)
11

или в простой функции, как

Function dd(a As Integer, b As Double)
    dd = Int(a * b)
End Function

? dd(40, 0.3)
11

Теперь, поскольку в VBA существует такая проблема, это означает, что это общая ошибка Office VBA, а не только Access! Так что будьте предупреждены, та же проблема будет существовать в Excel, Word, ...

Где это зацепит нас точно

Теперь, когда, очевидно, на базовую математическую функцию, такую, как Int(), нельзя положиться, что делать ?!

Что ж, я опубликовал эту проблему в Access Dev Team и пока не получил ответа, но, как обычно, мои коллеги из MVP готовы предложить свою помощь! Густав Брок указал, что использование функции преобразования заставит Int() вести себя правильно. Таким образом, обходной путь становится

? Int(CDec(40) * 0,3)
12

или же

? Int(40 * CCur(0,3))
12

Итак, да, вам нужно применять преобразование везде, где вы используете Int(), чтобы убедиться, что оно работает правильно!

В случае функции переключение типа данных с Double на Currency устранит проблему

Function dd(a As Integer, b As Currency)
    dd = Int (a * b)
End Function

? dd (40, 0,3)
12
или применить преобразование в самой функции, такой как

Function dd(a As Integer, b As Currency)
    dd = Int(a * b)
End Function

? dd(40, 0.3)
12

Как всегда, когда я получу ответ от команды Access Dev, я опубликую любую дополнительную информацию, которой они смогут поделиться с нами.

Обновление 2019-04-18, 2019-05-01
Что ж, прошло всего 3 недели, и от команды разработчиков не было никаких комментариев/ответов по поводу моего электронного письма на эту тему, поэтому я полагаю, что не получу от них никаких отзывов по этому вопросу. Так что просто убедитесь, что ВСЕГДА используйте преобразования везде, где вы используете функцию Int(), чтобы избежать каких-либо ошибочных результатов !!!

... и если эта проблема существует в Int(), должны ли мы беспокоиться о других математических функциях? Это настоящий вопрос!

Обновление 2019-04-24
Просто добавлена информация, касающаяся тестирования выше.

Когда я писал статью, я работал под управлением Access 2013 x32 на Windows 7, с тех пор я тестировал (с такими же результатами)

Access 2003 в Windows XP
Access 2007 SP3 (x32) в Windows 7
Access 2010 SP2 (x32) в Windows 7
Access 2013 (x32) в Windows 10 (версия 1803, сборка ОС 17134.706)
Access 2016 (x32) в Windows 7

Дальнейшие ресурсы по теме
В комментариях ниже Люк Чунг, президент FMS Inc. , только что поделился со мной техническим документом, который он выпустил более 20 лет назад, в котором подробно об этом и многом другом! Поэтому не забудьте проверить, When Microsoft Access Math Doesn’t Add Up, чтобы убедиться, что вы знаете о множестве математических проблем и о том, как наилучшим образом обеспечить надежность ваших расчетов.


-------------------------------------------------------------
А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса?

https://www.sql.ru/forum/1314829/vba-osteregaytes-oshibok-v-vychisleniyah-funkciya-int


Фотографии

Понедельник, 15 Июля 2019 г. 10:23 + в цитатник
Доброе утро! Возникла проблема перенести из базы Access 2003 в базу 2016 фотографии. В старой базе в таблице они хранились в поле
как текст (типа T:\KADRY\FOTO\аксючиц.jpg). Как можно программно перебросить фотки в новую базу в поле "Вложение"?

https://www.sql.ru/forum/1314787/fotografii


Ленточная форма

Пятница, 12 Июля 2019 г. 12:03 + в цитатник
Здравствуйте многоуважаемые эксперты Access. Прошу вашей помощи. Вопрос несложный для вас, надеюсь.
Есть ленточная форма и она должна оставаться таковой. На ней есть некоторое кол-во элементов, например кнопка.
В рабочем состоянии, понятное дело, на ленточной форме все элементы множатся. Вопрос - есть ли способ обратиться к одной из копий ? Привожу картинку -

https://www.sql.ru/forum/1314731/lentochnaya-forma


Как избежать циклической ссылки?

Пятница, 12 Июля 2019 г. 03:35 + в цитатник
Здравствуйте!

Нужно в зависимости от стажа применить коэф, но для условия в выражении нужна сумма этого же поля.

Есть поле "Отпускные" там вводится определенная сумма, в запросе есть вычисляемое поле которое высчитывает сколько получилось оплаченных дней. И надо вставить вычисляемое поле с выражением

ОплаченоДн: [Отпускные]/IIf([Sum-ОплДн]>150;IIf(DateDiff("d";[ДатаПриема];Now())+1>3650;[Оклад]/30*2;IIf(DateDiff("d";[ДатаПриема];Now())+1>1825;[Оклад]/30*1,5;[Оклад]/30));Оклад]/30

Если сумма оплаченных дней превышает 150 (5 отпусков по 30 дн) и 10 лет стажа (3650 дней), то при выплате отпускных применяется коэф 2; Если 5 лет стажа (1825 дн) - коэф 1,5.

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

Подскажите, пж, варианты решения. Прикладываю упрощенный пример.

https://www.sql.ru/forum/1314717/kak-izbezhat-ciklicheskoy-ssylki


Снова запись в Ексел

Четверг, 11 Июля 2019 г. 19:31 + в цитатник
Всем привет.
Простая задача: вывести часть данных из Аксеса в Екселевский файл 1.xls
В начале модуля формы описаны переменные, на кнопку toEXCEL повешен такой код.

Option Compare Database 'код в наале модуля
Option Explicit
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Dim xlSheet0 As Excel.Worksheet

Private Sub toEXCEL_Click() 'код на кнопке
   Dim fileXLT As String
   fileXLT = CurrentProject.Path & "\1.xls"
   Set xlApp = CreateObject("Excel.Application")
   Set xlBook = xlApp.Workbooks.Open(fileXLT)
   Set xlSheet = xlBook.Sheets("Рас1")
   Set xlSheet0 = xlBook.Sheets("РасЭ")
   xlApp.Visible = True
   xlApp.DisplayAlerts = True

   xlSheet0.Select  'Лист РасЭ
   Columns("C:C").Select   'Здесь возникает ошибка при повторном вызове подпрограммы.

'ЗДЕСЬ - производятся ДЕЙСТВИЯ В ФАЙЛЕ ЕКСЕЛЯ 

Set xlSheet = Nothing
Set xlSheet0 = Nothing
Set xlBook = Nothing
xlApp.Quit
Set xlApp = Nothing
End Sub

При первом нажатии кнопки все работает прекрасно - данные перебрасываются в файл и форматируются.

При повторном нажатии кнопки все ломается на строке
Columns("C:C").Select   'Здесь возникает ошибка при повторном вызове подпрограммы.

https://www.sql.ru/forum/1314711/snova-zapis-v-eksel


Подключение для чтения к файлу Excel

Четверг, 11 Июля 2019 г. 16:39 + в цитатник
Через сто лет понадобился Access...
Подключаюсь к Excel
SELECT *
INTO tmpT
FROM [Заказы$a:c] IN 'c:\file.xlsb'[Excel 12.0;HDR=No;Imex=1;]


Если file.xlsb кем-то занят, выбивает ошибку 3051 не могу открыть, так как файл занят.
Imex=1 не работает?
Как это можно обойти?
Спасибо.

https://www.sql.ru/forum/1314704/podkluchenie-dlya-chteniya-k-faylu-excel


Баг Access или ошибки в написании запроса?

Четверг, 11 Июля 2019 г. 15:30 + в цитатник
Люди, прошу вашего совета.

Работаю с очень большой базой данных (около 35 тысяч строк и 100+ столбцов). Постепенно прикрепляю к исходной локальной таблице столбцы через запросы - каждый новый запрос добавляет новые столбцы, ссылаясь на предыдущий. Например, Исходная таблица содержит поле А, Запрос 1 прикрепляет к таблице стобец Б из справочника, т.е. формирует таблицу со столбцами A и Б, Запрос 2 добавит поле В и так далее. При этом сами запросы довольно сложные, внутри одного запроса может быть несколько запросов прописано. Пример я вставлю под спойлер.

Вопрос: почему Access периодически изменяет текст уже готовых работающих запросов. Например, вместо F.[Описание ТО] ставит F.[ТО1]. Из-за этого валятся и все следующие запросы. Приходится вручную исправлять текст, запускать запрос и потом сохранять (иначе он вообще не сохраняет изменение).

Что это такое и как с этим бороться? Очень надеюсь на вашу помощь.

+
SELECT D.*, F.[Описание ТО] AS ТО2
FROM (SELECT A.*, C.[Описание ТО] AS ТО1 FROM TABLE_20 AS A LEFT JOIN (SELECT B.* FROM Режимы_ТО AS B WHERE (B.[Категория] is NOT NULL) AND ( B.[ТОЛ_MIN] IS NOT NULL)) AS C ON (A.[Наименование марки] = C.[МАРКА]) AND (A.[НТД на химанализ (Код)] =C.[НД_НА_ХА]) AND (A.[Толщина] > C.[ТОЛ_MIN]) AND (A.[Толщина] <= C.[ТОЛ_MAX]) AND (trim( A.[Категория] ) = C.[Категория])) AS D LEFT JOIN (SELECT E.* FROM Режимы_ТО AS E WHERE (E.[Категория] is NULL) AND ( E.[ТОЛ_MIN] IS NOT NULL)) AS F ON (D.[Наименование марки] = F.[МАРКА]) AND (D.[НТД на химанализ (Код)] =F.[НД_НА_ХА]) AND (D.[Толщина] > F.[ТОЛ_MIN]) AND (D.[Толщина] <= F.[ТОЛ_MAX])
ORDER BY D.[ID];

https://www.sql.ru/forum/1314702/bag-access-ili-oshibki-v-napisanii-zaprosa


Запрос в VBA к данным ODBC

Вторник, 09 Июля 2019 г. 22:18 + в цитатник
Подключил в Access 2013 таблицы из SQL Server Express с помощью драйвера ODBC Driver 17 for SQL Server.

Обычные запросы, что-то вроде примера ниже, перестали работать.

SELECT dbo_Table.*
FROM dbo_Table
WHERE dbo_Table.Column1="Данные";

Таблица dbo_Table раннее была в формате Access и конвертирована в SQL Server Express с помощью программы SQL Server 2017 Import and Export Data драйвером MS OLE DB Provider for SQL Server. Тип данных столбца Column1 после конвертации - nvarchar(255).

Я подозреваю, что проблема в несовместимости кодировки данных в таблице и значения переменной в запросе, т.к. с содержимым на латинице запросы работают нормально.

Подскажите, как решить данную проблему?

https://www.sql.ru/forum/1314638/zapros-v-vba-k-dannym-odbc


Как определить режим открытия формы

Вторник, 09 Июля 2019 г. 15:59 + в цитатник
Добрый день!

Как при открытии формы определить в каком режиме она открывается: добавление данных или редактирования?
Пробовал вот так, выбивает ошибку.
В справке ответа не нашел. Смотрел вот здесь

If DoCmd.OpenForm("frm_project", [acNormal], , , [acFormEdit]) Then
    MsgBox ("редактирование")
Else
    MsgBox ("Новая")
End If

https://www.sql.ru/forum/1314619/kak-opredelit-rezhim-otkrytiya-formy


Группировка записей по месяцу и году после отбора при помощи выражения between ... and...

Понедельник, 08 Июля 2019 г. 21:58 + в цитатник
Здравствуйте,

Подскажите, пожалуйста, как сделать группировку по месяцу и году игнорируя число?

Есть поле [Начало] (Начало отпуска, дата)
В запросе в условии отбора стоит выражение

Between DateSerial(Year([Дата_к]);Month([Дата_к]);1) And DateSerial(Year([Дата_к]);Month([Дата_к])+1;0)

которое делает выборку по всем датам нужного месяца и года.

01 апреля 2019
03 апреля 2019
06 апреля 2019

т.е. привести только к одной записи:

апрель 2019

дело в том, что есть еще одно поле со значением и в запросе оно повторяется, если есть несколько записей в одном месяце.

Если полю [Начало] задать другое имя с форматированием типа НачОтп: Format(Начало;"mmmm"\"yyyy") и в условии отбора вставить выражение (нужна помощь:)), получится ли сгруппировать?

https://www.sql.ru/forum/1314589/gruppirovka-zapisey-po-mesyacu-i-godu-posle-otbora-pri-pomoshhi-vyrazheniya-between-and


Запрет повторяющихся записей

Понедельник, 08 Июля 2019 г. 17:29 + в цитатник
есть форма записи на рабочий день, стоит ограничение не более 104 записей на дату, с этим все норм и работает, проблема чтобы запретить повторную запись на дату (например уже внесли человека с удостоверением 1111 на 01.01.2000. Как прописать чтобы повторно нельзя было внести человека с удостоверением 1111 на 01.01.2000 и выходило сообщение "Ваша запись на выбранную дату уже внесена" и соответственно не сохранялась запись). Как сделать этот запрет? Уже много чего перепробовал, не могу въехать. Знаю что с помощью DCount, НО КАК?? я не силен в access. Сейчас нажатие кнопки "Записаться" выглядит так:


Option Compare Database
Option Explicit

Private Sub addbutt_Click()
Dim s As String
Dim l As Long

    If Me!Удостоверение.ListIndex = -1 Then
        MsgBox "ВВЕДИТЕ ТАБЕЛЬНЫЙ НОМЕР!", vbExclamation
        Me!Удостоверение.SetFocus
     
        Exit Sub
    End If
    
    If IsNull(Me!Дата) = True Then
        MsgBox "ВЫБЕРИТЕ ДАТУ!", vbExclamation
        Me!Дата.SetFocus
        Exit Sub
    End If

'Проверка

    s = "дата=" & Format(Me!Дата, "\#mm\/dd\/yyyy\#")
    l = DCount("*", "Запись", s) 'всего записей
    
    'Debug.Print l
    If l >= 104 Then
        MsgBox "ЗАПИСЬ НА ДАННУЮ ДАТУ ЗАВЕРШЕНА!", vbExclamation
        Me!Дата.SetFocus
        Exit Sub
    End If
   
    
'Добавление
    Me.Dirty = False
    s = "ЗАПИСЬ УСПЕШНО ВЫПОЛНЕНА!" & vbCrLf & "ВАША ЗАПИСЬ №: " & l + 1 & ""
    MsgBox s, vbInformation
    DoCmd.Close acForm, Me.Name 'Закрытие текущей
    DoCmd.OpenForm "index"
    
End Sub


Private Sub Удостоверение_AfterUpdate()
Me.код_южд = DLookup("код", "южд", "удостоверение =" & Me.Удостоверение.Column(0))
End Sub

https://www.sql.ru/forum/1314581/zapret-povtoryaushhihsya-zapisey


печать отчета

Понедельник, 08 Июля 2019 г. 16:08 + в цитатник
добрый день.

возможно ли сделать, чтобы Report Footer печатался на обратной стороне последнего листа отчета? все предыдущие страницы отчета одно печататься только с одной стороны листа

Спасибо

https://www.sql.ru/forum/1314576/pechat-otcheta


Работа с треем

Воскресенье, 07 Июля 2019 г. 14:25 + в цитатник
Всем привет! В атаче пример, типа запускаем, потом весь акцесс сворачиваем, потом в трее можно кликнуть на него и оно раскроется, ну можно еще кнопку нажать в стартовой фоме, тогда другая форма будет рулить... В форме Иконка в строке
.szTip = "База Access" & vbNullChar

События (Load) можно поменять Подсказку для трея...
Недостатки:
- Не цепляет OLE ListImage (по крайней мере у меня), ругается, но работает, из-за этого в трее вместо иконки пусто... Чет с лету не смог решить эту проблему, нету контрола ListImage...

Есть у кого подобное решение со следующим функционалом (ну или допилить):
- при старте сразу в трей с адекватной иконкой...
- при клике разворот (желательно без меню акцеса, но не обязательно)
- по кнопке на форме - обратно в трей...
- при закрытии формы - завершение...

Спасибо!

https://www.sql.ru/forum/1314526/rabota-s-treem


InternetExplorer.Application нажатие кнопки

Пятница, 05 Июля 2019 г. 12:08 + в цитатник
Друзья, помогите.
Почему не работает? Что делаю не так?
Хочу перейти на страницу и скачать файл - нажать на кнопку web.

Private Sub Кнопка2_Click()
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
Dim a

a = "Скачать"

ie.Visible = True

ie.Navigate ("http://мояколея1520.рф/wagon/8/" & "?btn=" & a)



Do Until ie.ReadyState = 4
DoEvents
Loop

End Sub

https://www.sql.ru/forum/1314470/internetexplorer-application-nazhatie-knopki


Поле в отчете

Пятница, 05 Июля 2019 г. 11:17 + в цитатник
Хочу в зависимости от неких условий менять расположение и размер одного поля.
на load вешаю
Me!comm.Top = 7.5
Me!comm.Height = 10

Поле поднимается на самый верх области данных и его высота обрезается по размеру текста....
То есть расположение и размер меняется, но совсем не так как я хочу...
На Format тоже пробовал - то же самое....
Это баг или я что-то не так делаю?

https://www.sql.ru/forum/1314465/pole-v-otchete


Ошибка запроса Dcount

Пятница, 05 Июля 2019 г. 10:42 + в цитатник
Добрый день!
Задача проверить если ли дубли в базе по наименованию.
Использую.
DCount("name_company", "tbl_consumer", "[tbl_consumer]![name_company]=""" & Me.name_company & """")

Но при вводе в поле Me.name_company фразы с кавычками(например ООО "Дом"), access выдает ошибку.

Вопрос 1: как устранить ошибку при использовании кавычек?
Вопрос 2: есть ли иной способ проверки дублей?

https://www.sql.ru/forum/1314463/oshibka-zaprosa-dcount


Скрыть поле "список"

Четверг, 04 Июля 2019 г. 21:47 + в цитатник
Добрый день!

У меня возникла такая проблема:
На форме имеется неактивный список (A) для демонстрационных целей. При изменении значения другого поля, список (A) меняет свои значения.
Задача в том, что если в списка (A) будут отсутствовать значения для выбора задавать свойство Visible = False, иначе True. Выбор условия IsNull не работает так как список (A) всегда IsNull пока не выбрать в нем конкретную строку.

https://www.sql.ru/forum/1314449/skryt-pole-spisok


Как сделать ПолеСоСписком "всеядным"?

Четверг, 04 Июля 2019 г. 18:14 + в цитатник
Есть Форма1 на ней размещено ПолеСоСписком1 и Группа Выключателей1...На форме1 размещена подчинённая ленточная форма ПодчФорма1.Нужно чтобы при разных значениях ГруппаВыключателей1 менялся набор данных в ПолеСоСписком1 (т.е. при значении Группа Выключателей1=1 отображались значения Поля1 SQL-Запроса1,при значении Группа Выключателей1=2 отображались значения Поля2 SQL-Запроса1 и т.д).Это для нужно для того,чтобы можно было осуществить запрос на выборку по критерию того или иного поля и чтобы ленточная форма ПодчФорма1 отображала записи этого запроса (обращение в запросе только к Таблице1)...
В принципе ПолеСоСписком1 меняет свое "содержимое",но возникают проблемы несовместимости типа данных (с соответствующим сообщением),когда я выбираю уже из имеющегося значения ПолеСоСписком1 текстовую строку (изначально ПолеСоСписком1 числовое поле).Когда ввожу в нее цифры-все нормально работает.Т.е. содержимое меняет нормально,а при вводе нечисловых символов-ругается.Что поможет сделать ПолеСоСписком1 "всеядным"?

https://www.sql.ru/forum/1314444/kak-sdelat-polesospiskom-vseyadnym



Поиск сообщений в rss_sql_ru_access_programming
Страницы: 353 ... 348 347 [346] 345 344 ..
.. 1 Календарь