主页
Top.Mail.Ru Yandeks.Metrika
论坛:“基地”;
当前存档:2002.04.25;
下载:[xml.tar.bz2];

向下

ADO问题 找到类似的分支


Sam   (2002-04-03 16:31) [0]

亲爱的大家好。 存在这样一个问题:有必要通过带有CursorLocation = clUseServer属性的Microsoft Jet OLEDB 4.0对连接到* .mdb文件的TADOTable进行排序。 设置IndexName属性不会影响记录的顺序。



sniknik   (2002-04-03 16:34) [1]

ADODataSet具有Sort属性。 (不仅是他)。 不建议使用ADOTable(有点陈旧),为什么对我来说还是个谜。



roottim   (2002-04-03 16:42) [2]

>CursorLocation=clUseServer
нет тут сервера и НД формируется только на клиенте... с эти свящзаны и все другие пораждаемые этой оацией баги!..
измени!, и думаю все вылечится



Delirium   (2002-04-03 16:44) [3]

使用SQL和TADOQuery,因为我认为TADOTable是一个创建的组件,以促进从BDE(TTable)到ADO的过渡。



sniknik   (2002-04-03 16:52) [4]

для информации у ADOTable тоже есть свойство Sort .....



Delirium   (2002-04-03 17:01) [5]

ADO shny Sort最终是COM对象“ ADODB.RecordSet”的方法,该方法与OLE DB提供程序结合使用,并对已接收的本地(CursorLocation = clUseClient)选择(_RecordSet)进行排序。 因此,使用排序不是排序依据。 因此,如果CursorLocation = clUseServer,则Sort不符合定义:)



sniknik   (2002-04-03 18:03) [6]

само собой не одно и тоже. но если ему нужен видимый результат то почему нет. очень удобно и довольно быстро 6000 записей не успеваю заметить как по другому столбцу пересортируется.
на ADOConnection CursorLocation=clUseServer на ADODataSet CursorLocation=clUseClient стоит.



Sam   (2002-04-03 19:34) [7]

Дело в том, что метод Sort для ADOTable с CursorLocation = clUseServer not supported provider, а мне необходим именно ADOTable для редактирования полей прямо из DBGrid"а и именно clUseServer, т.к.
1. clUseClient не работает с полями типа "Счетчик"
2. ADOTable работает с таблицей, изменения в которой должны быть видны сразу же для другого ADOTable, ссылающегося на эту же таблицу (объеденить обоих тэйблов в один нельзя)



sniknik   (2002-04-03 20:20) [8]

вот что в голову пришло. может у тебя изза clUseServer не сразу изменения видны после изменения IndexName (у ADODataSet принудительное обновление - Requery кстати у ADOTable тоже есть. 8-) можно еще Refresh попробовать.
но если это изза этого то и для другой таблици надо будет делать чтобы она эти изменения тоже схватила.

и еще я видел в Delphi пример связывающий два ADODataSet-а
и вроде бы там все менялось одновременно.
(Delphi шестой)



Sam   (2002-04-03 21:32) [9]

Фишка в том, что Refresh и Requery перечитывает записи с сервера и если CursorLocation=clUseClient, то пока ты не закроешь набор данных он не обновится на сервере (я пока еще не нашел как это сделать иным способом). При clUseServer обновление происходит сразу в двух наборах, ссылающихся на одну таблицу, но один из них надо отсортировать, что я ну никак не могу сделать.
IndexName я задаю до открытия набора данных, а открывая набор обнаруживаю, что он совсем не отсортирован.



sniknik   (2002-04-04 10:35) [10]

ясно. попытался воспроизвести ситуацию (поставил Table вместо DataSet) и выставил clUseServer. открыл таблицу в mdb и попытался изменить индекс (в десигн тайме), первый поставился но изменений не произошло как ты и говорил при изменении на второй (на открытой таблице) выдало следующее

Current provider does not support the necessary interface for Index functionality.



sniknik   (2002-04-04 10:47) [11]

请参阅delphian目录demos \ ado \ shape中的ShapeDemo示例。 从mdb连接了两个数据集,也许这将适合您。 (如果在本示例的第五部分中,没有我可以发送的信息,则无法保证操作性:-)



wicked   (2002-04-04 12:20) [12]

2 Sam ©

> Фишка в том, что Refresh и Requery перечитывает записи с
> сервера и если CursorLocation=clUseClient, то пока ты не
> закроешь набор данных он не обновится на сервере

никогда в жизни... это забота ADO - синхронизировать записи в локальном курсоре и на сервере...



Sam   (2002-04-04 12:33) [13]

我今天将交付Delphi 6。 现在是时候看一下Borland的奇迹了。同时,我将介绍基于ADO的示例,但是在我看来,从逻辑上来说,不可能使用clUseServer从Delphi中对集合进行排序。



