Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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\&#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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.054 c
14-1117912350
Dezmond
2005-06-04 23:12
2005.06.29
MS C# vs Borand C#


3-1116317350
pavel_guzhanov
2005-05-17 12:09
2005.06.29
Как определить, на каком столбце в DBGrid щелкнули мышью


1-1118088637
01
2005-06-07 00:10
2005.06.29
что-то вроде ExtractFilePath(Application.ExeName)


3-1116561691
Ландух
2005-05-20 08:01
2005.06.29
Как обновить данные удаленной БД


3-1116781037
M_Tania
2005-05-22 20:57
2005.06.29
Из FoxPro в SQL





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