|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
Всем привет. Подскажите плиз кто знает, как редактировать созданный RecordSet на основе пары таблиц. Если делать всё в одном запросе, то выполняется он почему-то минут 5, поэтому приходится извращаться... MDB Код: 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.
Валится на строчке Код: vbnet 1.
пишет ошибку : run-time error 3027 Обновление невозможно. База данных или объект доступны только для чтения. пробовал в параметрах открытия рекордсета ставить adOpenDynamic и другие - не помогает. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2019, 21:55 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
Вобщем идея такая : на ленточной форме разместить нужные поля, источник записей не указывать, и собирать в неё нужные данные за несколько итераций. Сначала выбрать только коды и айдишники. Потом последовательным перебором рекордсета, добавлять уже всё остальное в оставшиеся поля. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2019, 22:09 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
melihronВалится на строчке Код: vbnet 1.
наверное запрос не обновляемый. melihronВобщем идея такая : идея не очень... если уже есть бд, то лучше её использовать по максимуму... добавь галочки в таблицы, ходи по ним хоть вдоль, хоть поперек, помечай нужное галочками, а потом показывай помеченное, ну или делай буферную таблицу: очищай - заполняй - показывай... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2019, 22:23 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
melihronВобщем идея такая : на ленточной форме разместить нужные поля, источник записей не указывать, и собирать в неё нужные данные за несколько итераций. Сначала выбрать только коды и айдишники. Потом последовательным перебором рекордсета, добавлять уже всё остальное в оставшиеся поля. У вас в случае успешного выполнения вашего приведенного кода даже необязательно потом что то добавлять посредством перебора рекордсета. Если выражение: Код: vbnet 1. 2. 3.
выполнилось успешно, весь набор записей сам отрисуется на вашей ленточной форме, с нужным количеством строк и автоматически будет доступен для редактированию, как на обычной форме (то есть можно будет добавлять, редактировать,удалять записи, как в обычной форме, то есть руками к примеру.) Да и программно тоже update,insert,delete доступен. Только учтите ,что при RIGHT JOIN обновление по логике вещей не для всех записей доступно в связанных таблицах, а только для тех, в которых есть связанные значения, то есть для строки в одной таблице, есть заполненное связанное поле из другой. У вас в запросе самом скорей всего при склейке пробел пропал, или поле неправильно обозвали итд итп (то есть ошибка на внимательность скорей всего.) Вот по быстрому наклепал для вас пример. Посмотрите во вложении. В формате DAO recordset. Канонический вариант. Можете нажать на кнопку и пробовать изменить значения записей (либо руками, либо дописать rs.edit...rs.update..все должно работать) PS. А то у вас код одна часть в семантике DAO (DBEngine(0)(0).OpenRecordset(q) ) , во второй части вы тут же начинаете мучить ADO (CurrentProject.Connection.Execute(q)) Лучше писать либо в DAO,либо в ADO, в чем то одном) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2019, 22:45 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
А так , как выше уже vmag написал, идея с отвязанным рекордсетом плоха , но судя по всему у ТС еще начало пути, он потом еще восхитится качеству работы unbound recordset в разрезе сортировки и фильтрации)) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2019, 22:49 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
Нет, я совсем не новичок, просто шеф такие задания иногда даёт, из серии пришить хобот к заднице и чтоб в серую полосочку и трактор ещё туда чтобы сбоку был тоже прилеплен... и чтобы быстро всё, а почему так долго, он думает, что за блин 5 минут это всё делается .... что хочется на этот раз потянуть время и поискать ещё варианты кроме добавочных полей и временных таблиц, которых и так уже полно базе...) сорри за оффтоп... to Сергей Лалов: спасибо за пример То есть сам рекордсет нельзя использовать как буферную/временную редактируемую таблицу без привязки к реальным таблицам ? эх, а я так надеялся... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2019, 23:31 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
О том что идея с отвязанным рекордсетом плоха уже говорилось. Еще "мелочь": У Вас: Код: vbnet 1.
должно быть: Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2019, 23:45 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
melihronto Сергей Лалов: спасибо за пример То есть сам рекордсет нельзя использовать как буферную/временную редактируемую таблицу без привязки к реальным таблицам ? эх, а я так надеялся... да можно ,почему, только в вашем примере попытка скрестить два рекордсета написана неверно. С позиции кода, и с позиции самого способа решения задачи. Зачем скрещивать результат двух рекордсетов, в коде VBA делать изменение значения полей, а потом выводить это изменение на форму? Вам шеф сказал пришить всего один хобот к штанам, а вы решили еще один, с другой стороны, для симметрии) Тут и без временной таблицы и без VBA можно сделать за минуту обычный аксесовский запрос, со связями из нужных таблиц и сохранить его под определенным именем. А потом открывать его когда надо, и смотреть результат, и менять где нужно. Задача со стороны шефа, но реализация то за вами)) Гораздо комфортней согласитесь, когда зубы сверлят через рот с анестезией, а не пытаются пролезть к челюсти через задницу, пусть даже с той же анестезией) Пример по сути то вам в общем приложил, там все есть. Вместо двух рекордсетов сделайте один (только в строке SQL напишите нужный вам запрос из нескольких таблиц, используя Inner,Right,Left join по вкусу, вкусу вашей бизнес логики.) И обновляйтесь/изменяйтесь на здоровье один объект recordset. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2019, 23:57 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
melihronНет, я совсем не новичок.... тогда поясните как должна выполняться эта строка(какому полю присваивается и какое значение) Код: vbnet 1.
и эта довольно интересна Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2019, 00:06 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
sdkumelihronНет, я совсем не новичок.... тогда поясните как должна выполняться эта строка(какому полю присваивается и какое значение) Код: vbnet 1.
и эта довольно интересна Код: vbnet 1.
ну тут кагбе полёт творческой мысли и фантазии и ещё не обрёл нужную и понятную форму : ) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2019, 00:11 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
sdkuтогда поясните как должна выполняться эта строка(какому полю присваивается и какое значение) это поля на форме... предполагалось туда данные запхать...пример конечно недоделанный ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2019, 00:15 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
[quot Сергей Лалов]melihronto Сергей Лалов: спасибо за пример Вместо двух рекордсетов сделайте один (только в строке SQL напишите нужный вам запрос из нескольких таблиц, используя Inner,Right,Left join по вкусу, вкусу вашей бизнес логики.) И обновляйтесь/изменяйтесь на здоровье один объект recordset. как я писал в самом начале, нужный запрос пачемута выполняется ооччень долго... ну минут 5 может.. а должен пулей вот этот запрос выполняется быстро: Код: sql 1. 2. 3. 4. 5.
а вот этот уже минут 5, хз почему, индексы проставил на числовых полях... Код: sql 1. 2. 3. 4. 5.
незнаю... можт я чёта туплю... собственно из-за этого я и начал за несколько итераций его собрать... На SQL-сервере, с прилинкованными mdb такой запрос выполняется пулей. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2019, 00:27 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
melihron, запрос выполняется долго из-за подчинённых запросов. Из-за них он не является обновляемым. Форма не получится на отвязанном запросе дао, потому-что таких нет. Это прерогатива адо. Да и закрываются оба набора в конце процедуры. sdkuдолжно быть: нет, у ТС правильно написано. melihronТо есть сам рекордсет нельзя использовать как буферную/временную редактируемую таблицу без привязки к реальным таблицам ?чёйта? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2019, 07:23 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
Панургsdkuдолжно быть: нет, у ТС правильно написано. Пардоньте,был не прав-не знаю почему это ляпнул ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2019, 13:18 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
sdku, да фигня, сам иногда такую х..ню несёшь, особенно злоупотребив... как щас... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2019, 19:31 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
эт про мну... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2019, 19:39 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
Панург, не только про тебя-про меня тоже ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2019, 00:44 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
melihronа вот этот уже минут 5, хз почему, индексы проставил на числовых полях... Запросы кривовато написаны - трудно понять что хотите получить. Не это ли, случаем: Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 12:39 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
AndrFmelihronа вот этот уже минут 5, хз почему, индексы проставил на числовых полях... Запросы кривовато написаны - трудно понять что хотите получить. Не это ли, случаем: Код: sql 1. 2. 3. 4. 5.
Мой токсичный друг. В моём запросе всё предельно понятно, что я хочу получить - он довольно простой, но вы его не поняли, и поэтому решили меня немножко погнобить - это не красиво. Учите матчасть, коллега, поля ord.opc_id нету в таблице, а opc_id добывается из подзапроса. И не надо быть токсичным. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 13:33 |
|
Как редактировать созданный RecordSet.
|
|||
---|---|---|---|
#18+
"Предельно понятно" только Вам. Я,например, не понял : получили Вы в RS набор записей с полями перечисленными в SELECT из таблицы "заказы" + еще одно поле [opc_id](кстати,если в тбл.[order_price_change]больше одной записи отвечающей условиям отбора в подчиненном запросе и подчиненный возвращает больше 1 записи главный работать не будет) Допустим все заработало и Вы получили набор записей в котором каждому коду таблицы "заказы" соответствует ряд записей таблицы [order_price_change] и чё?.. При нормальной организации данных ([order_price_change] подч [заказы])это и так известно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 15:48 |
|
|
start [/forum/topic.php?fid=45&gotonew=1&tid=1610440]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
14ms |
get first new msg: |
10ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
3ms |
others: | 262ms |
total: | 426ms |
0 / 0 |