-
Строка коннекта:
Provider=VFPOLEDB.1; Data Source=x:\yyy\zzz.dbf; Mode=Share Deny Write; Deleted=Yes; и т.д.
Не работает, зараза.. Возвращает все подряд - и удаленные и не удаленные ..
Явное требование 'SET DELETED ON' в ADCommand.CommandText так же не приводит к ожидаемому результату.
Где грабли ?)
-
> Deleted=Yes; указание показывать удаленное... попробуй No.
-
> sniknik © (17.09.10 19:10) [1]
Если бы).. Это мелкомягкие так умудрились сократить Ignore Deleted..
> попробуй No
Хоть Но, хоть Йес, хоть Да, хоть Нет - результат один и тот же ..
Чувствуя себя полным бараном открываю FoxPro25, командую ему SET DELETED ON - и та же самая таблица расчудесно показывается им без удаленных записей, а SET DELETED OFF - пожалуйста вам, с удаленными ..
-
Раньш бывалочи ходил в фоксовые таблицы через ISAM да ODBC, проблем как помнится не было - Deleted=Yes отрабатывала как положено .. А тут вот приспичило постучать через OLEDB - и нате вам)..
-
> ODBC, проблем как помнится не было тоже работал с ним только через ODBC... но по другой причине. вот попробуй в подключении к ODBC выполнить 2 запроса в одном блоке/команде (разделенные ;). работает? а теперь то же самое в OLEDB... а я с MSSQL уже как то привык к множественным рекордсетам (ну и если не работает одно, причем давно, и не исправляют, то где гарантии на остальное?).
-
> а SET DELETED OFF - пожалуйста вам, с удаленными .. вообще, проверил, у меня так работает... а в строке при наборе в мастере параметра Deleted совсем нет. т.е. возможно ты пытаешься задать не существующий параметр, или у меня версия драйвера другая, давно ставил, точно не новая.
-
> 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 Долбаный фокс, когда же он наконец окончательно умрет ?)
-
> черным по желтому написано > 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 := ???
-
> adoConn.KeepConnection := ???
Оно хоть True хоть False - никак не влияет. Да и с с какого перепугу оно должно влиять если я явно командую adoCmd.Connection.Connected := True; ? Хочешь сказать что коннект разрывается после cmd.Execute; ? Это не так при любом состоянии adoConn.KeepConnection. Хотя бы судя по невозбуждению события adoConn.XXXXDisconnect в промежутке времени между cmd.Execute; и adoDataset.Open;
-
> Сергей М. (20.09.2010 13:56:06) [6]
По документации данная команда поддержана и работает даже для Query
-
Работает только в рамках текущего скопа, а эта последовательность cmd.Execute;
adoDataset.Open; Вроде относится к разным скопам.
-
-
> Anatoly Podgoretsky © (20.09.10 15:10) [10]
Ну так ткни меня носом в то как обеспечить единый скоп ..
-
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;
-
> Polevi © (20.09.10 15:20) [13]
Так ведь adoCmd не есть наследник TDataSet ? После открытия, предположим, мне нужно из DataSource подцепиться к открытому таким образом НД ..
-
Polevi © (20.09.10 15:20) [13] получится только в ODBC, там есть возврат множественных рекордсетов...
> Так ведь adoCmd не есть наследник TDataSet ? он возвращает рекордсет, т.что можно просто его присвоить.
-
> Хочешь сказать что коннект разрывается после при отсутствии открытых рекордсетов у данного коннекта... т.е. да и после Execute тоже возможно.
-
Похоже я сообразил почему лыжи не едут .. При CommandType = cmdUnknown или cmdText и CommandText = SomeTablename НД открывается в режиме прямого доступа к соотв. табличному контейнеру (что эквивалентно CommandType = cmdTableDirect ) А в этом режиме провайдеру начхать на флаг DELETED, что как раз и подтверждается значением св-ва adoDataset.Properties['Skip Deleted Bookmarks'] =False после открытия рекордсета
-
> Сергей М. (20.09.2010 15:14:12) [12]
Не знаю как здесь, но в MS SQL Insert into execute select from open Это два разных скопа А, Insert into select from open Это один и тот же (инструкция известная, для получение ИД) Также можно создать серверную транзакцию, тогда все команды в одном скопе.
-
> Polevi (20.09.2010 15:20:13) [13]
Вот и я про тоже. Но тут утверждают, что это не работает. Может надо ниже спускаться, на уровень АДО, а не ADO.VCL
-
Удалено модератором
-
Удалено модератором
-
Удалено модератором
-
Удалено модератором
-
Тогда возникает попутный вопрос - а фигурирует ли тем или иным образом поле с флагом DELETED в ADO-рекордсет, открытый в режиме TableDirect ?
Иными словами, есть ли в этом режиме принципиальная возможность организовать пользов.фильтрацию записей по этому признаку, к примеру, обработчика OnFilterRecord ?
-
Любопытно что попытка установки в дизайн-тайм свойства
CommandText = 'SELECT Deleted('MyDBFTable')', * FROM MyDBFTable'
тут же вешает IDE намертво)
-
ну так, получается же рекурсия, смена свойства таблицы сбрасывает/переоткрывает ее, а открытие вызывает смену... ты же его в запрос "влепил", т.е. получается взаимоблокировка.
проверь, поставь другую.
-
> Сергей М. (21.09.2010 09:54:25) [25]
Ну вообще то этот запрос не выполнить, разбаланс кавычек Проверь так CommandText = 'SELECT Deleted(), * FROM MyDBFTable'; и даже так, для начала CommandText = 'SELECT Deleted() FROM MyDBFTable';
|