powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сохранение данных
5 сообщений из 5, страница 1 из 1
Сохранение данных
    #39103760
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте всем,

Есть форма для заведения что-то вроде товарного счета. Данные о заказчике в форме заполняются через текстбоксы в таблицу, детали счета (номенклатура, кол-во и прочее) - в гриде в курсор и уже потом в таблицу.

Довольно часто вылазит такая беда - пропадает одна из строк деталей счета. Особенно часто, если строк много, если строк 2-3, то как правило, все работает корректно. Но если больше - почти всегда одна из строк пропадает. По какому признаку вылетает - не определил, на первый взгляд - случайная строка.

Буфферизация курсора - 3, таблиц - 5.
сброс - Tableupdate(.t.,.t.,'tablename'), если Tableupdate(1,'tablename') - то для курсора впоследствии при выполнении Requery('localname') выдает ошибку 1545 "Table buffer for alias "name" contains uncommitted changes".



Подскажите, плиз, в какую сторону искать и куда думать?
...
Рейтинг: 0 / 0
Сохранение данных
    #39103796
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitryKn... Подскажите, плиз, в какую сторону искать и куда думать?
Самое сложное и радикальное решение - использовать MS SQL Server в качестве источника данных - можно бесплатную версию и смотреть в сторону "transactions"...

Если же у Вас неустойчивое соединение, я бы "вносил" счёт во временные таблицы на local disk по команде "сохранить" начал бы обновлять строка за строкой в удалённой таблице - первый проход без буферизации, потом flush, потом проверить что ВСЕ записи записались. Если всё OK - записать отдельную строку "данные о заказчике". И в конце снва всё проверить - если чего-то не хватает - попытать всё начать снова. И так несколько раз... Возможны варианты...

Главная проблема FoxPro - он не может гарантировать сохранности данных.
...
Рейтинг: 0 / 0
Сохранение данных
    #39103875
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey ChDmitryKn... Подскажите, плиз, в какую сторону искать и куда думать?
Самое сложное и радикальное решение - использовать MS SQL Server в качестве источника данных - можно бесплатную версию и смотреть в сторону "transactions"...

Если же у Вас неустойчивое соединение, я бы "вносил" счёт во временные таблицы на local disk по команде "сохранить" начал бы обновлять строка за строкой в удалённой таблице - первый проход без буферизации, потом flush, потом проверить что ВСЕ записи записались. Если всё OK - записать отдельную строку "данные о заказчике". И в конце снва всё проверить - если чего-то не хватает - попытать всё начать снова. И так несколько раз... Возможны варианты...

Главная проблема FoxPro - он не может гарантировать сохранности данных.

У меня локальная сетка, приложение в терминале, так что все проще и соединение очень устойчивое. Обычное сохранение в самом его простом случае, я просто по неопытности накосячил что-то, а где искать - не понимаю, ведь большая часть строк сохраняется.
...
Рейтинг: 0 / 0
Сохранение данных
    #39106696
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
if tableUpdate(...) = .F.
   * Анализ причины неудачи сброса буфера
endif



2. Если Вы используете для редактирования Local View (или CursorAdapter), то убедитесь, что таблицы-источники на момент редактирования не переведены в режим буферизации. Если же они также буфферизированы, то после сброса буфера в Local View надо еще выполнить сброс буфера в таблицах-источниках
...
Рейтинг: 0 / 0
Сохранение данных
    #39107107
DmitryKn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ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.
if tableUpdate(...) = .F.
   * Анализ причины неудачи сброса буфера
endif



2. Если Вы используете для редактирования Local View (или CursorAdapter), то убедитесь, что таблицы-источники на момент редактирования не переведены в режим буферизации. Если же они также буфферизированы, то после сброса буфера в Local View надо еще выполнить сброс буфера в таблицах-источниках


ВоадимирМ, таблицы буфферизованы, сброс буферов выполняется.

Пока что прихожу к мысли, что возможны ошибки при заполнении грида, в котором источник Local View. Там встроены комбобоксы, и выбор значений производится из связанных таблиц, например, если в колонке 1 выбрано одно значение, то в колонке 2 может быть выбрано только из строго определенных значений, третья определяется двумя первыми и т.д. При этом в колонке фокус передается между комбо и текстбоксом.

Возникает ощущение, что потеря строки возникает из-за потери одного из значений при вводе в гриде. Поэтому с помощью scan построил построчную проверку полей сразу после сброса буфера loical view, если нахожу ошибку - tablerevert, определяю строку и поле, месседж пользователю, фокус в начало нужной строки.

Ну, пока вдруг все стало стабильно работать, даже не могу проверить, верно ли я догадался.

Жду отказа, там может прояснится.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сохранение данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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