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

Вниз

поиск в большой базе   Найти похожие ветки 

 
sherminator   (2004-02-11 13:17) [0]

есть база аксесовская... в ней штук 20 таблиц... каждая содержит по нескольку десятков тысяч записей... каким образом ускорить поиск по этим таблицам??? использую следующий код:

Table1.TableName:="FLDOLGN";
Table1.Open;
Table1.First;
while not Table1.Eof do
begin
if Table1.FieldByName("IDUL").AsString = idul
then Label11.Caption := Table1.FieldByName("DOLGN").AsString;
Table1.Next;
end;
Table1.Close;

далее меняю значение TableName и продолжаю обработку следующей таблицы... проблема в том, что иногда выскакивает ошибка о нехватке памяти... да и если честно запрос с выводом порядка 12-15 значений собранных из разных таблиц занимает длительное время...(((( может как-то можно иначе всё сделать???


 
Johnmen   (2004-02-11 13:19) [1]

А в чем заключается обработка ?


 
Sandman25   (2004-02-11 13:19) [2]

select dolgn from fldolgn where idul = :idul


 
Anatoly Podgoretsky   (2004-02-11 13:20) [3]

Конечно, если после нахождения перкращать цикл.


 
VLAD-MAL   (2004-02-11 13:23) [4]

Ты, наверное, что-то там свое (объект) много раз создаешь, и не убиваешь потом.
Вообще, по-моему, с логикой построения базы какие-то траблы...
Чумовая операция какая-то... У тебя что, не известно, в каких таблицах какие поля? Создай тогда спец. таблицу - репозиторий, в которой список всех полей + где они лежат...

Таблица Repository:

Id Field_Name Table_Name
-------------------------
1 Id Repository
2 Field_Name Repository
3 Table_Name Repository
4 FLDOLGN Super_Puper_Table
...
Вообще, зачем тебе это понадобилось?


 
sherminator   (2004-02-11 13:25) [5]

2Sandman25 можно поподробнее остановиться на структуре "select dolgn from fldolgn where idul = :idul"???????

2Anatoly Podgoretsky сенкс... на самом деле не продумал...


 
sherminator   (2004-02-11 13:31) [6]

2VLAD-MAL где что лежит я знаю... проблема в том, что данные в одной таблице содержат ключи для того, чтобы найти данные, которые содержатся в другой таблице... вот и приходится лопатить по нескольку таблиц... построение базы согласен что шальное, но выбирать не приходится... что дают с тем и работаю...


 
Sandman25   (2004-02-11 13:36) [7]

[5] sherminator © (11.02.04 13:25)

Использовать SQL.

Если через BDE (класс TQuery)
Query.SQL.Text := Format("select dolgn from %s where idul = :idul", ["FLDOLGN"]);
Query.Params[0].AsString := idul;
Query.ExecSQL;

Если через ADO (класс TADOQuery), то будут небольшие отличия в синтаксисе + надо будет создавать параметры вручную.


 
Sandman25   (2004-02-11 13:38) [8]

Только не
Query.ExecSQL, а:

Query.Open;
if Eof then
Label1.Caption := "А нету"
else
Label1.Caption := Query.Fields[0].AsString;
Query.Close;


 
sherminator   (2004-02-11 13:41) [9]

2Sandman25 ваще полный ноль в использовании SQL...(((((( надо устанавливать SQL сервер??? можно будет продолжать работать с Access файлом????


 
VLAD-MAL   (2004-02-11 13:44) [10]

Ну вы, блин, даете...


 
SPIRIT   (2004-02-11 13:45) [11]

надо книжку купить ...
Access поддерживает sql .. пользуйся и радуйся :))


 
Sandman25   (2004-02-11 13:45) [12]

[9] sherminator © (11.02.04 13:41)

Нет, Access сам является SQL сервером (в некотором роде).
Он вернет нужные данные.


 
sherminator   (2004-02-11 13:48) [13]

оки... респект... спасибо буду пробовать...


 
SPIRIT   (2004-02-11 13:49) [14]

кидай на форму *Query (в зависимости от подключения) связывай с TDataSource. На кнопочку выше приведенный текст и вперед на грабли :))


 
Fay   (2004-02-11 14:55) [15]

>> select dolgn from fldolgn where idul = :idul
ОМС или МНС ?


 
Mike Kouzmine   (2004-02-11 15:02) [16]

Сделай запрос в Аксесе, а на форме используй tadostoredproc


 
sherminator   (2004-02-11 16:12) [17]

Table1.First;
while not Table1.Eof do
begin
if Table1.FieldByName("INN").AsString = Edit1.Text
then
begin
Label3.Caption := Table1.FieldByName("IDUL").AsString;
idul := Table1.FieldByName("IDUL").AsString;
break;
end;
Table1.Next;
end;
Label5.Caption := Edit1.Text;
Table1.Close;

етишкина жизнь...(((((( а вот этот фрагмент как сделать средствами SQL???? первый пример, который привел не самый удачный оказался... имена полей в таблице и переменная совпадают... поэтому пояснение, которое было мне дано Sandman25 не могу разобрать...((((((


 
Sandman25   (2004-02-11 16:16) [18]

SELECT имяполя1 FROM имятаблицы WHERE имяполя2 = :любойидентификатор
Query.ParamByName("любойидентификатор").Asxxx := ...


 
Mike Kouzmine   (2004-02-11 16:17) [19]

А ты сделай мастер-детайл связь и все.


 
sherminator   (2004-02-11 16:19) [20]

Mike Kouzmine ты издеваешься надо мной да???? я сегодня первый раз юзать начал SQL...((((


 
Mike Kouzmine   (2004-02-11 16:21) [21]

А SQL и мастер-детайл две разные вещи.


 
sherminator   (2004-02-11 16:23) [22]

2Sandman25
Query.ParamByName("любойидентификатор").Asxxx := ...
это чему приравнивается???? справа, что должно стоять???? (вместо троеточия)


 
Johnmen   (2004-02-11 16:25) [23]

>я сегодня первый раз юзать начал SQL

Ну как всегда. Изучение начинается в вопросов...:(


 
Sandman25   (2004-02-11 16:26) [24]

[22] sherminator © (11.02.04 16:23)

Читайте книги. Delphi Help тоже подойдет.


 
Mike Kouzmine   (2004-02-11 16:27) [25]

Johnmen © (11.02.04 16:25) [23] Надо читать так >я сегодня первый раз юзать начал


 
Anatoly Podgoretsky   (2004-02-11 16:56) [26]

sherminator © (11.02.04 16:23) [22]
xxx



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

Форум: "Базы";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.009 c
1-25787
Layner
2004-02-26 09:23
2004.03.09
Мастера, посоветуйте, как сделать например 48 TEdit в цикле,


4-25967
amo
2004-01-04 15:45
2004.03.09
Почему в Win XP не работает EnumWindows


9-25679
Клочко Андрей
2002-08-10 13:44
2004.03.09
Алгоритм решения японского кроссворда


1-25764
К.К.С.
2004-02-26 15:58
2004.03.09
Работа с папками м файлами


14-25870
maeglah
2004-02-17 06:53
2004.03.09
svhost.exe





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