Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск без locate


Страницы:   1 2

tema ©   (2005-05-13 15:40:00) 

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


panov   (2005-05-13 21:42:00) [1]

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


Art_Z   (2005-05-13 21:37:00) [2]

>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...
Спасибо шо поучили меня дурака....


sniknik   (2005-05-13 21:08:00) [3]

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

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

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


-=XP=-   (2005-05-13 19:10:00) [4]

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


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


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

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

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


sniknik   (2005-05-13 18:01:00) [6]

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

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


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

Кстати сменил на Jet-всё равно тотже глюк вылетает....
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\Documents and Settings\Art_Z\Ðàáî÷èé ñòîë\ïðîãà\ïðîãà\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


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

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


DSKalugin   (2005-05-13 17:41:00) [9]

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


Anatoly Podgoretsky   (2005-05-13 17:09:00) [10]

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


-=XP=-   (2005-05-13 16:32:00) [11]

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

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;


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


Sergey13   (2005-05-13 16:27:00) [12]

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


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

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


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

Попрбую...


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

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


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

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


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


> tema   (13.05.05 16:21) [14]


> Provider=MSDASQL.1;

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


Bronco   (2005-05-13 16:21:00) [18]


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

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


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

Поменял бы да других пока нет...
Provider=MSDASQL.1;User ID=admin;Extended Properties="DBQ=C:\Documents and Settings\Art_Z\Ðàáî÷èé ñòîë\ïðîãà\ïðîãà\cafedra.mdb;DefaultDir=C:\Documen ts and Settings\Art_Z\Ðàáî÷èé ñòîë\ïðîãà\ïðîãà;Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"


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

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

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо