|
Как восстановить курсоры?
|
|||
---|---|---|---|
#18+
Привет Всем! Инструмены: Delphi 6+FIBPlus+Interbase Проблема: Закрываем Датасет на записи № 10. Открываем датасет. Он на записи №1. Как послать датасет на запись №10? Естественно средствами сервера а не локального поиска. Курсоры? Примерчик бы... Закрытие датасета может быть вызвано разными причинами, жесткий коммит, например. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2003, 11:28 |
|
Как восстановить курсоры?
|
|||
---|---|---|---|
#18+
Приветик. НУ к примеру Делфей - Locate-ом ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2003, 14:28 |
|
Как восстановить курсоры?
|
|||
---|---|---|---|
#18+
Блин, думал я неправ, и пропустил такую возможность найти запись. Проверил, посмотрел на SQLMonitor. Нет я прав. Дельфа начинает перебирать все записи (Fetch). пока не встретит нужную. Большая нагрузка на сеть и на сервер. Надо средствами сервера!!!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2003, 15:37 |
|
Как восстановить курсоры?
|
|||
---|---|---|---|
#18+
> Надо средствами сервера Тоесть сервер должен на клиенте установить курсор в наборе данных на какую-то запись? Бред.... Вопервых Open...Close...Open может вернуть разные наборы данных даже в контексте одной транзакции. Вовторых в SQL нет понятия номер записи. А Locate это приемлимый способ (если Open...Close...Open возвращает одинаковый набор данных) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2003, 16:33 |
|
Как восстановить курсоры?
|
|||
---|---|---|---|
#18+
Привет! Не бред, а типичное заблуждение программиста, переежающего с локальных БД на клиент-серверные. Или прочитавшего пару неправильных книжек "Дельфи для автомобилистов" :) Запоминай ID записи, а потом извлекай ее. Если ты под IBX или FIBPlus, то используй метод Refresh для обновления именно текущей записи (например, изменил, сделал UPDATE, на сервере на UPDATE висит триггер, который что-то меняет/добавляет от себя, и тебе нужно перечитать эту запись, чтобы увидеть его изменения). Общий совет - пересмотри взгляды на проектирование приложений :) WBR, Alexey ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2003, 17:51 |
|
Как восстановить курсоры?
|
|||
---|---|---|---|
#18+
То, что сервер установит курсор на клиенте, это конечно бред. Клиент должен сам установить курсор в ограниченном наборе данных, записей эдак из десяти. Сервер обеспечит то, что в этих 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2003, 17:59 |
|
Как восстановить курсоры?
|
|||
---|---|---|---|
#18+
Алексей Ковязин: Правильно ли я понял? В процессе работы приложения я не должен ни Commit ни Rollback не делать. По моему не правильно. А после некоторых операций надо сделать Commit. Хотя бы для того, чтобы изменения стали доступны другим пользователям. Жесткий Commit вызывает закрытие датасетов. Refresh не сделать на закрытом датасете. А если открыть датасет то Refresh не помогает. ID нужной записи я запомнил и куда его девать? Дак как же сделать операцию подобню locate не запрашивая всю базу? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2003, 18:34 |
|
Как восстановить курсоры?
|
|||
---|---|---|---|
#18+
Ак я же не знал точно как работает Refresh. Только что врубился, что он обновляет только одну запись. Погодите, не ругайтесь, попробую реализовать!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2003, 18:52 |
|
Как восстановить курсоры?
|
|||
---|---|---|---|
#18+
Не помню почему, но на заре юности с 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.:) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2003, 23:18 |
|
|
start [/forum/topic.php?fid=40&gotonew=1&tid=1580808]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
164ms |
get topic data: |
11ms |
get first new msg: |
8ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 298ms |
total: | 572ms |
0 / 0 |