Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];

Вниз

Как сделать Refresh для одной записи?   Найти похожие ветки 

 
Antoxa2005   (2007-10-16 16:22) [0]

Подскажите, как можно сделать Refresh, дл одной записи ч-з ADO?

Т.к. при большем объеме процедура занимает много времени...

Через FIB, вроде Refresh и обновляет одну запись, а с ADO как быть?

Т.е. есть открытый набор данных в DBGrid-е, через ADOQuery1(SELECT * FROM table1)

ADOCommand выполняет UPDATE Table1 SET fa=1 WHERE ID=ADOQuery1["ID"], а вот затем необходимо обновить ADOQuery, но не вест, а только текущую строку...

Как же это сделать???


 
Правильный_Вася   (2007-10-16 17:03) [1]

и какой смысл обновления из БД, если ты и так имеешь в датасете актуальные данные по строке?


 
Val ©   (2007-10-16 23:14) [2]

>Правильный_Вася
с чего ты взял?


 
turbouser ©   (2007-10-17 00:25) [3]


> Val ©   (16.10.07 23:14) [2]

А что не так? Данные у автора и так в контексте одной транзакции
(да, можно использовать извращенные уровни изоляции, но автор
надеюсь далек от этого, иначе ССЗБ)
Так что он имеет на клиенте всегда актуальные данные относительно этого
клиента и даже в FIB нельзя получить данные вне контекста текущей
транзакции в датасет.


 
Antoxa2005   (2007-10-17 03:31) [4]

Но ADOQuery не знает, что поле fa изменилось??? Поэтому в Grid-е видно старое значение fa, а как обновить информацию по записи, не обновляя весь набор данных???


 
turbouser ©   (2007-10-17 03:48) [5]


> <Цитата>
>
> Antoxa2005   (17.10.07 03:31) [4]
>
> Но ADOQuery не знает, что поле fa изменилось???

Почему не знает? Кто изменял? Дядя с херсона??


 
ЮЮ ©   (2007-10-17 04:02) [6]

> Т.е. есть открытый набор данных в DBGrid-е, через ADOQuery1(SELECT
> * FROM table1)
>
> ADOCommand выполняет UPDATE Table1 SET fa=1 WHERE ID=ADOQuery1["ID"],
>


> Но ADOQuery не знает, что поле fa изменилось


Изменять следует именно в TADOQuery, которое и пошлет само на сервер запрос типа
UPDATE Table1 SET fa=1, .... WHERE ID=:OLD_ID


 
Antoxa2005   (2007-10-17 04:16) [7]

ЮЮ, а можно поподробнее? Ведь чтобы выполнить в TADOQuery коммнду UPDATE Table1 SET fa=1, .... WHERE ID=:OLD_ID, сначало надо ADOQuery.Close, затем поменять комаду SELECT... на UPDATE..., а затем, чтобы увидеть набор данных, опять close, SELECT... и open, т.е. опять же перезагрузка всех записей???


 
ЮЮ ©   (2007-10-17 09:10) [8]

ADOQuery.Edit;
ADOQuery.FieldByName["fa"].asInteger := 1;
ADOQuery.Post;

Это и без твоего вмешательства породит отправку на сервер команды UPDATE ... со значениями, соответствующеми измененной строки ADOQuery.


 
ЮЮ ©   (2007-10-17 09:13) [9]

Если же редактировать в DB Aware-компоненте (например в TDBGride), то и восве не нужно ни одной стрчки кода для внесения изменеиий в БД - просто пользователь меняет в гриде.


 
Маша Шрайбер ©   (2007-10-17 10:11) [10]

см. F1 про метод Requery у TADOQuery.


 
ЮЮ ©   (2007-10-17 10:23) [11]

>
>
> [10] Маша Шрайбер ©   (17.10.07 10:11)
> см. F1 про метод Requery у TADOQuery.


Сколько не смотри, он переоткрывает ВЕСЬ набор данных, чего, собственно, автор хочет избежать.

Requery updates the dataset by re-executing the original command or SQL statement that produced the recordset.
The effects of Requery are the same as calling the dataset’s Close method and then its Open method.


 
Маша Шрайбер ©   (2007-10-17 10:42) [12]

>> ЮЮ ©   (17.10.07 10:23) [11]

Либо Requery по-разному реализовано у TADOQuery и TADODataSet
либо вы не там смотрели


 
ЮЮ ©   (2007-10-17 10:46) [13]

>
>
> [12] Маша Шрайбер ©   (17.10.07 10:42)
> >> ЮЮ ©   (17.10.07 10:23) [11]
>
> Либо Requery по-разному реализовано у TADOQuery и TADODataSet


По хелпу он един, ибо ревлизован у предка:

Requery method (TCustomADODataSet)


> либо вы не там смотрели

А что можно высмотреть, если смотреть по Вашему?


 
Маша Шрайбер ©   (2007-10-17 10:53) [14]

>> ЮЮ ©   (17.10.07 10:46) [13]
>> А что можно высмотреть, если смотреть по Вашему?

Очень замечательные особенности.
Своими словами не буду - позже процитирую. Сейчас Дельфи снесли злые сотрудники :)


 
Antoxa2005   (2007-10-17 12:20) [15]

Начина с Delphi 7, у метода Requery, появились параметры, но нигде не могу про них почитать???


 
Antoxa2005   (2007-10-17 14:59) [16]

Ну, что, никак не сделать???


 
Маша Шрайбер ©   (2007-10-17 15:40) [17]

Экий вы нетерпеливый. Справку по Requery почитали? сюда можете кинуть?


 
Antoxa2005   (2007-10-17 15:56) [18]

Я не могу ее найти в D7... Помогите..?


 
Маша Шрайбер ©   (2007-10-17 16:09) [19]

Помогу. Но вечером. Или завтра.


 
Antoxa2005   (2007-10-17 16:23) [20]

Спасибо Машенька...


 
Маша Шрайбер ©   (2007-10-17 19:58) [21]

>> Antoxa2005

Так вот, господин ЮЮ © в своем посте [11] не все договорил. Почему - не знаю :)
Текст из F1 про Requery целиком :

Refreshes the recordset.

Delphi syntax:

procedure Requery(Options: TExecuteOptions = []);

C++ syntax:

void __fastcall Requery(TExecuteOptions Options = TExecuteOptions());

Description

Call Requery to refresh the recordset. Requery updates the dataset by re-executing the original command or SQL statement that produced the recordset.

The effects of Requery are the same as calling the dataset’s Close method and then its Open method. However, there are circumstances when one means of refreshing the recordset is better than the other. The values in properties like CursorLocation, CursorType, and LockType cannot be changed while the dataset is open, so Requery can only refresh the recordset using the existing values in these properties. To refresh the recordset using different values for these properties, effect the refresh using the Close and Open methods.

Options is a TExecuteOptions value that specifies the characteristics of the command execution affected by the requery that produces the recordset for the dataset.


 
ЮЮ ©   (2007-10-18 03:47) [22]

> Так вот, господин ЮЮ © в своем посте [11] не все договорил.
> Почему - не знаю :)


И чего такого я там не договорил?.
Что между Close и Open ещё можно можно изменить CursorLocation, CursorType, and LockTypе, т.е. повторно открыть с другими характеристиками, в то время как Requery обновляется с теми же значениями этих параметров.  


> Начина с Delphi 7, у метода Requery, появились параметры,
> но нигде не могу про них почитать???


TExecuteOptions values specify the characteristics of an execution operation.

Unit

ADOdb

Delphi syntax:

type
 TExecuteOption = (eoAsyncExecute, eoAsyncFetch, eoAsyncFetchNonBlocking, eoExecuteNoRecords);
 TExecuteOptions = set of TExecuteOption;

C++ syntax:

enum TExecuteOption { eoAsyncExecute, eoAsyncFetch, eoAsyncFetchNonBlocking, eoExecuteNoRecords };
typedef Set<TExecuteOption, eoAsyncExecute, eoExecuteNoRecords>  TExecuteOptions;

Description

When executing a command or connection using a method, use TExecuteOptions values to specify the characteristics of the execution operation. When reacting to a command or connection execution in an event handler, read the execute options parameter to determine the options already established for the connection triggering the event.

TExecuteOptions consists of the constants summarized in the following table:

Execute Option Meaning

eoAsyncExecute The command is executed asynchronously.
eoAsyncFetch The command fetches remaining rows after the initial quantity specified in the Cache property asynchronously.
eoAsyncFetchNonBlocking Execution is performed without blocking the thread.
eoExecuteNoRecords A command or stored procedure that does not return. If any rows are retrieved, they are discarded and not returned.


Возможно синхронное (eoAsyncExecute) выполнение запроса и снимет видимую задержку при переоткрытии НД.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.042 c
15-1201827329
Tirael
2008-02-01 03:55
2008.03.09
вопрос по Wget


8-1175498564
Jar
2007-04-02 11:22
2008.03.09
Используемый кодек


11-1184849522
max727
2007-07-19 16:52
2008.03.09
TCP в вопросах и ответах


2-1202915231
Malik
2008-02-13 18:07
2008.03.09
Печать через ShellExecute


8-1175961679
I-new
2007-04-07 20:01
2008.03.09
Внимированный Gif. Как сделать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский