|
|
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
Добрый день. Столкнулся тут с одной темой, просто раньше по другому строил свои приложения, а тут решил сделать иначе Вообщем организовал простой query выполнения хранимой процедуры, которая вытаскивает данные из нескольких таблиц (одна основная и к ней несколько джойнов подчиненных) этот запрос отображаю в гриде со всеми возможностями редактирования, так вот если я к примеру добавляю новую запись с определением связующих ключей, а затем выполняется Post, то запись добавляется в основную таблицу (что нормально), но также и добавляется запись и во все подчиненные таблицы (с одной стороны вроде логично, но по замыслу - неправильно) можно ли этого как-то избежать? Видимо вопрос банальный, просто с этим не сталкивался ранее. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 11:14:41 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
patrick1968если я к примеру добавляю новую запись с определением связующих ключей, а затем выполняется Post, то запись добавляется в основную таблицу (что нормально), но также и добавляется запись и во все подчиненные таблицы (с одной стороны вроде логично, но по замыслу - неправильно) можно ли этого как-то избежать? Конечно, можно. Код покажи. И текст запроса (свойства) InsertSQL, если он есть. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 11:17:51 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
Да запрос элементарный SELECT dc.ID, dc.CLSID, dc.ISID, i.ISName FROM dbo.DataConsumer dc join dbo.InfoSystems i on (i.ISID = dc.ISID) WHERE dc.CLSID = @pCLSID ORDER BY dc.ISID а InsertSQL там нет, это ADOQuery ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 11:35:28 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
patrick1968> a InsertSQL нет, это ADOQuery А, до сих пор кто-то использует ADO...Читать MSDN: http://msdn.microsoft.com/en-us/library/office/jj250169.aspx И не задавать значения для связанных полей. Но лучше, конечно, по-человечески редактировать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 12:06:25 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
Сделать поля в датасете InternalCalc, чтобы они не передавались в запрос при сохранении? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 12:09:12 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
patrick1968Да запрос элементарный SELECT dc.ID, dc.CLSID, dc.ISID, i.ISName FROM dbo.DataConsumer dc join dbo.InfoSystems i on (i.ISID = dc.ISID) с точки зрения SQL этот запрос не является "редактируемым", даже если бы обращения в нем были к таблицам, а не к процедурам или процедуре. (собственно, любой запрос, превращающий физические записи в "виртуальные", не может быть отредактирован. Даже group by по одной таблице). В SQL модифицировать одним оператором можно только один объект - insert,delete и update всегда относятся только к одной таблице. Если же вам компоненты доступа каким-то образом превращают запрос в "редактируемый", это значит, что они (компоненты) сами конструируют запросы insert/update/delete, по отдельности для каждой таблицы. Следовательно, если вы данное поведение считаете "неправильным", значит вас не устраивает то, что автоматически делает ADO, и вы должны самостоятельно формировать требуемые insert/update/delete только к требуемым (по вашим условиям) таблицам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 12:15:00 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
В продолжении темы, может кто подскажет, не помню уже, компонент TADOUpdateSQL вроде раньше поставлялся, а сейчас у меня RAD Studio XE 10 и что-то там его я не нахожу, просто в проекте ADO используется и на FireDAC переходить неохота, да и люди пишут, что ADO по-шустрее будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 17:49:48 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
patrick1968> компонент TADOUpdateSQL вроде раньше поставлялся, patrick1968> а сейчас у меня RAD Studio XE 10 и что-то там его я не нахожу В поставку он никогда не входил. В гугл (есть на delphikingdom и ещё много где). > на FireDAC переходить неохота, да и люди пишут, что ADO по-шустрее будет "ADO пошустрее" - это хорошая шутка, да. :) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 18:02:03 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
"ado быстрее" очень сомнительно)) UpdateSQL было только для IBX ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 10:25:15 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
krapotkinUpdateSQL было только для IBXВ зеосе тоже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 11:57:48 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
krapotkin"ado быстрее" очень сомнительно)) UpdateSQL было только для IBX Для BDE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 12:01:54 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_krapotkinUpdateSQL было только для IBXВ зеосе тожеЕще в фиб-плюсах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 12:53:05 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
Перешел на FireDac, вроде неплохо, один момент о котором придется немного задуматься: при записи данных в базу, надо проверять, чтобы не было повторяющихся записей, поэтому в секциях Insert и Update у FDUpdateSQL поставил соответствующую проверку, но тут при записи дублирующей строки возникает исключение FireDac, что мол запрашивается добавление 1 строки, а в реалиях добавляется 0 строк, что якобы неправильно, может кто сталкивался, как это обойти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 13:30:31 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
patrick1968> при записи данных в базу, надо проверять, чтобы не было patrick1968> повторяющихся записей, поэтому в секциях Insert и Update patrick1968> у FDUpdateSQL поставил соответствующую проверку Что за бред ? > но тут при записи дублирующей строки возникает исключение FireDac, > что мол запрашивается добавление 1 строки, а в реалиях добавляется 0 строк, > что якобы неправильно, может кто сталкивался, как это обойти? Создай новый топик с кодом и текстом сообщения об ошибке. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 13:33:44 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
что же тут бредового, есть датасет простой 2 поля (2 кода), эти поля отображаются в гриде, пользователь может к примеру добавить 1 или несколько записей с одинаковыми кодами, что неверно, поэтому чтобы не заморачиваться с лишними проверками решил, что просто при сохранении отбрасывать неправильные записи, на форумах нашел, что можно свойство Dataset.UpdateOptions.CountUddateRecords установить в false и будет счастье, но не помогло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 13:51:49 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
patrick1968> пользователь может к примеру добавить 1 или patrick1968> несколько записей с одинаковыми кодами, что неверно Если неверно - получит сообщение об ошибке. Которую можно выдать как есть или переведя на русский "такая запись уже существует". P.S. Программировать методом тыка и "на форумах нашел" не очень эффективно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 14:27:00 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
про сообщение об ошибке всё ясно, его можно обработать и перевести если надо на любой язык, а если не надо ничего сообщать а просто эти записи игнорировать? А про программирование методом тыка, здесь ты не прав, методом тыка это когда человек сам не понимает, что пытается сделать, а это не тот случай. Только одного не ясно, если не знаешь толком, что посоветовать, зачем учить жизни ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 16:21:56 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
patrick1968> если не надо ничего сообщать а просто эти записи игнорировать? Если не надо сообщать о том, что пользователь сделал ошибочное с т.з. бизнес-логики действие - то надо ошибку не выдавать, т.е. перехватить и подавить. Хотя само подобное желание обычно неправильно. > зачем учить жизни А, буйный... ОК, молчу, мучайся сам. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 16:40:27 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
я не буйный, всё излагаю достаточно вежливо и корректно, просто мне твоя реакция не понятна, я же спрашиваю у людей реально ли сделать определенное действие, а то как можно сделать слегка иначе, я знаю. А подавлять неправильные действия юзеров, я считаю, иногда правильно, а забрасывать их многочисленными сообщениями не всегда требуется, особенно если данное бизнес правило не слишком критичное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 16:51:03 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
patrick1968подавлять неправильные действия юзеровpatrick1968забрасывать их многочисленными сообщениями ИмхоНекузявая вилка. Спроектировать так, чтобы сократить количество таких моментов - перспективнее в плане поддержки: контроль ситуации остается у программиста, у юзеров меньше поводов для "странных" хотелок... Разве, что, если за строки платят... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 17:10:52 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
patrick1968, желающие помочь тебе люди всего лишь просили привести оригинальный текст ошибки. Ты же начал спорить. Думаешь таким образом увеличить кол-во желающих тебе помочь? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 18:15:30 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
Очевидно, мы с людьми желающими помочь, неправильно друг друга поняли, я предположил, что мне советовали обработать исключение должным образом и выдать его пользователю, про оригинал сообщения я ничего не видел, а что касается его, вот он exact update affected 0 rows while 1 was requested ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 09:58:39 |
|
||
|
Работа метода POST
|
|||
|---|---|---|---|
|
#18+
patrick1968А подавлять неправильные действия юзеров, я считаю, иногда правильно, а забрасывать их многочисленными сообщениями не всегда требуется,Если мы говорим о том как удобнее пользователю, то пользователю удобнее дизейбл кнопки ОК с баллоном почему дизейблим. Т.е. не глотатать ошибки, а запрещать их делать. Иначе пользователь будет сильно удивляться, почему он все делает, а эффекта нет никакого P.S. При многопользовательской работе заранее проверить все не удастся, но тут можно и об ошибке сказать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 16:15:06 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=135&tid=2041935]: |
0ms |
get settings: |
5ms |
get forum list: |
25ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
466ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 788ms |

| 0 / 0 |
