Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];

Вниз

ошибка при установке фильтра в ADO таблице   Найти похожие ветки 

 
Davinchi   (2003-11-04 13:14) [0]

Помогите разобраться вчем проблема, я хочу отфильтровать поле по определенным значениям и делаю это следуюшим образом:

AdoDataSet.Filter:="xxx";
AdoDataSet.Filtered:=True;

Раньше никогда не работал с АДОшными тэйбалами, поэтому даже приблизительно не знаю как отфильтровать нужное мне поле по нужному мне значению.

Заранее всем благодарен за любую информацию.


 
Zacho   (2003-11-04 13:35) [1]

Ты хоть сообщение об ошибке приведи, и реальный кусок кода, а то телепатов здесь маловато.
И вообще-то в хелпе есть пример.


 
Davinchi   (2003-11-04 13:40) [2]

Гдк в какой хелпе???? А смысел ошибки в переводе с англиской ругни: Неверная строка фильтра или ее формат...


 
Zacho   (2003-11-04 13:45) [3]

Приводи не смысл, а точное сообщение об ошибке в оригинале. И кусок кода, по крайней мере реальное значение фильтра.
В крм хелпе ? Естественно в Дельфийском. А вот тебе и выдержка оттуда, если уж самому лень нажать F1:

The following runtime example shows how to assign that filter expression to the Filter property and activate the filtering.

with ADODataSet1 do begin

Filtered := False;
Filter := "State = " + QuotedStr("CA") + " OR " +
"State = " + QuotedStr("CA");
Filtered := True;

end;


 
Davinchi   (2003-11-04 14:00) [4]

Реальное сообщение привести не могу, т.к. времено нахожусь не на своем рабочем месте и не имею возможности запустить проект. Реально в фильтре указываю только то заначение тех записей, у которых в первом из трех полей оно присудствуем, и мне необходимо видеть только эти записи...

Эту хелпу я видел но немогу до конца разобраться что написано в строке фильтра - в ее формате...
"State="- я так понимаю это поле, "or" там т.к. используется два значения для отбора, а что такое QuotedStr("CA") я так и не разобрался. У мня есть предположение что я вообще не в том напровлении, что надо использовать TQuery и делать SQL запрос...


 
Davinchi   (2003-11-04 15:34) [5]

Попробовал написать так:

with ADODataSet1 do
begin
Filtered := False;
Filter := "MyField = " + QuotedStr("MyFilter");
Filtered := True;
end;

Был сильно удивлен - если MyFilter - только числа, например "123", то все работает нормально, если MyFilter - буквы - "xxx", то возникает ошибка: "BOF or EOF имеет значение True либо текущая запись удалена. Для выполнения операции необходимма текущая запись.", а я никакиз операций с удалением не делаю вообще...


 
Stas   (2003-11-04 15:36) [6]

Используй WHERE


 
bon   (2003-11-04 15:38) [7]

попробуй написать так
ADODataSet1.Filtered := False;
ADODataSet1.Filter := "MyField = " + QuotedStr("MyFilter");
ADODataSet1.Filtered := True;


 
Davinchi   (2003-11-04 15:40) [8]

попробуй написать так
ADODataSet1.Filtered := False;
ADODataSet1.Filter := "MyField = " + QuotedStr("MyFilter");
ADODataSet1.Filtered := True;

Попробовал, не прокатило, та же лабуда если MyFilter состоит из букв...


 
bon   (2003-11-04 15:43) [9]

А поле MyField какого типа?


 
Davinchi   (2003-11-04 15:44) [10]

String[50]


 
paul_k   (2003-11-04 15:45) [11]

какой типа поля MyField?


 
bon   (2003-11-04 15:45) [12]

А переменная MyFilter?


 
Davinchi   (2003-11-04 15:52) [13]

MyFilter - это не переменная, а просто подстановочный текст.
Привожу конкретный код, который я использую-

...
ADODataSet1.Filter := "MyField = " + QuotedStr("123");//работает
...
//другой вариант
...
ADODataSet1.Filter := "MyField = " + QuotedStr("ABC");//ошибка!
...


 
paul_k   (2003-11-04 15:53) [14]

А текст ошибки?


 
bon   (2003-11-04 15:54) [15]

А если так

ADODataSet1.Filter := "MyField = " + "ABC"


 
Davinchi   (2003-11-04 15:57) [16]

Текст ошибки немного видоизменен т.к. у меня стоит руссификатор: "BOF or EOF имеет значение True либо текущая запись удалена. Для выполнения операции необходимма текущая запись."


 
Плохиш_   (2003-11-04 16:00) [17]

>Davinchi © (04.11.03 15:34) [5]

Ошибка означает, что ты пытаешься, что-то сделать с dataset (например прочитать какое-то поле), но он не содержит данных. Проверяй события On___Scroll.


 
Davinchi   (2003-11-04 16:01) [18]

если использовать:
ADODataSet1.Filter := "MyField = " + "ABC"
возникает другая ошибка: "Аргументы имеют не верный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом".


 
Davinchi   (2003-11-04 16:03) [19]

БД точно содержит данные!!!
А что мне может дать OnScroll??????????????


 
Плохиш_   (2003-11-04 16:08) [20]

>Davinchi © (04.11.03 16:03) [19]

Что ж, продолжаем телепатить :-(
Dataset находится в состоянии dsEdit, dsInsert ... , ты ему делаешь филтер, текущая запись в отфильтрованные данные не попала, результат см. [16]


 
Плохиш_   (2003-11-04 16:09) [21]

У тебя, что F7/F8 сломаны?


 
Davinchi   (2003-11-04 16:13) [22]

Я делаю фильтрацию сразу после открытия БД. А в каком состоянии должна быть БД и почему тогда Если фильтр состоит из чисел, то все работает нармально?????????7


 
Davinchi   (2003-11-04 16:14) [23]

ошибка происходит на строке

AdoDataSet.Filtered:=True;


 
Плохиш_   (2003-11-04 16:14) [24]

читаем ещё раз [20]


 
Davinchi   (2003-11-04 16:16) [25]

Блин Плохиш_, ты не унничай, ЧЕ ДЕЛАТЬ - ТА НАДА????


 
Anatoly Podgoretsky   (2003-11-04 16:18) [26]

Про книги говорили или еще нет?


 
DenK_vrtz   (2003-11-04 16:23) [27]

"Трудно искать черную кошку в темной комнате..." (с) МВИН


 
Davinchi   (2003-11-04 16:24) [28]

какие данные нужны?


 
Anatoly Podgoretsky   (2003-11-04 16:29) [29]

Например, что ты знаешь о фильтрах в частности и о базах вообще?


 
Davinchi   (2003-11-04 16:32) [30]

С обычными dbf работал и делал фильтры так как и сейчас, а с АДОшными таблицыми столкнулся впервые...


 
Anatoly Podgoretsky   (2003-11-04 16:36) [31]

Различия нет, различие зависит только от примененой базы.


 
Davinchi   (2003-11-04 16:42) [32]

ближе к теме пожалуйста, в чем проблемма с таким способом использования фильтра???


 
Anatoly Podgoretsky   (2003-11-04 16:49) [33]

Проблема наверно в тебе


 
Davinchi   (2003-11-04 16:57) [34]

проблема в том, что если в БД нет записей соответствующих запросу фильтра, то происходит эта ошибка, как нормально обрабатывать эту ситуацию...

P.S.
Anatoly Podgoretsky, сохраняйте тематику форума и держитесь в рамках приличия этого сайта, не надо переходить на личности, прочитайте о чем пишется на главной страничке форумов... :-(


 
Anatoly Podgoretsky   (2003-11-04 17:01) [35]

В таком случае не надо задавать этот вопрос Davinchi © (04.11.03 16:42) [32] , поскольку это прямой ответ на него.
Пока до сих пор ты практиски ничего не сказал про свою таблицу структуру, не привел пример реальных данных в таблице, по которым ты вроде считешь, что данные у тебя есть, и при каждом изменении надо приводить измененый код, чтобы мы не гадали, что же ты там изменил.

Кроме того мне кажется, что у тебя не Д7, а если Д7 какие апдейты ты поставил.


 
Davinchi   (2003-11-04 17:08) [36]

Вот так бы сразу, я же спрашивал какая информация нужна...
Структура Бд:

TableTheme:="CREATE TABLE TestTheme"+
"([id]Counter,"+
"[Description]String (50),"+
"[Data]Memo,"+
"[RichData]Memo,"+
"PRIMARY KEY ([id]))";


реальный кусок кода:

if ADSet.RecordCount > 0 then
begin
ADSet.Filtered:=False;
ADSet.Filter:="Description = "+QuotedStr("b");
ADSet.Filtered:=True;
end;


Апдейтов не ставил, только руссификатор Д7...


 
paul_k   (2003-11-04 17:11) [37]

уфф... упарился этой ошибки добиватся, но таки вышло

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ADOTable1.Filtered:=false;
ADOTable1.Filter:="NAME="+QuotedStr("99");
ADOTable1.Filtered:=true;
end;
и
procedure TForm1.Button2Click(Sender: TObject);
begin
ADOTable1.Edit;
ADOTable1.Filtered:=false;
ADOTable1.Filter:="NAME="+QuotedStr("*");
ADOTable1.Filtered:=true;
end;


пролетают на ура, пока следующее не написано

procedure TForm1.ADOTable1BeforeScroll(DataSet: TDataSet);
begin
showmessage(Dataset.fieldByName("name").AsString)
end;


 
Davinchi   (2003-11-04 17:14) [38]

Если выполнять фильтрацию со значением, которое есть хотябы в одном рекорде все нормально, но если со значением которого нет ни в одном рекорде, как в приведенной строке:

ADSet.Filter:="Description = "+QuotedStr("b");

то возникает ошибка [16].

Ранее я был не прав т.к. пологал, что ошибка присходит только с числовым фильтром, пока не попробовал не существующее строковае занчение фильтра...


 
paul_k   (2003-11-04 17:16) [39]

Davinchi
Ошибка возникает при исполнении
procedure TForm1.ADOTable1BeforeScroll(DataSet: TDataSet);
begin
showmessage(Dataset.fieldByName("name").AsString)
end;

а не при фильтрации


 
Davinchi   (2003-11-04 17:16) [40]

у меня данные отображаются в DbGrid



Страницы: 1 2 вся ветка

Форум: "Базы";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.01 c
3-78775
fearless
2003-11-04 10:23
2003.11.24
документы из BLOB в MS WORD


14-79114
IronHawk
2003-10-17 15:28
2003.11.24
ВНИМАНИЕ! 6-я официальная встреча Мастаков в КИЕВЕ!


1-78911
miw
2003-11-14 21:10
2003.11.24
Программное создание компонентов...


14-79188
Думкин
2003-11-03 05:17
2003.11.24
С днем рождения! 3 ноября.


14-79146
wnew
2003-11-02 19:52
2003.11.24
г.Первомайск Луганской обл., Украина





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский