Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как восстановить курсоры? / 9 сообщений из 9, страница 1 из 1
28.02.2003, 11:28
    #32112589
Volk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как восстановить курсоры?
Привет Всем!

Инструмены:
Delphi 6+FIBPlus+Interbase

Проблема: Закрываем Датасет на записи № 10. Открываем датасет. Он на записи №1.
Как послать датасет на запись №10? Естественно средствами сервера а не локального поиска. Курсоры? Примерчик бы...
Закрытие датасета может быть вызвано разными причинами, жесткий коммит, например.
...
Рейтинг: 0 / 0
28.02.2003, 14:28
    #32112763
lgcpiton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как восстановить курсоры?
Приветик.
НУ к примеру Делфей - Locate-ом
...
Рейтинг: 0 / 0
28.02.2003, 15:37
    #32112830
Volk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как восстановить курсоры?
Блин, думал я неправ, и пропустил такую возможность найти запись. Проверил, посмотрел на SQLMonitor. Нет я прав. Дельфа начинает перебирать все записи (Fetch). пока не встретит нужную. Большая нагрузка на сеть и на сервер.
Надо средствами сервера!!!!!
...
Рейтинг: 0 / 0
28.02.2003, 16:33
    #32112883
AndreyK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как восстановить курсоры?
> Надо средствами сервера
Тоесть сервер должен на клиенте установить курсор в наборе данных на какую-то запись?

Бред....
Вопервых Open...Close...Open может вернуть разные наборы данных даже в контексте одной транзакции.
Вовторых в SQL нет понятия номер записи.

А Locate это приемлимый способ (если Open...Close...Open возвращает одинаковый набор данных)
...
Рейтинг: 0 / 0
28.02.2003, 17:51
    #32112951
Как восстановить курсоры?
Привет!

Не бред, а типичное заблуждение программиста, переежающего с локальных БД на клиент-серверные. Или прочитавшего пару неправильных книжек "Дельфи для автомобилистов" :)

Запоминай ID записи, а потом извлекай ее.
Если ты под IBX или FIBPlus, то используй метод Refresh для обновления именно текущей записи (например, изменил, сделал UPDATE, на сервере на UPDATE висит триггер, который что-то меняет/добавляет от себя, и тебе нужно перечитать эту запись, чтобы увидеть его изменения).

Общий совет - пересмотри взгляды на проектирование приложений :)

WBR,
Alexey
...
Рейтинг: 0 / 0
28.02.2003, 17:59
    #32112955
Volk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как восстановить курсоры?
То, что сервер установит курсор на клиенте, это конечно бред. Клиент должен сам установить курсор в ограниченном наборе данных, записей эдак из десяти. Сервер обеспечит то, что в этих 10 записях будет нужная.

Я ж эту задачу не с потолка взял, а из ФАКа

http://www.interbase-world.com/modules.php?name=FAQ&myfaq=yes&id_cat=3&categories=FIBPlus#56

искать: Слeдоватeльно, пpогpаммист сам должeн позаботиться об пepeоткpытии датасeтов и восстановлeнии тeкyщих yказатeлeй послe Commit/Rollback.
...
Рейтинг: 0 / 0
28.02.2003, 18:34
    #32112979
Volk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как восстановить курсоры?
Алексей Ковязин:
Правильно ли я понял? В процессе работы приложения я не должен ни Commit ни Rollback не делать. По моему не правильно.
А после некоторых операций надо сделать Commit. Хотя бы для того, чтобы изменения стали доступны другим пользователям. Жесткий Commit вызывает закрытие датасетов. Refresh не сделать на закрытом датасете. А если открыть датасет то Refresh не помогает. ID нужной записи я запомнил и куда его девать?

Дак как же сделать операцию подобню locate не запрашивая всю базу?
...
Рейтинг: 0 / 0
28.02.2003, 18:52
    #32112994
Volk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как восстановить курсоры?
Ак я же не знал точно как работает Refresh. Только что врубился, что он обновляет только одну запись. Погодите, не ругайтесь, попробую реализовать!!!
...
Рейтинг: 0 / 0
28.02.2003, 23:18
    #32113063
Bol
Bol
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как восстановить курсоры?
Не помню почему, но на заре юности с refresh у меня были какие-то проблемы. Может быть от незнания...
Но я реализовал так

...
var browser_chek: string;
...
...
...
procedure TF_Form.Query_NameBeforePost(DataSet: TDataSet);
begin
browser_chek:=DBEdit1.Text;//его DataSource-->DS_NAME, DataField-->N_NAME
end;
...
...
procedure TF_Form.Query_NameAfterPost(DataSet: TDataSet);
begin
with Query_Name do
begin
Active:=False;
SQL.Clear;
SQL.Add('..................................');
Active:=True;
if browser_chek<>'' then Query_Name.Locate('N_NAME',browser_chek, [loCaseInsensitive]);
end;
end;

Все с этой ерундой работает года 3, но что-то не особенно мне нравится.

Если ты под IBX или FIBPlus, то используй метод Refresh для обновления именно текущей записи (например, изменил, сделал UPDATE, на сервере на UPDATE висит триггер, который что-то меняет/добавляет от себя, и тебе нужно перечитать эту запись, чтобы увидеть его изменения).
Нельзя ли уважаемому А.Ков. отвечать более развернуто и понятно, а то получаешь не ответ, а совет. ... А если я работаю под BDE, а если зафачала проблема - как только новый релиз и использовались индивидуальные возможности релиза, то попробуй перейди на новый...
А хотелось бы пользоваться только теми средствами, которые есть в любых клонах IB
Thanks for attention.:)
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как восстановить курсоры? / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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