Страница: 1 |
Страница: 1 |
Вопрос: тип переменной для База данных
Добавлено: 25.01.06 16:09
Автор вопроса: mimino
Здравствуйте уважаемые знатоки VB
Я новичок в этом деле и прошу помощи вот об этом
use VB 6
У меня есть база на ACCESS (MDb)
соеденение DAO
В таблице material в поле col и cena Я должен вводить цыфры
все работает нормально еслиб эти цыфры били бы целыми.
Но как мне вводить цыфры например такие как
3622,36 и 33666,04
попробовал так
сделал типы этих полей currency
и сделал такой код :
For i = 0 To 15
Data1.Recordset.AddNew
If Text1(i).Text = "" Then
Text1(i).Text = "-"
End If
Data1.Recordset("numcalcs") = nomer
Data1.Recordset("material") = Text1(i).Text
Data1.Recordset("edizm") = Combo1(i).Text
Data1.Recordset("col") = CCur(Text2(i).Text)
Data1.Recordset("cena") = CCur(Text3(i).Text)
Data1.Recordset.Update
Next i
результат: Ошибка Type Mismatch
Заранее спасибо за ответ
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #1
Добавлено: 25.01.06 16:22
Проверь в самой базе тип полей numcalcs material edizm col cena должен соответствовать тому, что ты в них пытаешься передать. может попробуй цену передавать, конвертируя её CDbl() вместо CCur()
Номер ответа: 2
Автор ответа:
GeorgeGA
Вопросов: 1
Ответов: 101
Профиль | | #2
Добавлено: 25.01.06 16:59
mimino
ошибку выдаёт это самое тире(-),и при записи в таблицу, соответственно будет эта ошибка.Можешь вместо прочерка присвоить полю vbnullstring,при этом установив в таблице для поля разрешение добавления пустых записей(типа:allow null string)
Для ввода твоих цифр поменяй тип данных этого поля на числовой,а размер установи такой:Одинарное с плавающей точкой
Номер ответа: 3
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #3
Добавлено: 25.01.06 17:13
С плавающей точкой пойдет, но я в одной книжке читал, там рекомендовали ДЕНЬГИ в базах хранить в Currency и VBA это тоже касалось. Дело в некоторых "артефактах", которые потом могут непредвиденно возникнуть, типа половины копейки в макросе или при сравнении двух величин.. Делают денежный формат, чтобы в этом отношении потом не волноваться. Ведь что такое пол копейки, записанное в базе 5400 раз? Правильно, это целый вечнозелёный USD
Номер ответа: 4
Автор ответа:
GeorgeGA
Вопросов: 1
Ответов: 101
Профиль | | #4
Добавлено: 25.01.06 17:29
mc-black
когда выставляешь плавающую точку, то можно установить и число десятичных знаков,которые необходимо учитывать, в нашем случае это 2.Так что по этому поводу можно спать спокойно,в случае увеличения сотой части,так это простое округление
Номер ответа: 5
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #5
Добавлено: 25.01.06 18:29
понятно, не спорю, можно и так. я просто обратил внимание на то, что в примере mimino этот тип использован, думал может он тоже про curency такое слышал.
Номер ответа: 6
Автор ответа:
mimino
Вопросов: 6
Ответов: 16
Профиль | | #6
Добавлено: 26.01.06 16:51
поле материал ошибку не выдает "-"
так как поле material тип текстовый
ошибка появляется тут :
Data1.Recordset("col" = CCur(Text2(i).Text)
Data1.Recordset("cena" = CCur(Text3(i).Text)
----
поле поле col = был currency
cena тоже также
Я их делаю через MS Access97
Error 13
Type mismatch
попробовал так
cena и col сделал integer как сказал GeorgeGA
размер сделал с плавующей точкой (4 и 8 байт обе попробовал. Число десятычных Авто)
Data1.Recordset("col" = CDbl(Text2(i).Text)
Data1.Recordset("cena" = CDbl(Text3(i).Text)
Тоже такое же ошибка.
В чем мог я ошибся ?
Номер ответа: 7
Автор ответа:
GeorgeGA
Вопросов: 1
Ответов: 101
Профиль | | #7
Добавлено: 26.01.06 17:40
mimino
тебе нужно просто убрать конвертацию CCur(),и если в поле могут внести не числовой коэффициент,то проверку,что-то типа
.....
end if
Номер ответа: 8
Автор ответа:
mimino
Вопросов: 6
Ответов: 16
Профиль | | #8
Добавлено: 01.02.06 15:19
Так вот
после нескольких дней опять вернулся к этой теме
извините что беспокоил за такую ерунду.
оказывается
в базу не вводятся изза того что вместо запятой вводились точки.
если разделитель дробной части точка,
база говорит Type Mismatch
если запятая то все ок
спасибо
извините меня
Номер ответа: 9
Автор ответа:
mimino
Вопросов: 6
Ответов: 16
Профиль | | #9
Добавлено: 01.02.06 16:26
теперь как мне сделать ?
чтоб : если
ccur(text2(i).text)=15.33 #разделитель точка
стало
ccur(text2(i).text)=15,33 #разделитель запятая
проблема в том что если в текстовое поле ввести качестве разделителя запятую то арфметические функции не выполняются так как есть такой код
Private Sub Text3_Change(Index As Integer)
Text4(i).Text = Format(Val(Text2(i).Text) * Val(Text3(i).Text), "0.00"
end sub
с точкой вся арифметика работает
но в базу не записывается
так как для базы нужен разделитель как запятая
Номер ответа: 10
Автор ответа:
mynog
Вопросов: 3
Ответов: 42
Профиль | | #10
Добавлено: 02.02.06 23:56
Возможно, все получиться, если в настойках Винды указать одинаковые
разделители дробной части для чисел и денежных единиц.
Если приложение предполагается устанавливать на другой
компьютер, то это не совсем корректно - не менять же
установки чужого компа под свою программу.
В этом случае может помочь установка формата текстовых полей
в Currency.
Если и это не поможет, то можно совсем тупо:
<CODE>
Text4(i).Text = Replace$(Str$(Round(CCur(Text2(i).Text) *
CCur(Text3(i).Text), 2)), ".", ","
</CODE>
Опять-таки могут возникнуть проблемы с региональными
установками.
Номер ответа: 11
Автор ответа:
mimino
Вопросов: 6
Ответов: 16
Профиль | | #11
Добавлено: 03.02.06 07:31
Спасибо
но Я поступил уже
еще тупеее
сохраняю в базе как строковой
когда будет надо переведу через Val