sniknik   (2002-04-04 13:23) [14]

确保安装此更新,使文件D6_upd1_ent.exe 28mg(我不记得我在哪里下载了它)。 用ADO消除许多痔疮(德尔福改变它们仍然是:-)。



aus   (2002-04-04 15:10) [15]

2 Sam
Так и не понял, почему тебе не заменить Table на Query.
CursorLocation = clUseServer, CursorType = ctKeySet, отсортируй с помощью SQL, все изменения видны сразу после перехода на другую запись.



kig   (2002-04-04 15:52) [16]

2Sam © (03.04.02 21:32)

Фишка в том, что Refresh и Requery перечитывает записи с сервера и если CursorLocation=clUseClient, то пока ты не закроешь набор данных он не обновится на сервере (я пока еще не нашел как это сделать иным способом). При clUseServer обновление происходит сразу в двух наборах, ссылающихся на одну таблицу, но один из них надо отсортировать, что я ну никак не могу сделать...

Как Вам ранее заметил Delirium © (03.04.02 17:01) - сортировка адошного набора данных возможна только при при клинтском курсоре (как в прочем, и фильтрация) (MSDN):

备注
This property requires the CursorLocation property to be set to adUseClient. A temporary index will be created for each field specified in the Sort property if an index does not already exist.


Если Вы будете работать с серверным курсором, то Вы не сможете получить ту функциональность, которая Вам нужна, без переоткрытия соритируемого нд с необходимым условием Order By в select.

Если Вы будете работать с клиентским курсором, то в этом случае:

1. (Sam © (03.04.02 21:32) Фишка в том, что Refresh и Requery перечитывает записи с сервера и если CursorLocation=clUseClient, то пока ты не закроешь набор данных он не обновится на сервере (я пока еще не нашел как это сделать иным способом).) - у адошного рекодсета есть метод UpdateBatch - он отправляет изменения в провайдер OLE DB...

2. Посмотрите в MSDN метод Resync - возможно он поможет Вам с полями-счетчиками при клиентском рекодсете.

3. Если у Вас уже есть один клиентский адо-рекодсет, а Вы хотите получить такой-же, но с возможностью другой сортировки и/или фильтации - используйте клонирование (MSDN):

Clone Method
Creates a duplicate Recordset object from an existing Recordset object. Optionally, specifies that the clone be read-only.

句法
Set rstDuplicate = rstOriginal.Clone (LockType)
回报值
Returns a Recordset object reference.

参数
rstDuplicate
An object variable that identifies the duplicate Recordset object to be created.
rstOriginal
An object variable that identifies the Recordset object to be duplicated.
锁定类型
Optional. A LockTypeEnum value that specifies either the lock type of the original Recordset, or a read-only Recordset. Valid values are adLockUnspecified or adLockReadOnly.
备注
Use the Clone method to create multiple, duplicate Recordset objects, particularly if you want to maintain more than one current record in a given set of records. Using the Clone method is more efficient than creating and opening a new Recordset object with the same definition as the original.

The Filter property of the original Recordset, if any, will not be applied to the clone. Set the Filter property of the new Recordset in order to filter the results. The simplest way to copy any existing Filter value is to assign it directly, like this: rsNew.Filter = rsOriginal.Filter

The current record of a newly created clone is set to the first record.

Changes you make to one Recordset object are visible in all of its clones regardless of cursor type. However, after you execute Requery on the original Recordset, the clones will no longer be synchronized to the original.

Closing the original Recordset does not close its copies, nor does closing a copy close the original or any of the other copies.


Советую Вам посмотреть в MSDN описание ADODB - будет проще понять, что там делает дельфийская обертка вокруг этих объектов.



Sam   (2002-04-04 16:14) [17]

Спасибо всем за дискуссию. Поговорил сегодня с заказчиком и кое-что поменяю в логике работы программы, вообщем проблема исчезла на данном этапе. Но вообще то обязательно загляну в MSDN и поэкспериментирую, когда бут побольше свободного времени.



Страницы: 1 整个分支

论坛:“基地”;
当前存档:2002.04.25;
下载:[xml.tar.bz2];

楼上





内存:0.61 MB
时间:0.039 c
4-81110
SerVS - S.
2002-02-18 20:01
2002.04.25
Plz告诉我如何剪切Ctrl + Alt + Del


1-80898
Candyras
2002-04-15 00:15
2002.04.25
这是一个问题......


4-81107
恶魔[DZ]
2002-02-20 15:00
2002.04.25
组件包


7-81101
“利维坦”
2001-12-06 21:13
2002.04.25
保持领先


3-80834
trever
2002-04-05 13:11
2002.04.25
如何更新dblucapcombox的内容?





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法语
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日本 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 淡米尔文 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский