powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Формат/тип поля?
25 сообщений из 28, страница 1 из 2
Формат/тип поля?
    #32314414
Фотография beseder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Как проснулся-тут же накропал :-)
Возникла непонятная ситуация:
Есть две таблицы (BUH и TO). Обе имеют поле СуммаЗакупки:
Числовое (двойное с плав. точкой), формат-Денежный, число знаков- авто. Маски ввода -нет.
Данные в поля заносятся так:
Создается линк с файлом екселя.
Далее ,из полученной после линка связанной таблицы "Импорт", происходит перенос данных в таблицу BUH.
Связанная таблица затем удаляется.
Аналогичный процесс для таблицы ТО.
Если посмотреть связанную таблицу до удаления, то поле Сумма там будет:
Числовое (двойное с плав. точкой), с разделителями разрядов, число - авто.

После занесения данных в таблицы BUH и TO, они сравниваются на соответствие. Сравнение происходит по полям: ДатаНакладной и СуммаЗакупки
И что странно:
Часто бывает, что при наличии одинаковых данных в сравниваемых полях, они не идентифицируются как одинаковые. Это относится только к полю СуммаЗакупки. С датами проблем нет.

Ввожу в поле СуммаЗакупки эти же цифири ручками еще раз - все ОК.

Пока не могу уловить в какую таблицу надо заново вносить. Бывает, что надо заменить в первой таблице, а бывает, что и во второй.

Смотрел исходные ексель файлы.
Вроде бы с форматом ячеек сумм это не связано,
Например, формат всех ячеек столбца этих сумм в док-те ексель представлен, как числовой с разделителем и кол-вом знаков=2. При этом, какие-то суммы ( после попадания в аксесс) при сверке идентифицируются как одинаковые, а какие-то нет.
Никак не могу ухватить за хвост причину.
Может у кого есть мысли, где копать?

Function SIA()
On Error GoTo 2
Dim fd As FileDialog
Dim s, fm
Dim Msg, Style, Title, Response, Mystring
Dim MyFile, MyPath, MyName

Set fd = Application.FileDialog(msoFileDialogFilePicker)
Dim vrtSelectedItem As Variant

With fd
If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
s = vrtSelectedItem
fm = "//pos/общая папака/реестры/test.xls"

FileCopy s, fm ' Copy source to target.

MyFile = Dir(s)
Msg = " " & MyFile
Style = vbOKCancel + vbDefaultButton1 ' Define buttons.
Title = "Импорт реестра" ' Define title.
Response = MsgBox(Msg, Style, Title)
If Response = vbCancel Then ' User chose Cancel
Exit Function
End If

'Импорт
DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel9, "Импорт", fm, True, ""
DoCmd.RunSQL "INSERT INTO BUH ( КодАптеки, ДатаНакладной, №Накладной, СуммаЗакупки, КодПоставщика)" & _
"SELECT Импорт.КодАптеки, Импорт.ДатаНакланой, Импорт.№накладной, Импорт.Сумма, Поставщики.[КодПоставщика]" & _
"FROM Импорт, Поставщики WHERE (((Поставщики.[КодПоставщика])=1)AND((Импорт.[Сумма])Is Not Null));"
2 DoCmd.DeleteObject acTable, "Импорт"
MsgBox "Импорт завершен", vbInformation, "Импорт реестра"

Next vrtSelectedItem
End If
End With
Set fd = Nothing
End Function
Все заранее спасибо!
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32314567
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Как проснулся-тут же накропал :-)

Boker tov!

> Часто бывает, что при наличии одинаковых данных в сравниваемых полях, они не идентифицируются как одинаковые.

Естественно! Данные с дробной частью запрещено проверять на равенство. Надо писать:

abs(a-b)<0.0005 (например)
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32314615
Фотография beseder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Саныч
Рад тебя видеть! Что-то , думаю, никто не отвечает, даже Саныч.
А в Эрец Израэль сейчас на 2 часа раньше Москвы, да?

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

2. Если все-же дело в том, что ты сказал, то:
Запрос делается в конструкторе, по этим 2-м таблицам, между ними установлены связи:
"Объединение всех записей из BUH и только тех из ТО, в которых связанные поля совпадают". Для поля датанакладной (ТО) задается условие is Null, чтобы в результате вывести только несовпавшие значения (BUH). Это мы уже как-то обсуждали.
Вопрос: А как мне в конструкторе тогда сделать сравнение ,обойдя при этом ограничение на сравнение дробных чисел?
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32314687
Фотография beseder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, вот еще:
Если например, в таблице точно есть сумма 733.67 и она у меня не сверяется, и я открываю эту таблицу и ищу сумму через поиск (безо всяких учетов формата и т.п.), то она не находится до тех пор, пока я ее не введу заново в тоже поле вручную. Все-таки у меня подозрение на ошибки в процессе занесения данных в таблицы.
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32314714
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Саныч
>Данные с дробной частью запрещено проверять на равенство

