Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Провайдер VFPOLEDB.1 и запрет возврата удаленных запис [D7, dBase, FoxPro]


Страницы:   1 2

Сергей М. ©   (2010-09-17 17:49:00) 

Строка коннекта:

Provider=VFPOLEDB.1;
Data Source=x:\yyy\zzz.dbf;
Mode=Share Deny Write;
Deleted=Yes;
и т.д.

Не работает, зараза.. Возвращает все подряд - и удаленные и не удаленные ..

Явное требование 'SET DELETED ON' в ADCommand.CommandText так же не приводит к ожидаемому результату.

Где грабли ?)


Anatoly Podgoretsky   (2010-09-21 11:28:00) [1]

> Сергей М.  (21.09.2010 09:54:25)  [25]

Ну вообще то этот запрос не выполнить, разбаланс кавычек
Проверь так

CommandText = 'SELECT Deleted(), * FROM MyDBFTable';

и даже так, для начала

CommandText = 'SELECT Deleted() FROM MyDBFTable';


sniknik   (2010-09-21 10:25:00) [2]

ну так, получается же рекурсия, смена свойства таблицы сбрасывает/переоткрывает ее, а открытие вызывает смену... ты же его в запрос "влепил", т.е. получается взаимоблокировка.

проверь, поставь другую.


Сергей М.   (2010-09-21 09:54:00) [3]

Любопытно что попытка установки в дизайн-тайм  свойства

CommandText = 'SELECT Deleted('MyDBFTable')', * FROM MyDBFTable'

тут же вешает IDE намертво)


Сергей М.   (2010-09-21 09:28:00) [4]

Тогда возникает попутный вопрос - а фигурирует ли тем или иным образом поле с флагом DELETED в ADO-рекордсет, открытый в режиме TableDirect ?

Иными словами, есть ли в этом режиме принципиальная возможность организовать пользов.фильтрацию записей по этому признаку, к примеру, обработчика OnFilterRecord ?


Anatoly Podgoretsky   (2010-09-20 16:43:00) [5]

Удалено модератором


Anatoly Podgoretsky   (2010-09-20 16:39:00) [6]

Удалено модератором


Anatoly Podgoretsky   (2010-09-20 16:38:00) [7]

Удалено модератором


Anatoly Podgoretsky   (2010-09-20 16:37:00) [8]

Удалено модератором


Anatoly Podgoretsky   (2010-09-20 16:36:00) [9]

> Polevi  (20.09.2010 15:20:13)  [13]

Вот и я про тоже. Но тут утверждают, что это не работает. Может надо ниже
спускаться, на уровень АДО, а не ADO.VCL


Anatoly Podgoretsky   (2010-09-20 16:33:00) [10]

> Сергей М.  (20.09.2010 15:14:12)  [12]

Не знаю как здесь, но в MS SQL

Insert into
execute
select from
open

Это два разных скопа
А,

Insert into
select from
open

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


Сергей М.   (2010-09-20 15:42:00) [11]

Похоже я сообразил почему лыжи не едут ..

При   CommandType = cmdUnknownили cmdTextи CommandText = SomeTablename
НД открывается в режиме прямого доступа к соотв. табличному контейнеру (что эквивалентно CommandType = cmdTableDirect)

А в этом режиме провайдеру начхать на флаг DELETED, что как раз и подтверждается значением св-ва adoDataset.Properties['Skip Deleted Bookmarks'] =False после открытия рекордсета


sniknik   (2010-09-20 15:40:00) [12]

> Хочешь сказать что коннект разрывается после
при отсутствии открытых рекордсетов у данного коннекта... т.е. да и после Execute тоже возможно.


sniknik   (2010-09-20 15:38:00) [13]

Polevi ©   (20.09.10 15:20) [13]
получится только в ODBC, там есть возврат множественных рекордсетов...

> Так ведь adoCmd не есть наследник TDataSet ?
он возвращает рекордсет, т.что можно просто его присвоить.


Сергей М.   (2010-09-20 15:33:00) [14]


> Polevi ©   (20.09.10 15:20) [13]


Так ведь adoCmd не есть наследник TDataSet ?
После открытия, предположим, мне нужно из DataSource подцепиться к открытому таким образом НД ..


Polevi   (2010-09-20 15:20:00) [15]

adoConn.ConnectionString := 'Provider=VFPOLEDB.1;Data Source=x:\yyy;Password="";Collating Sequence=MACHINE
  adoCmd.Connection := adoConn;
  adoCmd.Connection.Connected := True;
  adoCmd.CommandText := 'SET DELETED ON; SELECT * FROM Table';
  adoCmd.Execute;


Сергей М.   (2010-09-20 15:14:00) [16]


> Anatoly Podgoretsky ©   (20.09.10 15:10) [10]


Ну так ткни меня носом в то как обеспечить единый скоп ..


Сергей М.   (2010-09-20 15:12:00) [17]

p.s.

Насколько я понимаю, версия VFPOLEDB-провайдера у меня свежее некуда

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e1a87d8f-2d58-491f-a0fa-95a3289c5fd4

Cправедливости ради нужно сказать что лезу я через него в таблицу, сверстанную в FoxPro 2.5, хотя этот факт не должен никоим макаром влиять на проблему, судя даже по тому что MS VFP 9 расчудесно открывает эту таблицу,  исправно исполняя при этом мои требования по SET DELETED.


Anatoly Podgoretsky   (2010-09-20 15:10:00) [18]

Работает только в рамках текущего скопа, а эта последовательность

  cmd.Execute;
  adoDataset.Open;


Вроде относится к разным скопам.


Anatoly Podgoretsky   (2010-09-20 15:08:00) [19]

> Сергей М.  (20.09.2010 13:56:06)  [6]

По документации данная команда поддержана и работает даже для Query


Сергей М.   (2010-09-20 15:03:00) [20]


> adoConn.KeepConnection := ???


Оно хоть True хоть False - никак не влияет.
Да и с с какого перепугу оно должно влиять если я явнокомандую

adoCmd.Connection.Connected := True;

?

Хочешь сказать что коннект разрывается после

cmd.Execute;

?

Это не так при любом состоянии adoConn.KeepConnection.
Хотя бы судя по невозбуждению события adoConn.XXXXDisconnect в промежутке времени между

cmd.Execute;
и
adoDataset.Open;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо