Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как редактировать несуществующее поле? / 15 сообщений из 15, страница 1 из 1
01.10.2004, 21:41:36
    #32720903
Bagin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как редактировать несуществующее поле?
Здравствуйте !!!
Вот такой вопрос:
С помощью ADODB.Recordset получаю данные из ХП с SQL-сервера.
Код: plaintext
1.
2.
3.
4.
5.
6.
rst.CursorLocation = adUseClient
rst.Open  "exec " + Me.SQLList, cnnPrj, , adLockBatchOptimistic
Set rst.ActiveConnection = Nothing
Set Me.Recordset = rst
Me.Controls.Item("id").ControlSource = "id"
.......................
Me.Controls.Item("exist").ControlSource = "exist"
Результатом ХП является выборка из реальных полей таблиц и одно виртуальное поле, которое формируется в запросе.
Так вот в форме те поля, которые соответствуют реальным, можно поменять и выйти из поля и даже перейти на следующую запись, виртуальное поле тоже можно изменить, но выйти из него невозможно, а тем более перети на другую запись, помогает только Esc, что отменяет изменение данных именно в это поле. Может кто решал такую проблему? Как заставить это поле меняться? И почему аксес различает эти поля, ведь он же о них ничего не знает, т.к. получил из хранимой процедуры, а к таблицам ничего не подцеплено?
Данные из этой формы возвращать никуда не надо, на основании этих данных я формирую совершенно другой запрос на выполнение другой ХП.
...
Рейтинг: 0 / 0
01.10.2004, 23:33:14
    #32720935
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как редактировать несуществующее поле?
Я никогда не работал с ХП, поэтому пытаюсь рассуждать логически. Если редактировать "обычное" поле, то эти изменения отражаются на данных в таблице? Если да, то вот и ответ. Если нет, то я не прав.
...
Рейтинг: 0 / 0
01.10.2004, 23:54:32
    #32720943
AlTis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как редактировать несуществующее поле?
посмотрите
/topic/123970&hl=

последний пост
...
Рейтинг: 0 / 0
02.10.2004, 01:20:36
    #32720958
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как редактировать несуществующее поле?
AlTisпосмотрите
/topic/123970&hl=

последний пост
И как это использовать вместо ХП?
...
Рейтинг: 0 / 0
02.10.2004, 11:47:26
    #32721033
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как редактировать несуществующее поле?
Проблемное поле спряч (ПроблемныйКонтрол.Visible=False)
вместо него поставь поле несвязанное с источником НесвязанныйКонтрол(свойство данные не заполненно)
На событие Form_Current
инициализируй
НесвязанныйКонтрол = ПроблемныйКонтрол
...
Рейтинг: 0 / 0
02.10.2004, 12:03:53
    #32721041
AlTis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как редактировать несуществующее поле?
2 Владимир Саныч

Создать форму со "свободным" рекордсетом.
На события обновления полей - писать программно в БД.
...
Рейтинг: 0 / 0
03.10.2004, 03:01:05
    #32721225
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как редактировать несуществующее поле?
AlTis2 Владимир Саныч

Создать форму со "свободным" рекордсетом.
Как это использовать вместо ХП ? Куда переносить логику этой ХП?
...
Рейтинг: 0 / 0
03.10.2004, 10:12:13
    #32721248
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как редактировать несуществующее поле?
Не надо плохо думать об Аксе - он хорошо знает - редактируемое поле или нет!
Решение, предлагаемое Latuk хорошо только в случае показа записей в формате Forma, те когда на экране появляется только одна запись, в табличном виде при переходе со строки на строку во всех записях евидимое поле будет приобретать значение текущей.
Решением, мне кажется, будет создание временной таблицы.
...
Рейтинг: 0 / 0
03.10.2004, 10:31:34
    #32721253
AlTis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как редактировать несуществующее поле?
Владимир Саныч AlTis2 Владимир Саныч

Создать форму со "свободным" рекордсетом.
Как это использовать вместо ХП ? Куда переносить логику этой ХП?

Присвоить результат выполнения ХП рекордсету.
После чего назначить этот рекордсет форме.
В результате у нас будет форма с отвязанным рекордсетом.
Или использовать временные таблицы, но это на усмотрение разработчика.
...
Рейтинг: 0 / 0
04.10.2004, 11:36:57
    #32721820
Bagin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как редактировать несуществующее поле?
Владимир Саныч AlTis2 Владимир Саныч

Создать форму со "свободным" рекордсетом.
Как это использовать вместо ХП ? Куда переносить логику этой ХП?
Это не вместо ХП. Необходимо получить набор данных в приложение клиента, сформированный некой ХП (в которой есть и вычисляемое поле и к которой мы не обратимся, т.е. после получения данных эта ХП не интересует). Далее, можно отредактировать записи в полученном наборе (в т.ч. и вычисляемые поля) и на основании этих данных выполнить совершенно другую ХП, т.е. вся логика остается на SQL-сервере и реализуется с помощью ХП. Но это же другая песня, мне бы получить возможность редактировать все данные в полученном наборе.
...
Рейтинг: 0 / 0
04.10.2004, 11:37:53
    #32721822
