|
Сохранение данных
|
|||
---|---|---|---|
#18+
Здравствуйте всем, Есть форма для заведения что-то вроде товарного счета. Данные о заказчике в форме заполняются через текстбоксы в таблицу, детали счета (номенклатура, кол-во и прочее) - в гриде в курсор и уже потом в таблицу. Довольно часто вылазит такая беда - пропадает одна из строк деталей счета. Особенно часто, если строк много, если строк 2-3, то как правило, все работает корректно. Но если больше - почти всегда одна из строк пропадает. По какому признаку вылетает - не определил, на первый взгляд - случайная строка. Буфферизация курсора - 3, таблиц - 5. сброс - Tableupdate(.t.,.t.,'tablename'), если Tableupdate(1,'tablename') - то для курсора впоследствии при выполнении Requery('localname') выдает ошибку 1545 "Table buffer for alias "name" contains uncommitted changes". Подскажите, плиз, в какую сторону искать и куда думать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2015, 13:03 |
|
Сохранение данных
|
|||
---|---|---|---|
#18+
DmitryKn... Подскажите, плиз, в какую сторону искать и куда думать? Самое сложное и радикальное решение - использовать MS SQL Server в качестве источника данных - можно бесплатную версию и смотреть в сторону "transactions"... Если же у Вас неустойчивое соединение, я бы "вносил" счёт во временные таблицы на local disk по команде "сохранить" начал бы обновлять строка за строкой в удалённой таблице - первый проход без буферизации, потом flush, потом проверить что ВСЕ записи записались. Если всё OK - записать отдельную строку "данные о заказчике". И в конце снва всё проверить - если чего-то не хватает - попытать всё начать снова. И так несколько раз... Возможны варианты... Главная проблема FoxPro - он не может гарантировать сохранности данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2015, 14:40 |
|
Сохранение данных
|
|||
---|---|---|---|
#18+
Sergey ChDmitryKn... Подскажите, плиз, в какую сторону искать и куда думать? Самое сложное и радикальное решение - использовать MS SQL Server в качестве источника данных - можно бесплатную версию и смотреть в сторону "transactions"... Если же у Вас неустойчивое соединение, я бы "вносил" счёт во временные таблицы на local disk по команде "сохранить" начал бы обновлять строка за строкой в удалённой таблице - первый проход без буферизации, потом flush, потом проверить что ВСЕ записи записались. Если всё OK - записать отдельную строку "данные о заказчике". И в конце снва всё проверить - если чего-то не хватает - попытать всё начать снова. И так несколько раз... Возможны варианты... Главная проблема FoxPro - он не может гарантировать сохранности данных. У меня локальная сетка, приложение в терминале, так что все проще и соединение очень устойчивое. Обычное сохранение в самом его простом случае, я просто по неопытности накосячил что-то, а где искать - не понимаю, ведь большая часть строк сохраняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2015, 18:08 |
|
Сохранение данных
|
|||
---|---|---|---|
#18+
DmitryKnЗдравствуйте всем, Есть форма для заведения что-то вроде товарного счета. Данные о заказчике в форме заполняются через текстбоксы в таблицу, детали счета (номенклатура, кол-во и прочее) - в гриде в курсор и уже потом в таблицу. Довольно часто вылазит такая беда - пропадает одна из строк деталей счета. Особенно часто, если строк много, если строк 2-3, то как правило, все работает корректно. Но если больше - почти всегда одна из строк пропадает. По какому признаку вылетает - не определил, на первый взгляд - случайная строка. Буфферизация курсора - 3, таблиц - 5. сброс - Tableupdate(.t.,.t.,'tablename'), если Tableupdate(1,'tablename') - то для курсора впоследствии при выполнении Requery('localname') выдает ошибку 1545 "Table buffer for alias "name" contains uncommitted changes". Подскажите, плиз, в какую сторону искать и куда думать? 1. Всегда надо проверять успешность сохранения буфера Код: sql 1. 2. 3.
2. Если Вы используете для редактирования Local View (или CursorAdapter), то убедитесь, что таблицы-источники на момент редактирования не переведены в режим буферизации. Если же они также буфферизированы, то после сброса буфера в Local View надо еще выполнить сброс буфера в таблицах-источниках ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 14:46 |
|
Сохранение данных
|
|||
---|---|---|---|
#18+
ВладимирМDmitryKnЗдравствуйте всем, Есть форма для заведения что-то вроде товарного счета. Данные о заказчике в форме заполняются через текстбоксы в таблицу, детали счета (номенклатура, кол-во и прочее) - в гриде в курсор и уже потом в таблицу. Довольно часто вылазит такая беда - пропадает одна из строк деталей счета. Особенно часто, если строк много, если строк 2-3, то как правило, все работает корректно. Но если больше - почти всегда одна из строк пропадает. По какому признаку вылетает - не определил, на первый взгляд - случайная строка. Буфферизация курсора - 3, таблиц - 5. сброс - Tableupdate(.t.,.t.,'tablename'), если Tableupdate(1,'tablename') - то для курсора впоследствии при выполнении Requery('localname') выдает ошибку 1545 "Table buffer for alias "name" contains uncommitted changes". Подскажите, плиз, в какую сторону искать и куда думать? 1. Всегда надо проверять успешность сохранения буфера Код: sql 1. 2. 3.
2. Если Вы используете для редактирования Local View (или CursorAdapter), то убедитесь, что таблицы-источники на момент редактирования не переведены в режим буферизации. Если же они также буфферизированы, то после сброса буфера в Local View надо еще выполнить сброс буфера в таблицах-источниках ВоадимирМ, таблицы буфферизованы, сброс буферов выполняется. Пока что прихожу к мысли, что возможны ошибки при заполнении грида, в котором источник Local View. Там встроены комбобоксы, и выбор значений производится из связанных таблиц, например, если в колонке 1 выбрано одно значение, то в колонке 2 может быть выбрано только из строго определенных значений, третья определяется двумя первыми и т.д. При этом в колонке фокус передается между комбо и текстбоксом. Возникает ощущение, что потеря строки возникает из-за потери одного из значений при вводе в гриде. Поэтому с помощью scan построил построчную проверку полей сразу после сброса буфера loical view, если нахожу ошибку - tablerevert, определяю строку и поле, месседж пользователю, фокус в начало нужной строки. Ну, пока вдруг все стало стабильно работать, даже не могу проверить, верно ли я догадался. Жду отказа, там может прояснится. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2015, 18:38 |
|
|
start [/forum/topic.php?fid=41&fpage=21&tid=1582211]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 144ms |
0 / 0 |