Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизПоиск без 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\Ðàáî÷èé ñòîë\ïðîãà\ïðîãà\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;"
← →
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\Ðàáî÷èé ñòîë\ïðîãà\ïðîãà\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;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.04 c