Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
hgd   (2007-09-15 10:46) [0]

Подскажите, начал осваивать работу с базой данных и не нашел способ поиска в таблице ADOTable. Есть описание Locate, lookup но они находят только единичные записи, а мне необходимо перебрать все данные таблицы. Что надо использовать, чтобы найти все записи, где поле базы Name = Vasia?


 
Anatoly Podgoretsky ©   (2007-09-15 11:01) [1]

> hgd  (15.09.2007 10:46:00)  [0]

После Locate следующие записи ищутся с помощью NEXT и проверкой на тоже условие.
Но может тебе лучше воспользоваться выборкой и в ней выбрать всех Vasia


 
Savek   (2007-09-15 11:40) [2]

ADOTable1.Filter:="[Name]="""Vasia"""";
ADOTable1.Filtered:=true;


 
hgd   (2007-09-16 21:53) [3]

А как быстро найти номер записи в которой Fam=Ivanov и Name=Vasia?


 
Anatoly Podgoretsky ©   (2007-09-16 22:12) [4]

> hgd  (16.09.2007 21:53:03)  [3]

Какой еще такой номер записи, изыди сатана.


 
YurikGL ©   (2007-09-16 22:12) [5]

Select * from ... where Name = "Vasia"... найдет тебе все нужные записи...


 
DVM ©   (2007-09-16 23:02) [6]


> hgd   (15.09.07 10:46)  

Во-первых, выкинь AdoTable и возьми AdoDataSet.
Во-вторых, лучше все же искать посредством SQL запросов.


 
Desdechado ©   (2007-09-17 10:32) [7]

Забудь про номер записи. Нет такого понятия в СУБД. Это воспаленное бумагой воображение.
Номер может быть только в выборке данных и то, в основном, для печати.
А в БД нужно работать по первичным ключам.


 
NewQuas   (2007-09-17 15:11) [8]

Первичный ключ - есть номер записи (счетчик), необходимо найти номера записей в которых Name=Ivan Fam=Ivanov. Скажите, как?


 
engine ©   (2007-09-17 15:17) [9]

select id
from mybase
where name = :Pers_Name and
     fam = :Pers_Fam

MyDataSet.ParamByName("Pers_Name").Value := "Иван";
MyDataSet.ParamByName("Pers_Fam").Value :=  "Иванов";


 
Desdechado ©   (2007-09-17 21:17) [10]

> Первичный ключ - есть номер записи (счетчик)
Большое заблуждение. Если запись будет удалена, то дырка в нумерации останется. Какой тогда это нафиг номер?


 
NewQuas   (2007-09-18 11:26) [11]

select id
from mybase
where name = :Pers_Name and
    fam = :Pers_Fam

Куда этот код вставить?


 
sniknik ©   (2007-09-18 13:23) [12]

> Куда этот код вставить?
читать надо тщательней... см. [6], если бы прочитал,, и вник, вопроса бы не возникло.
а если ещё и последуешь совету и действительно выкинешь... то не возникнет ещё и некоторых проблем в будущем.


 
Omi ©   (2007-09-18 15:28) [13]

Свирепые вы, ребята. Заниматься ПОЛЬЗОВАТЕЛЬСКИМ поиском средствами самого MS SQL, тем более, что курсор, как правило на стороне клиента. Использовать TADODataSet - согласен. Если подсмотреть в исходники VCL (там, где Locate описано), то
//-----------------------------------------------------
//Прямо из VCL
function GetFilterStr(Field: TField; Value: Variant; Partial: Boolean = False): string;
var
 Operator,
 FieldName,
 QuoteCh: string;
begin
QuoteCh := "";
Operator := "=";
FieldName := Field.FieldName;
if Pos(" ", FieldName) > 0 then
 FieldName := Format("[%s]", [FieldName]);
Value:=SQLValueVerify(Value,Field.DataType,""); //Можно опустить - это проверка на "вшивость" ввода пользователя
if Value="" then Value:="Null";
if VarIsNull(Value) or VarIsClear(Value) then
 Value := "Null"
else
 case Field.DataType of
   ftDate, ftTime, ftDateTime:
     begin
     QuoteCh := "#";
     end;
   ftString, ftFixedChar, ftWideString:
     begin
     if Partial and (Value <> "") then
       begin
       Value := "*" + Value + "*";
       Operator := " like ";
       end;
     if Pos("""", Value) > 0 then
       QuoteCh := "#" else
       QuoteCh := """";
     end;
 end;

Result := Format("(%s%s%s%s%2:s)", [FieldName, Operator, QuoteCh, VarToStr(Value)]);
end;
//-----------------------------------------------------
{У меня ключи TGuid - с integer еще легче}
function TfFind.FunFind(mds:TADODataSet;Skip:integer):TGuid;
//mds - где ищем
//Skip - начиная с какой записи
//Sample.Text - образец для поиска
var cId:TGuid;
FLookupCursor: _Recordset;
Crit:string;
begin
cId:=NULLGUID;
try
Crit:=GetFilterStr(mds.FieldByName(mField),Sample.Text,true);
FLookupCursor := mds.Recordset.Clone(adLockReadOnly);

FLookupCursor.Find(Crit,Skip,adSearchForward,0);
if not FLookupCursor.EOF then
 begin
 if assigned(mds.BeforeScroll) then mds.BeforeScroll(mds);
 mds.Recordset.Bookmark := FLookupCursor.Bookmark;
 mds.Resync([rmExact, rmCenter]);
 if assigned(mds.AfterScroll) then mds.AfterScroll(mds);
 cId:=GetId(mds); //Получить значение ключевого поля из mds (собственная)
 end;
except
end;
FLookupCursor:=nil;
if isEqualGuid(cId,NULLGUID) then //Для int - cId=0 <невозможное значение>
 begin
 self.findResult.Caption:="Ненашли";
 self.Sample.SetFocus;
 self.Sample.SelectAll;
 end
else
 begin
 self.findResult.Caption:=mds.fieldByName(mField).Text;
 self.butFindNext.SetFocus;
 end;
Result:=cId;
end;

По идее все происходит на клиенте. Сервер отдыхает.
Интерфейс _Recordset подсмотрен в MS Access 2000 (его справка).
А вообще полезно лазить по VCL - много интересного...



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

Форум: "Начинающим";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.039 c
15-1189680539
Synset
2007-09-13 14:48
2007.10.14
СГУ и ДПС


2-1190112357
xorload
2007-09-18 14:45
2007.10.14
предача и возврат данных dll


2-1190022039
Владимир_А
2007-09-17 13:40
2007.10.14
file


2-1190207865
AigizK
2007-09-19 17:17
2007.10.14
Как подключить файл


2-1190041058
irish_34
2007-09-17 18:57
2007.10.14
Запросы





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