Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Провайдер 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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.055 c
15-1333730960
Дмитрий С
2012-04-06 20:49
2013.03.22
Очень сильно тупит delphiXE


15-1338371588
Dmitry87
2012-05-30 13:53
2013.03.22
Windows XP -> VirtualBox -> Windows 8


15-1338542114
NailMan
2012-06-01 13:15
2013.03.22
восстановление после операции


15-1349179159
картман
2012-10-02 15:59
2013.03.22
частица "же"


15-1343939402
Юрий
2012-08-03 00:30
2013.03.22
С днем рождения ! 3 августа 2012 пятница