Форум: "Базы";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизПровайдер VFPOLEDB.1 и запрет возврата удаленных запис Найти похожие ветки
← →
Сергей М. © (2010-09-17 17:49) [0]Строка коннекта:
Provider=VFPOLEDB.1;
Data Source=x:\yyy\zzz.dbf;
Mode=Share Deny Write;
Deleted=Yes;
и т.д.
Не работает, зараза.. Возвращает все подряд - и удаленные и не удаленные ..
Явное требование "SET DELETED ON" в ADCommand.CommandText так же не приводит к ожидаемому результату.
Где грабли ?)
← →
sniknik © (2010-09-17 19:10) [1]> Deleted=Yes;
указание показывать удаленное... попробуй No.
← →
Сергей М. © (2010-09-17 22:26) [2]
> sniknik © (17.09.10 19:10) [1]
Если бы)..
Это мелкомягкие так умудрились сократить Ignore Deleted..
> попробуй No
Хоть Но, хоть Йес, хоть Да, хоть Нет - результат один и тот же ..
Чувствуя себя полным бараном открываю FoxPro25, командую ему SET DELETED ON - и та же самая таблица расчудесно показывается им без удаленных записей, а SET DELETED OFF - пожалуйста вам, с удаленными ..
← →
Сергей М. © (2010-09-17 22:36) [3]Раньш бывалочи ходил в фоксовые таблицы через ISAM да ODBC, проблем как помнится не было - Deleted=Yes отрабатывала как положено ..
А тут вот приспичило постучать через OLEDB - и нате вам)..
← →
sniknik © (2010-09-18 09:01) [4]> ODBC, проблем как помнится не было
тоже работал с ним только через ODBC... но по другой причине.
вот попробуй в подключении к ODBC выполнить 2 запроса в одном блоке/команде (разделенные ;). работает? а теперь то же самое в OLEDB... а я с MSSQL уже как то привык к множественным рекордсетам (ну и если не работает одно, причем давно, и не исправляют, то где гарантии на остальное?).
← →
sniknik © (2010-09-18 09:18) [5]> а SET DELETED OFF - пожалуйста вам, с удаленными ..
вообще, проверил, у меня так работает... а в строке при наборе в мастере параметра Deleted совсем нет. т.е. возможно ты пытаешься задать не существующий параметр, или у меня версия драйвера другая, давно ставил, точно не новая.
← →
Сергей М. © (2010-09-20 13:56) [6]
> sniknik © (18.09.10 09:01) [4]
Не возьму в толк нафига мне множественные рекордсеты, тем более что в
http://msdn.microsoft.com/en-us/library/0xzsac67%28VS.80%29.aspx
черным по желтому написано
Note
Visual FoxPro OLE DB Provider does not support multiple result sets.
?
Все что мне надо - это после коннекта к провайдеру (OLEDB или ODBC) установить режим игнора удал.записей в возвращаемых провайдером наборах данных, после чего открыть собственно требуемый НД.
Ну хорошо, пусть, предположим, vfpoledb-провайдер "не понимает" расширенного св-ва "Deleted"
Но команду SET DELETED On/OFF он обязан понимать и исполнять как положено, судя хотя бы по первоисточнику:
http://msdn.microsoft.com/en-us/library/80x51c04%28v=VS.80%29.aspx
Вот рантайм-эквивалент моих потуг, не приводящих к желаемому результату:
adoConn.ConnectionString := "Provider=VFPOLEDB.1;Data Source=x:\yyy;Password="";Collating Sequence=MACHINE
adoCmd.Connection := adoConn;
adoDataset.Connection := adoConn;
adoCmd.Connection.Connected := True;
cmd.CommandText := "SET DELETED ON";
cmd.Execute;
adoDataset.Open;
Команда SET DELETED ON якобы успешно отрабатывается (иначе бы я схлопотал исключение), дейтасет успешно открывается, но в нем я вижу солянку из существующих и удаленных записей.
Вот и стою на асфальте в лыжи обутый..
p.s
Долбаный фокс, когда же он наконец окончательно умрет ?)
← →
sniknik © (2010-09-20 14:52) [7]> черным по желтому написано
> Note
> Visual FoxPro OLE DB Provider does not support multiple result sets.
> ?
и тем не менее, в ODBC драйвере они были. (не буду искать доку, и так помню, у меня без них одна программа бы не работала)
> Но команду SET DELETED On/OFF он обязан понимать и исполнять как положено
ну, у меня и исполняет. как положено.
> adoConn.ConnectionString := "Provider=VFPOLEDB.1;Data Source=x:\yyy;Password="";Collating Sequence=MACHINE
adoConn.KeepConnection := ???
← →
Сергей М. © (2010-09-20 15:03) [8]
> adoConn.KeepConnection := ???
Оно хоть True хоть False - никак не влияет.
Да и с с какого перепугу оно должно влиять если я явно командуюadoCmd.Connection.Connected := True;
?
Хочешь сказать что коннект разрывается послеcmd.Execute;
?
Это не так при любом состоянии adoConn.KeepConnection.
Хотя бы судя по невозбуждению события adoConn.XXXXDisconnect в промежутке времени между
cmd.Execute;
и
adoDataset.Open;
← →
Anatoly Podgoretsky © (2010-09-20 15:08) [9]> Сергей М. (20.09.2010 13:56:06) [6]
По документации данная команда поддержана и работает даже для Query
← →
Anatoly Podgoretsky © (2010-09-20 15:10) [10]Работает только в рамках текущего скопа, а эта последовательность
cmd.Execute;
adoDataset.Open;
Вроде относится к разным скопам.
← →
Сергей М. © (2010-09-20 15:12) [11]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.
← →
Сергей М. © (2010-09-20 15:14) [12]
> Anatoly Podgoretsky © (20.09.10 15:10) [10]
Ну так ткни меня носом в то как обеспечить единый скоп ..
← →
Polevi © (2010-09-20 15:20) [13]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:33) [14]
> Polevi © (20.09.10 15:20) [13]
Так ведь adoCmd не есть наследник TDataSet ?
После открытия, предположим, мне нужно из DataSource подцепиться к открытому таким образом НД ..
← →
sniknik © (2010-09-20 15:38) [15]Polevi © (20.09.10 15:20) [13]
получится только в ODBC, там есть возврат множественных рекордсетов...
> Так ведь adoCmd не есть наследник TDataSet ?
он возвращает рекордсет, т.что можно просто его присвоить.
← →
sniknik © (2010-09-20 15:40) [16]> Хочешь сказать что коннект разрывается после
при отсутствии открытых рекордсетов у данного коннекта... т.е. да и после Execute тоже возможно.
← →
Сергей М. © (2010-09-20 15:42) [17]Похоже я сообразил почему лыжи не едут ..
ПриCommandType = cmdUnknown
илиcmdText
иCommandText = SomeTablename
НД открывается в режиме прямого доступа к соотв. табличному контейнеру (что эквивалентноCommandType = cmdTableDirect
)
А в этом режиме провайдеру начхать на флаг DELETED, что как раз и подтверждается значением св-ва adoDataset.Properties["Skip Deleted Bookmarks"] =False после открытия рекордсета
← →
Anatoly Podgoretsky © (2010-09-20 16:33) [18]> Сергей М. (20.09.2010 15:14:12) [12]
Не знаю как здесь, но в MS SQL
Insert into
execute
select from
open
Это два разных скопа
А,
Insert into
select from
open
Это один и тот же (инструкция известная, для получение ИД)
Также можно создать серверную транзакцию, тогда все команды в одном скопе.
← →
Anatoly Podgoretsky © (2010-09-20 16:36) [19]> Polevi (20.09.2010 15:20:13) [13]
Вот и я про тоже. Но тут утверждают, что это не работает. Может надо ниже
спускаться, на уровень АДО, а не ADO.VCL
← →
Anatoly Podgoretsky © (2010-09-20 16:37) [20]Удалено модератором
← →
Anatoly Podgoretsky © (2010-09-20 16:38) [21]Удалено модератором
← →
Anatoly Podgoretsky © (2010-09-20 16:39) [22]Удалено модератором
← →
Anatoly Podgoretsky © (2010-09-20 16:43) [23]Удалено модератором
← →
Сергей М. © (2010-09-21 09:28) [24]Тогда возникает попутный вопрос - а фигурирует ли тем или иным образом поле с флагом DELETED в ADO-рекордсет, открытый в режиме TableDirect ?
Иными словами, есть ли в этом режиме принципиальная возможность организовать пользов.фильтрацию записей по этому признаку, к примеру, обработчика OnFilterRecord ?
← →
Сергей М. © (2010-09-21 09:54) [25]Любопытно что попытка установки в дизайн-тайм свойства
CommandText = "SELECT Deleted("MyDBFTable")", * FROM MyDBFTable"
тут же вешает IDE намертво)
← →
sniknik © (2010-09-21 10:25) [26]ну так, получается же рекурсия, смена свойства таблицы сбрасывает/переоткрывает ее, а открытие вызывает смену... ты же его в запрос "влепил", т.е. получается взаимоблокировка.
проверь, поставь другую.
← →
Anatoly Podgoretsky © (2010-09-21 11:28) [27]> Сергей М. (21.09.2010 09:54:25) [25]
Ну вообще то этот запрос не выполнить, разбаланс кавычек
Проверь так
CommandText = "SELECT Deleted(), * FROM MyDBFTable";
и даже так, для начала
CommandText = "SELECT Deleted() FROM MyDBFTable";
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.065 c