Да, но только, если это не денежный формат - его можно

? CCur (23.34343) =Ccur(23.34342)
? 23.34343 = 23.34342

==
И зачем люди лепят поля с типами данных ака "плавающая запятая"?
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32314747
Фотография beseder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Senin Viktor
А что лепить? :-)
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32314791
Фотография beseder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М-да, похоже тема тихо померла....
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315011
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
У нас разница с Москвой 1 час. :^)

На то, что проверка на равенство иногда работает, полагаться низя.

Обходить - так, как я написал выше. :^)
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315031
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня есть поле в котором отображается целое , поле тоже целое. ноесли в него из вба записать типа поле=10/3. будет отображаться целое 3. при любом формате даже экпотенциальном. а сравниваться 3=3 не будет!!!!
пока в поле ручками 3 не впишешь.
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315037
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> а сравниваться 3=3 не будет!!!!

По-моему, это перебор. Что же в нем сидит-то? Если оно в таблице описано как целое.
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315039
Фотография beseder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О как!
Ладнось, спасибо, попробую обойти.
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315045
Фотография beseder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Саныч
А вот как с денежным форматом? Можно сравнивать или низя?
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315049
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Денежный можно, Виктор прав. Там данные хранятся как целые (как целое число копеек, или центов, или агорот).
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315050
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как у тебя туда данные заносятся???? Наверняка что-то типа: [Количество]*[Цену] Причем, даже если поставить денежный формат, то один фиг - не получается сравнить. Выход - при расчете округлять все до нужного знака. В моем случае - это 2 знака после запятой, т.е.
Int([Количество]*[Цена]*100+0.5)/100
после таких манипуляция все прекрасно сравнивается и бьется в нули!
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315051
Фотография beseder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Саныч
Да и еще:
А с тем, что после ручного ввода все ОК - это почему?
И с тем, что поиском в таблице не могу найти, пока ручками не введу заново поверх?
Извини за занудство, но хочется докопаться до причин.
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315067
Фотография beseder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Troubles
Заносятся впрямую числа безо всяких формул.
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315068
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Просто представление, которое мы видим на экране, отличается от внутреннего представления. То, что на экране, округлено. А на самом деле там может оказаться разница в каком-нибудь 20-м знаке после запятой, которую мы не видим.

Кстати, если не ошибаюсь, одна десятая, если ее записать по двоичной системе, превратится в бесконечную периодическую дробь. Это значит, что она может сидеть в памяти только приблизительно. В каких-то случаях Аксесс достаточно умный и понимает, какое сравнение от него требует человек. Но далеко не всегда.
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315074
Фотография beseder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Саныч
Т.е. даже и в денежном формате такая петрушка с 20-м знаком возможна, я правильно понял?
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315084
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну тогда не знаю что у тебя там за гимор такой. Ты же говоришь, что если заново забить руками, то все Ок. И тут же ты говоришь, что циферки и так руками туда забиваются. Не понимю?! :(
Ну попробуй тогда сравнивать так:
Int([Сумма1]*100+0.5)/100 = Int([Сумма2]*100+0.5)/100
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315089
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Денежный - нет! Я же уже написал, что он хранится как целый.
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315107
Фотография beseder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 troubles
Извини, я не говорил, что цифирки туда и так руками забиваются.
Заносятся данные туда автоматически. Вручную я забиваю, когда сверка не идет, а число такое в таблице есть. Я его и перенабиваю заново вручную.
2 Саныч
Если насчет денежного формата - беседер, то тогда, если данные у меня хранятся в денежном формате ( а они так и хранятся), то все должно работать корректно. А оно не работает. Или я чего-то не догоняю :-(
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315114
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Сорри. У тебя формат денежный. А надо тип данных денежный. Формат - это только на экран и на принтер. А тип данных - это внутреннее представление.
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315123
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То Саныч:
Вот, а я только хотел сказать, что как я не ставил денежный формат, мне ни помогло, но ты меня опередил. :))
То beseder:
Ну так заноси их автоматически с округлением до нужного знака!!! Кто тебе мешает.
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315126
Фотография beseder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Саныч
Век живи-век учись. Спасибо.
...
Рейтинг: 0 / 0
Формат/тип поля?
    #32315127
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Век живи

У нас принято до 120.
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Формат/тип поля?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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