Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.09;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.02 c
7-25947
LordBTR
2003-12-17 11:51
2004.03.09
Группы пользователей домена


8-25827
arcoant
2003-09-19 22:45
2004.03.09
OpenGL - Shadows


4-25970
БВВ
2004-01-02 17:44
2004.03.09
Сообщения Windows


14-25878
Makhanev A.S.
2004-02-16 22:25
2004.03.09
Не ловятся messages в невидимом окне безформенного проекта...


14-25894
ИМХО
2004-02-16 03:23
2004.03.09
В чем причина феноменального успеха Microsoft Corp.?