Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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)
Но как мне вводить цыфры например такие как 3622,36 и 33666,04

Для ввода твоих цифр поменяй тип данных этого поля на числовой,а размер установи такой:Одинарное с плавающей точкой

Ответить

Номер ответа: 3
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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(),и если в поле могут внести не числовой коэффициент,то проверку,что-то типа
if isnumeric(Text2(i).Text)=false then
.....
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


Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам