Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.062 c
15-1352372205
Scott Storch
2012-11-08 14:56
2013.03.22
как обозвать action


6-1259931784
Kanaris
2009-12-04 16:03
2013.03.22
Как реализовать "ретранслятор" запросов через сокеты?


15-1345798515
Beginer
2012-08-24 12:55
2013.03.22
Как отключить автовыравнивание значков на рабочем столе?


15-1337373003
Юрий
2012-05-19 00:30
2013.03.22
С днем рождения ! 19 мая 2012 суббота


15-1349037002
Юрий
2012-10-01 00:30
2013.03.22
С днем рождения ! 1 октября 2012 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский