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

Вниз

Поиск без locate   Найти похожие ветки 

 
tema   (2005-05-13 15:40) [0]

Необходимо в базе данных найти запись значение поля в которой соответсвует заданому и поставит курсор в это поле.
MS Access через ADO;
DataModule: ADOConnection, ADOTable, DataSourse;
Form: DBGrid;
Неподскажете как это можно сделать?


 
DSKalugin ©   (2005-05-13 15:51) [1]

ADOTable.Locate()

P.S. и не морочь голову


 
-=XP=- ©   (2005-05-13 15:54) [2]

ADOTable.Filter := "[<FieldName>]=<Value>";
ADOTAble.Filtered := true;


 
Sergey13 ©   (2005-05-13 16:02) [3]

2tema   (13.05.05 15:40)
А чем локейт то не хорош?


 
Bronco ©   (2005-05-13 16:05) [4]

ADOTable.Seek(...)  ?
Либо полный цикл цикл First; Next как всегда


 
tema   (2005-05-13 16:09) [5]

Не знаю чем заказчику locate не угодил, но использовать его нельзя...
При использовании Seek и ещё пары аналогичнух методов возникает ошибка-"Данный проводник не поддерживает функции Index"-в чём проблема может быть?


 
Sergey13 ©   (2005-05-13 16:13) [6]

2 [5] tema   (13.05.05 16:09)
>Не знаю чем заказчику locate не угодил
Что за заказчик? Если он до поиска locate в сырцах снисходит, то почему сам не пишет? Спроси его как искать.
Ищи запросом наконец.


 
evvcom ©   (2005-05-13 16:14) [7]


> Не знаю чем заказчику locate не угодил, но использовать
> его нельзя

Странные требования... Ну так спроси заказчика? А то может его и винда не устраивает? Ты спроси, пока не поздно, а то придется под linux переписывать в последний момент.


 
Bronco ©   (2005-05-13 16:14) [8]


> tema   (13.05.05 16:09) [5]

Jet вроде должен поддерживать этот метод, естественно д.б. индекс по этому полю.

> Не знаю чем заказчику locate не угодил

Ну и заказчики пошли...


 
tema   (2005-05-13 16:16) [9]

Больше всего меня сейчас беспокоит причина возникновения онной ошибки...
Кстати SQL использовать тоже нельзя...
И вообще ничего использовать нельзя кроме указанных выше компонентов...


 
sniknik ©   (2005-05-13 16:17) [10]

> При использовании Seek и ещё пары аналогичнух методов возникает ошибка-"Данный проводник не поддерживает функции Index"-в чём
> проблема может быть?
единственный провайдер поддерживаюший доступ к Index на данный момент это jet (о чем кстати в справке по Seek упоминается), если у тебя не он - забудь.

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


 
Bronco ©   (2005-05-13 16:17) [11]


> tema   (13.05.05 16:16) [9]

ConnectionString покажи


 
tema   (2005-05-13 16:18) [12]

Сидел бы я щас без работы если б он знал как это написать...


 
DSKalugin ©   (2005-05-13 16:19) [13]

Естественно для того чтобы Локейт правильно и быстро позиционировался надо отсортировать это поле или сделать по нему индекс. Иначе при локации с параметрами [loPartialKey] ошибки обеспечены. Может шеф это имел ввиду как кулхацкер :-)))
Проиндексируйте и решите вопрос красиво

Только не надо путать фильтраци с навигацией по таблице
это разные вещи


 
tema   (2005-05-13 16:21) [14]

Поменял бы да других пока нет...
Provider=MSDASQL.1;User ID=admin;Extended Properties="DBQ=C:\Documents and Settings\Art_Z\&#208;&#224;&#225;&#238;&#247;&#232;&#233; &#241;&#242;&#238;&#235;\&#239;&#240;&#238;&#227;&#224;\&#239;&#240;&#238;&#227;&#224;\cafedra.mdb;DefaultDir=C:\Documen ts and Settings\Art_Z\&#208;&#224;&#225;&#238;&#247;&#232;&#233; &#241;&#242;&#238;&#235;\&#239;&#240;&#238;&#227;&#224;\&#239;&#240;&#238;&#227;&#224;;Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"


 
Bronco ©   (2005-05-13 16:21) [15]


> tema   (13.05.05 16:18) [12]
> Сидел бы я щас без работы если б он знал как это написать...

Тогда какого ляда он лезет со своими советами по поводу Locate, если сам не знает?
Сдается мне что заказчик = преподаватель :-)))


 
Bronco ©   (2005-05-13 16:22) [16]


> tema   (13.05.05 16:21) [14]


> Provider=MSDASQL.1;

Ну если есть возможность поменять на Jet - поменяй. Иначе Seek не заработает.


 
tema   (2005-05-13 16:23) [17]

>Bronco
Практически угадал...
Это действительно задача составленная преподавателем...


 
sniknik ©   (2005-05-13 16:23) [18]

> Поменял бы да других пока нет...
это именно он (jet), только через посредника (ODBC), меняй на прямое и читай справку (там где Seek)


 
tema   (2005-05-13 16:24) [19]

Попрбую...


 
tema   (2005-05-13 16:25) [20]

Спасибо всем!


 
Sergey13 ©   (2005-05-13 16:27) [21]

2[17] tema   (13.05.05 16:23)
Так бы и писал. Делаю лабу, на лекциях не был, какие есть методы поиска? А то заказчик-козел.


 
-=XP=- ©   (2005-05-13 16:32) [22]

Заказчик - преподаватель по информатике? :)

function LocateEx(ADataSet: TDataSet; const AFieldName: string; const AValue: variant): boolean;
var
 BM: TBookmark;
 F: TField;
begin
 Result := false;
 ADataSet.DisableControls;
 try
   F := ADataSet.FieldByName(AFieldName);
   BM := ADataSet.GetBookmark;
   try
     ADataSet.First;
     while not ADataSet.Eof do
       if VarCompareValue(F.AsVariant, AValue) = vrNotEqual then
         Next
       else
       begin
         Result := true;
         Exit;
       end;
     ADataSet.GotoBookmark(BM);
   finally
     ADataSet.FreeBookmark(BM);
   end;
 finally
   ADataSet.EnableControls;
 end;
end;


Но это неправильно идеологически.


 
Anatoly Podgoretsky ©   (2005-05-13 17:09) [23]

Заказчик козел


 
DSKalugin ©   (2005-05-13 17:41) [24]

так заказчик(автор) или преподаватель?
:-)))


 
tema   (2005-05-13 17:52) [25]

Признаюсь честноЖна лекции я хожу действительно редко-делать там нечего, не паскаль же по 10 разу учить...
Но заказчик- это не преподаватель!
Как я понял, то это студент УГТУ-УПИ(кто знает такой гарный ВУЗ)...
А я вот денюжку на нём зарабатываю...
А мы Си ещё только на следующем курсе изучать будем(на втором:))(прога кстати должна быть на си...)
А про Базы Данных и Builder я уж совсем молчу...
Так что, что там делать на этих лекциях...


 
tema   (2005-05-13 17:53) [26]

Кстати сменил на Jet-всё равно тотже глюк вылетает....
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\Documents and Settings\Art_Z\&#208;&#224;&#225;&#238;&#247;&#232;&#233; &#241;&#242;&#238;&#235;\&#239;&#240;&#238;&#227;&#224;\&#239;&#240;&#238;&#227;&#224;\cafedra.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don"t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False


 
sniknik ©   (2005-05-13 18:01) [27]

> Кстати сменил на Jet-всё равно тотже глюк вылетает....
справку не дочитал по Seek.
там же ясно написано в каком режиме должно открываться.

p.s. строку с окрытого коннекта не копируй, меньше, и понятнее будет.


 
tema   (2005-05-13 18:30) [28]

Перечитал ещё на пару праз справку...
Нашёл поповоду настройки свойств ADODataset.
Настроил...
Выпало сообщение о том, что "Текущий проводник не поддерживает функций сортировки и фильтрации"
По поводу режимов открытия ни чего не заметил...
Ткни носом пожалуста...
А то я уже тихо схожу с ума...

Можно как-нибудь просто по элементно обращаться к дпнным в таблице?
Типа через индексы...
Как в массиве...
А потом на найденное поставить курсор...


 
-=XP=- ©   (2005-05-13 19:10) [29]

Можно как-нибудь просто по элементно обращаться к дпнным в таблице?
Типа через индексы...
Как в массиве...
А потом на найденное поставить курсор...


Чем [22] не подходит-то?


 
sniknik ©   (2005-05-13 21:08) [30]

> Ткни носом пожалуста...
куда? где видно то что ты делаеш?
или описывать весь процесс в надежде на то что чтото в нем тебе пригодится? здесь так не принято, на то книги и статьи есть.

> "Текущий проводник не поддерживает функций сортировки и фильтрации"
вполне возможно ты "попал" в точку, это именно нужный режим, только в нем действительно нет сортировки, сортировка это в памяти и временно, а ты подключился на работу с таблицами напрямую с диска.  сортировка заменяется на установку нужного индекса, физического не временного, а фильтрацию убери она похоже использует чтото из методов несовместимых с режимом (ту же сортировку к примеру)

> Чем [22] не подходит-то?
для препода? возможно ничем, но если для нормального программирования то индексный поиск самый быстрый, и сравнивать его с перебором таблици не стоит.


 
Art_Z ©   (2005-05-13 21:37) [31]

>sniknik
>> Ткни носом пожалуста...
>куда? где видно то что ты делаеш?
>или описывать весь процесс в надежде на то что чтото в нем тебе >пригодится? здесь так не принято, на то книги и статьи есть.

Просто хотел чтобы ты сделал copy/paste из справки того что я пропустил...

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

Набил [22] работает(правда пришлось чуть поправить...)
int LocateEx(TDataSet *ADataSet,const AnsiString AFieldName,const Variant AValue)
{
       TBookmark BM;
       TField *F;
       ADataSet->DisableControls();
       F=ADataSet->FieldByName(AFieldName);
       BM=ADataSet->GetBookmark();
       ADataSet->First();
       while(!ADataSet->Eof){
       if(VarCompareValue(F->AsVariant,AValue)!=vrEqual){
               ADataSet->Next();
       }
       else
       {
               F->FocusControl();
               ADataSet->FreeBookmark(BM);
               ADataSet->EnableControls();
               return 1;
       };
       }
       ADataSet->GotoBookmark(BM);
       ADataSet->FreeBookmark(BM);
       ADataSet->EnableControls();
       return 0;
}
(спасибо -=XP=-)
Хотя ты,sniknik, конечно прав [22]-это не метод, но до завтра ничего другого я видимо на рожу...
А после завтра обязательно разберусь и напишу через seek...
Спасибо шо поучили меня дурака....


 
panov ©   (2005-05-13 21:42) [32]

>Art_Z ©   (13.05.05 21:37) [31]
Не надо под разными никами писать.



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

Текущий архив: 2005.06.29;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.03 c
1-1117668334
iskatel
2005-06-02 03:25
2005.06.29
resume.xlw млин...


14-1117201660
rOOse
2005-05-27 17:47
2005.06.29
вирус


1-1118078693
Петя
2005-06-06 21:24
2005.06.29
будет слаживать произвольное количество строк!!


14-1117189726
Alexius
2005-05-27 14:28
2005.06.29
Помогите найти компонент!


14-1117696261
Nik8.
2005-06-02 11:11
2005.06.29
Загадка - Два брата