Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблемы с типом данных / 2 сообщений из 2, страница 1 из 1
04.11.2004, 18:46:43
    #32769500
Bagin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с типом данных
Вознинкли проблемы с типами данных. Из аксеса 2003 делаю запрос к хранимой процедуре на MS SQL 2000. Все работает нормально, но только если в поле, которому привязы данные типа decimal или numeric, попробовать ввести число, пишет, что тип данных не соответствует, воспринимает только 0 или пустую строку (null). Данные получаю следующим образом:
Код: plaintext
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.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
Private rst As New ADODB.Recordset
Private rstForEdit As New ADODB.Recordset
................
................
' Me.SQLList - здесь хранится имя 
' вызываемой процедуры с параметрами

'Получение набора данных:
 rst.CursorLocation = adUseClient
 rst.Open _
 "exec " + Me.SQLList, cnnPrj, , adLockBatchOptimistic

 Set rst.ActiveConnection = Nothing   ' - Данные получены и лишнюю 
                                      '   связь держать не к чему

 Dim iFld As Integer
 Dim rstField

 With rstForEdit
 
  ' Создание рекордсета для редактирования с той же
  ' структурой, что и полученный набор данных 
  ' (хотя не уверен, что структура повторяется один к одному):
  For iFld =  0  To rst.Fields.Count -  1 
    .Fields.Append rst.Fields(iFld).Name _
                 , rst.Fields(iFld).Type _
                 , rst.Fields(iFld).DefinedSize
  Next iFld

  ' Открытие рекордсета с возможностью редактирования:
  .Open , , adOpenKeyset, adLockOptimistic

   
  If rst.RecordCount >  0  Then
    rst.MoveFirst        '- это может быть лишнее, на всякий случай
  
    ' Копирование записей из исходного рекордсета в новый:
    Do While Not rst.EOF
        .AddNew

       For Each rstField In rst.Fields
        .Fields(rstField.Name) = rstField
       Next rstField

       .Update

       rst.MoveNext
    Loop

  End If
 End With
 
 ' Привязка рекордсета к форме 
 Set Me.ListSub.Form.Recordset = rstForEdit
.....................
Пытался здесь:
Код: plaintext
1.
2.
.Fields.Append rst.Fields(iFld).Name _
                 , rst.Fields(iFld).Type _
                 , rst.Fields(iFld).DefinedSize
вылавливать тип данных, и указывать дополнительные параметры (точность, размерность), но не помогло. Если в поле уже содержиться число не равное нулю, то при копировании записей из исходного рекордсета в новый вылетает ошибка, что данные вышли за пределы допустимого или не соответствует тип.
Помогает только интежер, но мне надо числа после запятой. Тип поля в создаваемом рекорсете соответствует типу поля в таблице. Менял разделитель в региональных настройках с запятой на точку и обратно - не помогает.
Может кто сталкивался?
Заранее спасибо.
...
Рейтинг: 0 / 0
04.11.2004, 20:10:09
    #32769619
Bagin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с типом данных
Решил следующим образом:
Из ХП отправляю данные конвертнув в флоат CONVERT(float, @Cost), а в поле формы аксеса выставил ограничение на на данные.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблемы с типом данных / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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