|
|
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
Всегда думал что команда синхронизации должна лиш возвращать набор полей по ключу но сегодня пропарился с вот такой ситуацией Есть ХП источник ленточной формы ------------------------------------------------------------------------------ ALTER PROCEDURE dbo.InC_Jurnal_p ( @Status_ID tinyint, @UserID int, @AddDate smalldatetime ) AS SET @Status_ID=ISNULL(@Status_ID,200) SET @UserID=ISNULL(@UserID,-1) SET @AddDate=ISNULL(@AddDate,0) --(SELECT TOP 1 AddDate FROM InContacts ORDER BY AddDate DESC)) SELECT dbo.InContacts.ID, dbo.Status_tbl.Name AS Status_Name, dbo.InContacts.Status_ID, dbo.InContacts.ContactName, dbo.InContacts.Company, dbo.InContacts.Street, dbo.InContacts.City, dbo.InContacts.ZIP, dbo.InContacts.Country, dbo.InContacts.Phone, dbo.InContacts.Fax, dbo.InContacts.EMail, dbo.InContacts.WebSite, dbo.InContacts.CAuth, dbo.InContacts.AddDate, dbo.InContacts.ChangeDate, dbo.InContacts.UserID, dbo.InContacts.ChangeUser, dbo.InContacts.RecallingTime, dbo.sUser.login FROM dbo.InContacts INNER JOIN dbo.SU_Current_v ON dbo.InContacts.UserID = dbo.SU_Current_v.userID OR dbo.SU_Current_v.IsSupervisor = 1 INNER JOIN dbo.Status_tbl ON dbo.InContacts.Status_ID = dbo.Status_tbl.ID INNER JOIN dbo.sUser ON dbo.InContacts.UserID = dbo.sUser.userID WHERE ( (dbo.Status_tbl.FlRecalling = 1 AND @Status_ID=200) OR (dbo.Status_tbl.FlRecalling = 0 AND @Status_ID=201) OR (dbo.InContacts.Status_ID=@Status_ID) OR @Status_ID=202) AND (@UserID=-1 OR dbo.InContacts.UserID=@UserID) AND (@AddDate=CAST(0 as smalldatetime) OR dbo.InContacts.AddDate=@AddDate) ORDER BY dbo.InContacts.ID ------------------------------------------------------------------------------ dbo.SU_Current_v используется только для ограничения кол-ва строк и не является источником для выводимых полей посчитав что для синхронизации я могу обойтись без доп условий сделал вот такую ХП ------------------------------------------------------------------------------ ALTER PROCEDURE dbo.InC_Jurnal_Resync_p1 (@ID int) SELECT dbo.InContacts.ID, dbo.Status_tbl.Name AS Status_Name, dbo.InContacts.Status_ID, dbo.InContacts.ContactName, dbo.InContacts.Company, dbo.InContacts.Street, dbo.InContacts.City, dbo.InContacts.ZIP, dbo.InContacts.Country, dbo.InContacts.Phone, dbo.InContacts.Fax, dbo.InContacts.EMail, dbo.InContacts.WebSite, dbo.InContacts.CAuth, dbo.InContacts.AddDate, dbo.InContacts.ChangeDate, dbo.InContacts.UserID, dbo.InContacts.ChangeUser, dbo.InContacts.RecallingTime, dbo.sUser.login FROM dbo.InContacts INNER JOIN dbo.Status_tbl ON dbo.InContacts.Status_ID = dbo.Status_tbl.ID INNER JOIN dbo.sUser ON dbo.InContacts.UserID = dbo.sUser.userID WHERE (dbo.InContacts.ID = @ID) ------------------------------------------------------------------------------ Но так не работает,а работает только вот так: ------------------------------------------------------------------------------ ALTER PROCEDURE dbo.InC_Jurnal_Resync_p2 (@ID int) AS SELECT dbo.InContacts.ID, dbo.Status_tbl.Name AS Status_Name, dbo.InContacts.Status_ID, dbo.InContacts.ContactName, dbo.InContacts.Company, dbo.InContacts.Street, dbo.InContacts.City, dbo.InContacts.ZIP, dbo.InContacts.Country, dbo.InContacts.Phone, dbo.InContacts.Fax, dbo.InContacts.EMail, dbo.InContacts.WebSite, dbo.InContacts.CAuth, dbo.InContacts.AddDate, dbo.InContacts.ChangeDate, dbo.InContacts.UserID, dbo.InContacts.ChangeUser, dbo.InContacts.RecallingTime, dbo.sUser.login FROM dbo.InContacts INNER JOIN dbo.SU_Current_v ON dbo.InContacts.UserID = dbo.SU_Current_v.userID OR dbo.SU_Current_v.IsSupervisor = 1 INNER JOIN dbo.Status_tbl ON dbo.InContacts.Status_ID = dbo.Status_tbl.ID INNER JOIN dbo.sUser ON dbo.InContacts.UserID = dbo.sUser.userID WHERE (dbo.InContacts.ID = @ID) ------------------------------------------------------------------------------ Т.е. требует чтобы FROM ХП источника формы был такимже как у ХП синхронизации хотя dbo.InC_Jurnal_Resync_p2 возвращает абсолютно такойже результат как и dbo.InC_Jurnal_Resync_p1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2004, 13:59:34 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
во-первых: что значит не работает? Код: plaintext 1. 2. Код: plaintext 1. 2. найди отличие ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2004, 16:11:07 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
"AS" потерял при копировании на форум :) Разница между ХП только в наличии/отсутствии dbo.SU_Current_v в FROM не работает значит- 1)строка формы не обновляется после редактирования однозначной таблицы 2)Me.Recordset.Resync adAffectCurrent вызывает ошибку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2004, 16:26:23 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
Latuk ты такие коды выкладываешь, что нахрен кому разбираться хочется. а перед вадей преклоняюсь, что он нашел отличие: это ж скока надо было времени потрятить, штоб найтить разницу. снимаю шляпу перед вадей. нет. снимаю всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2004, 16:51:10 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
слушай !!! а из конструктора картинки показать можешь ? там где таблы стрелками соединены. у меня (ежели не ошибаюсь ) ресинк вообще только по полям возвращаемым похожа была на источник и работало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2004, 17:14:51 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
Ok Исправляюсь вот упрощенная илюстрация Есть источник формы Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. используется только для ограничения кол-ва строк и не является источником для выводимых полей конкретная реализация не выжна,она должна быть на основе таблицы Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. посчитав что для синхронизации я могу обойтись без доп условий сделал вот такую ХП Код: plaintext 1. 2. 3. 4. 5. 6. проставляю ей однозначную таблицу dbo.InContacts и команду синхронизации dbo.sp_ResyncCommand_1 ? Но так не работает,а работает только вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Т.е. требует чтобы FROM ХП источника формы был такимже как у ХП синхронизации хотя dbo.sp_ResyncCommand_2 возвращает абсолютно такойже результат как и dbo.sp_ResyncCommand_1 не работает значит: 1)строка формы не обновляется после редактирования однозначной таблицы 2)Me.Recordset.Resync adAffectCurrent вызывает ошибку 2модератор невнятный пример в начале топика можно удалить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 09:37:09 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
Пример в прикрепленном файле. Form1 - не работает Form2 - работает AccessXP ADP + MSSQL2000SP3a Возможно это от того , что у меня сервис паков нет (админы не дают устанавливать, типа если у табе будут сервис паки, то у юзеров может не работать, а у юзеров мы сервис паки устанавливать не собирамся) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 10:23:53 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
А ты в профайлере взгляни, чего Access отправляет на сервер при синхронизации "по собственному Access-ному разумению" и обнаружишь причину. -------------------- Access плюет на SP, он синхронизирует строку прямо с таблицей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 10:35:20 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
в профайлере взглнул Form1-не работает Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 10:59:50 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
у меня работает в одной хрени даже - источник данных хранимка а ресинх - строка запроса 1 может прокатит если всем полям дать принудительные псевдонимы ? может быть из за того что : в одном случае идет обращение к полю как dbo.InContacts.ID (когда несколько таблиц) а в другом как просто ID - когда одна таблица 2 может from в обеих случаях закатать в подзапрос и назвать его типа Deliveredtbl ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 11:17:17 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
вечером посмотрю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 11:22:42 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
Переименовал ID не помогло Перенес тела ХП в форму в виде строки - работает так же Подзапрос не помог PS Можно конечно плюнуть,ведь второй вариант рабочий но вьюха может быть довольно тяжелой и ее бессмысленность в комманде синхронизации слегка бесит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 11:38:07 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
авторПереименовал ID не помогло я имел ввиду дать псевдонимы всем полям - можно даже исходные: dbo.InContacts.ID as ID , dbo.Status_tbl.Name AS Status_Name, dbo.InContacts.Status_ID as Status_ID , dbo.InContacts.ContactName as ContactName .... в обоих случаях - и данных и ресинхронизации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 11:48:16 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
Переделал на Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 12:41:23 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
по форме изменение в каком поле приводит к ошибке? поле Status_Name у меня меняется в обеих формах про поле Status_ID - говорит о целосности данных при замене значения на любое число вне нужного диапазоно, при замене на число из диапазона - меняет.. добавить не удалось в обоих формах. ХР Рro/XP SP3 SQL developer без SP. Jet4 SP8 ( mdb - заметное увеличени скорости!!!!) какие действия нада сделать чтоб получить твою ошибку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2004, 14:45:44 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
я тут посмотрел твои хранимки в конструкторе и чё-то не понялллл.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2004, 16:00:36 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
нафига связь к пустой таблице? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2004, 16:02:18 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
вадянафига связь к пустой таблице? для иллюстрации заявленной темы. человек показывает, что у него join еще и фильтрующие функции выполняет. И, скорее всего, в этом направлении и лежит тема "оптимизации" - перенести явно в WHERE фильтр по невыводимым в результат таблицам (пока не проверил - но должно бы "заработать") ЗЫ в пятницу попробовал выложенный Latuk проект. Успел увидеть, что поведение на 100% соответствует тому, что он описал. (MDAC 2.8, MSDE без сервис-паков) Кроме того, проверил, что простое включение в "план исполнения" "пропущенной таблицы" методом селекта из нее в локальную переменную - ничего не меняет. Нет уверенности, что к этому можно применить термин "не работает" - в действительности ресинк ключевого поля уникальной таблицы происходит. Но и нет понимания, как в точности к этому отнестись... Может завтра, для очистки совести, проверю, что на стандартном MSDataShape ситуация воспроизводится и убедюсь в том , что clientbatch-курсор здесь ни при чем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2004, 02:32:20 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
для чего это всё - для ресинка, а для ресинка достаточно и необходимо чтоб результатом была запись только из одной строки. а одна строка должна быть выбрана по опеределённым параметрам. для оптимизайии пересылаемых данных необходимо чтоб в однозначной таблице присутствовало поле даташтамп. для оптимизации фильтрования данных возвращаемой ХП можно ( и я считаю нужно) использовать не запись команды синхронизации из конструктора формы , из вба по событию после обновления поля,(или записи) или на событие ошибки формы ( при соответствующем отключении вывода об ошибке) можно записать Код: plaintext 1. 2. 3. '*- здесь можно запустить ХП которая бы произвела необходимые действия как-то вставила в нужные полянужных таблиц значения из ключевых полей соответствующих таблиц. '** - тут можно добавить еще несколько параметров, для выбора только одной записи вообще ресинк должна вернуть только поля в последовательности и количестве , как у источника данных . при этом отображаемые данные(после ресинк) МОГУТ НЕ СООТВЕТСТВОВАТЬ данным если бы произошел рефреш формы!!!!!! т.е при рефреше данная строка пропала из отображения на форме!!!! если использовать стандартный ресинк так будет. ПРОШУ УДЕЛИТЬ ВНИМАНИЕ : НА ФОРМЕ ПОСЛЕ ИЗМЕНЕНИЯ ЗАПИСЬ НЕ СООТВЕТСТВУЮЩАЯ ДЛЯ ИСТОЧНИКА ДАННЫХ ФОРМЫ!!!! поле можно изменить взад.( пристандартном подходе этого нельзя сделать- строка исчезнет с формы) (ежели без транзакций, но с транзакциями запись исчезнет) т.е можно видеть какие записи изменились.... я может не совсем понятно изложил... если потребуется Вопрос по обновлению записи + тест (АДП) здесь можно посмотреть использование, правда вопрос о другом , но с применением изложенного метода.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2004, 19:41:48 |
|
||
|
ResyncCommand не работает если ее FROM отличается от FROM источника формы
|
|||
|---|---|---|---|
|
#18+
нашлось вот что ACC2000: How to Simulate AutoLookup with a Stored Procedure in Access Client/Server Q239886 <...> general rule is that you should set the ResyncCommand property to the same SQL statement as the stored procedure being used as the record source, minus the WHERE clause being used in the stored procedure. Then add a WHERE clause to the SQL statement that parameterizes the primary key columns from the table designated in the UniqueTable property of the form. <...> Multiple-Field Primary Keys If the primary key of the "foreign" or "many side" table is made up of multiple fields, you must use the AND clause and parameterize each field within the WHERE clause of the ResyncCommand property. For example, if the foreign table contains a three-field primary key, the SQL statement for the ResyncCommand property would look similar to the following: SELECT Table1.Field1, Table1.Field2, Table1.Field3, Table2.* FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.ForeignID WHERE Table2.PrimaryKeyField1 = ? AND Table2.PrimaryKeyField2 = ? AND Table2.PrimaryKeyField3 = ? <...> более внятных текстов на эту тему пока не видел... (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2004, 01:43:39 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32790806&tid=1670217]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 308ms |

| 0 / 0 |
