![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Провайдер VFPOLEDB.1 и запрет возврата удаленных запис [D7, dBase, FoxPro]
Сергей М. © (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;