![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск без locate
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] ошибки обеспечены. Может шеф это имел ввиду как кулхацкер :-)))
Проиндексируйте и решите вопрос красиво
Только не надо путать фильтраци с навигацией по таблице
это разные вещи