Bagin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как редактировать несуществующее поле?
AlTisПрисвоить результат выполнения ХП рекордсету.
После чего назначить этот рекордсет форме.
В результате у нас будет форма с отвязанным рекордсетом.А разве это следующий код не создает отвязанный рекорсет:
Код: plaintext
1.
2.
rst.Open  "exec " + Me.SQLList, cnnPrj, , adLockBatchOptimistic
Set rst.ActiveConnection = Nothing
Set Me.Recordset = rst
Тогда я что-то вообще ничего не понимаю. Если не трудно, объясните, плииз.
...
Рейтинг: 0 / 0
04.10.2004, 12:37:37
    #32721970
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как редактировать несуществующее поле?
Признаюсь честно, не проверял поведение "отвязанного" рекордсета, но по логике вещей, ничего не должно измениться в рекордсете после его отвязки. Как было поле нередактируемым, так и должно остаться. Если это не так, то при попытке сохранения рекордсета произойдет ошибка - куда должно быть сохранено виртуальное поле?
Поэтому, повторяюсь, мне кажется, лучше всего результат ХП сохранить во временной таблице форму привязать к ней. Делать можно все что угодно!
...
Рейтинг: 0 / 0
05.10.2004, 10:00:49
    #32723290
Bagin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как редактировать несуществующее поле?
Rivkin DmitryЕсли это не так, то при попытке сохранения рекордсета произойдет ошибка - куда должно быть сохранено виртуальное поле?
А мне не нужно сохранять в этом месте рекордсет, нужно получить данные, отредактировать их, и на основе отредактированных данных выполнять то или иное действие.
...
Рейтинг: 0 / 0
05.10.2004, 10:09:32
    #32723309
Bagin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как редактировать несуществующее поле?
Всем спасибо, вот что получилось, может кому понадобится:
Код: plaintext
Private rst As New ADODB.Recordset\nPrivate rstForEdit As New ADODB.Recordset\n................\n................\n \' Me.SQLList - здесь хранится имя  \n \' вызываемой процедуры с параметрами \n\n \'Получение набора данных: \n rst.CursorLocation = adUseClient\n rst.Open _\n "exec " + Me.SQLList, cnnPrj, , adLockBatchOptimistic\n\n Set rst.ActiveConnection = Nothing    \' - Данные получены и лишнюю  \n                                       \'   связь держать не к чему \n\n Dim iFld As Integer\n Dim rstField\n\n With rstForEdit\n \n   \' Создание рекордсета для редактирования с той же \n   \' структурой, что и полученный набор данных  \n   \' (хотя не уверен, что структура повторяется один к одному): \n  For iFld =  0  To rst.Fields.Count -  1 \n    .Fields.Append rst.Fields(iFld).Name _\n                 , rst.Fields(iFld).Type _\n                 , rst.Fields(iFld).DefinedSize\n  Next iFld\n\n   \' Открытие рекордсета с возможностью редактирования: \n  .Open , , adOpenKeyset, adLockOptimistic\n\n   \n  If rst.RecordCount >  0  Then\n    rst.MoveFirst         \'- это может быть лишнее, на всякий случай \n  \n     \' Копирование записей из исходного рекордсета в новый: \n    Do While Not rst.EOF\n        .AddNew\n\n       For Each rstField In rst.Fields\n        .Fields(rstField.Name) = rstField\n       Next rstField\n\n       .Update\n\n       rst.MoveNext\n    Loop\n\n  End If\n End With\n \n  \' Привязка рекордсета к форме  \n Set Me.ListSub.Form.Recordset = rstForEdit\n.....................

Помогло вот это: AlTisпосмотрите
/topic/123970&hl=

последний постЯ ее раньше видел, но не хотел создавать второй рекордсет, думал найти более красивое решение, но не смог. Полтора дня искал. "И на хрена я полез, я же все равно читать не умею"
...
Рейтинг: 0 / 0
03.11.2004, 20:34:49
    #32767597
Bagin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как редактировать несуществующее поле?
Здравствуйте!
Опять проблемы, все работает нормально, но только при типе данных decimal или numeric спотыкается. При попытке ввести в поле число, пишет, что тип данных не соответствует, воспринимает только 0 или пустую строку. Пытался здесь:
Код: plaintext
1.
2.
.Fields.Append rst.Fields(iFld).Name _
                 , rst.Fields(iFld).Type _
                 , rst.Fields(iFld).DefinedSize
вылавливать тип данных, и указывать дополнительные параметры (точность, размерность), но не помогло. помогает только интежер, но мне надо числа после запятой. Исходная таблица хранится на MS SQL-сервере 2000. И тип поля в создаваемом рекорсете соответствует этом полю в таблице.
Может кто сталкивался?
Заранее спасибо.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как редактировать несуществующее поле? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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