powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запись числа в поле (Access & SQL)
6 сообщений из 6, страница 1 из 1
Запись числа в поле (Access & SQL)
    #39488353
Фотография NickBell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть главная форма (источник сама таблица) и подчиненная форма.

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

Ниже у меня сам код кнопки, с помощью которого происходит этот процесс.
Меня интересует следующее, почему на главной форме в поле "Наличные" вместо 97.20 видно 97.00.
Слева от этого поля находится свободное поле, где вычисление происходит по формуле автоматически. И отсюда я заметила разницу, что вот так округляет число, непонятно почему.

Кстати, если в поле, где указывается процент, менять проценты, то в поле "Наличные" всё нормально показывает.

Вроде бы никакой существенной разницы нет между ними, не понимаю, почему так по разному действуют на поле "Наличные".

Код для добавления анализов
Код: vbnet
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.
Private Sub cmd_add_Click()
On Error GoTo Er
Dim idpath As String
    idpath = Forms![gamokvleva_add]![idpatient_history]
Dim t As String
    p = "proc_dmax_nomer_baza @idpathistory=" & idpath
         Call MAXCOUNT("sproc_dmax_nomer_baza", p, pmax)
    t = pmax + 1
If (Forms![gamokvleva_add]![check_other] = -1) Then
    p = "proc_insert_baza_1 @idpathistory=" & idpath & ", @nomer=" & t & ", @idregtest=" & Me.id_registration_test
    Call PROC("sproc_insert_baza_1", p, 0)
Else
    p = "proc_insert_baza_2 @idpathistory=" & idpath & ", @nomer=" & t & ", @idregtest=" & Me.id_registration_test
    Call PROC("sproc_insert_baza_2", p, 0)
End If
If Forms![gamokvleva_add]![numsqesi] = 1 Then
    p = "proc_insert_bazapatienttests_1 @idpathistory=" & idpath & ", @idregtest=" & Me.id_registration_test
    Call PROC("sproc_insert_bazapatienttests_1", p, 0)
Else
    p = "proc_insert_bazapatienttests_2 @idpathistory=" & idpath & ", @idregtest=" & Me.id_registration_test
    Call PROC("sproc_insert_bazapatienttests_2", p, 0)
End If
    Dim dsumma As Currency
    p = "proc_summa_idpathistory_fasi @idpathistory=" & idpath
         Call MAXCOUNT("sproc_summa_idpathistory_fasi", p, pmax)
    dsumma = pmax
    Dim t1 As Currency
        t1 = Nz(dsumma) - (Nz(dsumma) * (Nz(Forms![registratura_newedit]![procent]))) / 100
        p = "proc_update_patienthistory_6 @idpathistory=" & idpath & ", @salaro=" & str(t1)
        Call PROC("sproc_update_patienthistory_6", p, 0)
    Forms![registratura_newedit]![registratura_newedit_subform].Form.Requery
    Forms![registratura_newedit]![registratura_newedit_subform].Visible = True
    Forms![registratura_newedit].Form.Requery
Ex: Exit Sub
Er: MsgBox Err.Description
    Resume Ex
End Sub



Код для поля "Процент"
Код: vbnet
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.
Private Sub procent_AfterUpdate()
    Dim t As Currency
        t = Nz(Me.sumtests) - (Nz(Me.sumtests) * (Nz(Me.procent))) / 100
        Me.salaros_tanxa = str(t)
        Me.baratis_tanxa = 0
Call MONACEMEBI
End Sub

Function UPDATO()
If IsNull(id_eqimi) Then
    p = "proc_update_patienthistory_visit @idpatient=" & Me.id_patient & "," _
            & " @idpathistory=" & Me.id_patient_history & "," _
            & " @ideqimi=Null," _
            & " @procento=" & Me.procent & "," _
            & " @salarostanxa=" & Nz(Me.salaros_tanxa, 0) & "," _
            & " @baratistanxa=" & Nz(Me.baratis_tanxa, 0) & "," _
            & " @fasdaklebistanxa=" & Nz(Me.fasdaklebis_tanxa, 0)
Else
    p = "proc_update_patienthistory_visit @idpatient=" & Me.id_patient & "," _
            & " @idpathistory=" & Me.id_patient_history & "," _
            & " @ideqimi=" & Me.id_eqimi & "," _
            & " @procento=" & Me.procent & "," _
            & " @salarostanxa=" & Nz(Me.salaros_tanxa, 0) & "," _
            & " @baratistanxa=" & Nz(Me.baratis_tanxa, 0) & "," _
            & " @fasdaklebistanxa=" & Nz(Me.fasdaklebis_tanxa, 0)
End If
    Call PROC("[sproc_update_patienthistory_visit]", p, 0)
End Function

Function MONACEMEBI()
Call UPDATO
    p = "proc_select_baza @idpathistory=" & Me.id_patient_history
         Call PROC("sproc_select_baza", p, 1)
    Me.registratura_newedit_subform.Form.RecordSource = "sproc_select_baza"
    Me.registratura_newedit_subform.Form.Requery
End Function

...
Рейтинг: 0 / 0
Запись числа в поле (Access & SQL)
    #39488377
хм-м-м
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не по заданному вопросу:

Код: vbnet
1.
            & " @ideqimi=Null," _

Почему не
Код: vbnet
1.
            & " @ideqimi Is Null," _

?
...
Рейтинг: 0 / 0
Запись числа в поле (Access & SQL)
    #39488399
Фотография NickBell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм-м-м,

Не заметила, сейчас исправлю ... :)
...
Рейтинг: 0 / 0
Запись числа в поле (Access & SQL)
    #39488528
Фотография NickBell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае такая запись должна быть, так как она пересылается в запрос

Код: vbnet
1.
& " @ideqimi=Null," _
...
Рейтинг: 0 / 0
Запись числа в поле (Access & SQL)
    #39489081
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickBell...
Меня интересует следующее, почему на главной форме в поле "Наличные" вместо 97.20 видно 97.00.
...
Подозреваю, что такое может произойти именно из-за типа данных. Видимо у Вас целочисленные типы данных и Вы явно не преобразовали их в формуле на Float, Numeric(n, m) и т.д. на стороне сервера или же в MS Access не использовали CDbl.
Попробуйте, должно сработать.

Чтобы Вам было более понятно, вот примерчик. Запустите этот скрипт в MS SQL Server и посмотрите на результат.
Код: sql
1.
2.
3.
4.
5.
6.
declare @n as table(a int, b int, c numeric(3, 2));
insert into @n
values (17, 3, 1);

select a/b Result1, a/b*c Result2, CAST(a AS Float)/CAST(b As Float) Result3
from @n;
...
Рейтинг: 0 / 0
Запись числа в поле (Access & SQL)
    #39489384
Фотография NickBell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren,

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

А какой из этих типов лучше указывать для таких полей, где дело имеем с деньгами?
money

float

numeric
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запись числа в поле (Access & SQL)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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