|
|
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
Всем привет! Как проснулся-тут же накропал :-) Возникла непонятная ситуация: Есть две таблицы (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 Все заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 10:24 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
> Как проснулся-тут же накропал :-) Boker tov! > Часто бывает, что при наличии одинаковых данных в сравниваемых полях, они не идентифицируются как одинаковые. Естественно! Данные с дробной частью запрещено проверять на равенство. Надо писать: abs(a-b)<0.0005 (например) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 12:00 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
2 Саныч Рад тебя видеть! Что-то , думаю, никто не отвечает, даже Саныч. А в Эрец Израэль сейчас на 2 часа раньше Москвы, да? Теперь по существу: 1. А почему тогда, при повторном вводе в таблицу сумм вручную, все идентифицируется? Ведь по-прежнему сравниваются дробные числа. И почему ошибка возникает не для всех записей, а только для некоторых, хотя дробные - все? 2. Если все-же дело в том, что ты сказал, то: Запрос делается в конструкторе, по этим 2-м таблицам, между ними установлены связи: "Объединение всех записей из BUH и только тех из ТО, в которых связанные поля совпадают". Для поля датанакладной (ТО) задается условие is Null, чтобы в результате вывести только несовпавшие значения (BUH). Это мы уже как-то обсуждали. Вопрос: А как мне в конструкторе тогда сделать сравнение ,обойдя при этом ограничение на сравнение дробных чисел? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 12:28 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
Да, вот еще: Если например, в таблице точно есть сумма 733.67 и она у меня не сверяется, и я открываю эту таблицу и ищу сумму через поиск (безо всяких учетов формата и т.п.), то она не находится до тех пор, пока я ее не введу заново в тоже поле вручную. Все-таки у меня подозрение на ошибки в процессе занесения данных в таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 13:14 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
2Саныч >Данные с дробной частью запрещено проверять на равенство Да, но только, если это не денежный формат - его можно ? CCur (23.34343) =Ccur(23.34342) ? 23.34343 = 23.34342 == И зачем люди лепят поля с типами данных ака "плавающая запятая"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 13:28 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
2 Senin Viktor А что лепить? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 13:42 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
М-да, похоже тема тихо померла.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 14:10 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
У нас разница с Москвой 1 час. :^) На то, что проверка на равенство иногда работает, полагаться низя. Обходить - так, как я написал выше. :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 16:13 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
у меня есть поле в котором отображается целое , поле тоже целое. ноесли в него из вба записать типа поле=10/3. будет отображаться целое 3. при любом формате даже экпотенциальном. а сравниваться 3=3 не будет!!!! пока в поле ручками 3 не впишешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 16:23 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
> а сравниваться 3=3 не будет!!!! По-моему, это перебор. Что же в нем сидит-то? Если оно в таблице описано как целое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 16:26 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
О как! Ладнось, спасибо, попробую обойти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 16:28 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
2 Саныч А вот как с денежным форматом? Можно сравнивать или низя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 16:30 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
Денежный можно, Виктор прав. Там данные хранятся как целые (как целое число копеек, или центов, или агорот). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 16:32 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
А как у тебя туда данные заносятся???? Наверняка что-то типа: [Количество]*[Цену] Причем, даже если поставить денежный формат, то один фиг - не получается сравнить. Выход - при расчете округлять все до нужного знака. В моем случае - это 2 знака после запятой, т.е. Int([Количество]*[Цена]*100+0.5)/100 после таких манипуляция все прекрасно сравнивается и бьется в нули! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 16:32 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
2 Саныч Да и еще: А с тем, что после ручного ввода все ОК - это почему? И с тем, что поиском в таблице не могу найти, пока ручками не введу заново поверх? Извини за занудство, но хочется докопаться до причин. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 16:33 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
2 Troubles Заносятся впрямую числа безо всяких формул. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 16:40 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
Просто представление, которое мы видим на экране, отличается от внутреннего представления. То, что на экране, округлено. А на самом деле там может оказаться разница в каком-нибудь 20-м знаке после запятой, которую мы не видим. Кстати, если не ошибаюсь, одна десятая, если ее записать по двоичной системе, превратится в бесконечную периодическую дробь. Это значит, что она может сидеть в памяти только приблизительно. В каких-то случаях Аксесс достаточно умный и понимает, какое сравнение от него требует человек. Но далеко не всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 16:40 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
2 Саныч Т.е. даже и в денежном формате такая петрушка с 20-м знаком возможна, я правильно понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 16:44 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
Ну тогда не знаю что у тебя там за гимор такой. Ты же говоришь, что если заново забить руками, то все Ок. И тут же ты говоришь, что циферки и так руками туда забиваются. Не понимю?! :( Ну попробуй тогда сравнивать так: Int([Сумма1]*100+0.5)/100 = Int([Сумма2]*100+0.5)/100 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 16:47 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
Денежный - нет! Я же уже написал, что он хранится как целый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 16:49 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
2 troubles Извини, я не говорил, что цифирки туда и так руками забиваются. Заносятся данные туда автоматически. Вручную я забиваю, когда сверка не идет, а число такое в таблице есть. Я его и перенабиваю заново вручную. 2 Саныч Если насчет денежного формата - беседер, то тогда, если данные у меня хранятся в денежном формате ( а они так и хранятся), то все должно работать корректно. А оно не работает. Или я чего-то не догоняю :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 16:57 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
Сорри. У тебя формат денежный. А надо тип данных денежный. Формат - это только на экран и на принтер. А тип данных - это внутреннее представление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 17:00 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
То Саныч: Вот, а я только хотел сказать, что как я не ставил денежный формат, мне ни помогло, но ты меня опередил. :)) То beseder: Ну так заноси их автоматически с округлением до нужного знака!!! Кто тебе мешает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 17:04 |
|
||
|
Формат/тип поля?
|
|||
|---|---|---|---|
|
#18+
2 Саныч Век живи-век учись. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2003, 17:06 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32314414&tid=1678448]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
85ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 429ms |

| 0 / 0 |
