Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2014, 11:51   #1
Лера.К
Пользователь
 
Регистрация: 28.04.2014
Сообщений: 14
По умолчанию Поиск записи по нескольким полям

В Edit1 ввожу индекс и по этому условию находит Область, Город и улицу:
if Edit1.Text <> '' then
ADOTable1.Locate('индекс',Edit1.Tex t,[loPartialKey,loCaseInsensitive]);
А вот чтобы по области, городу и улице находил индекс не получается.
При поиске по нескольким полям ищет по последнему полю, помогите пожалуйста
Лера.К вне форума Ответить с цитированием
Старый 04.05.2014, 12:32   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
      if ADOTable1.Locate('fieldname1;fieldname2;fieldname3',VarArrayOf([value1,value2,value3]),[]) then ...
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.05.2014, 10:57   #3
Лера.К
Пользователь
 
Регистрация: 28.04.2014
Сообщений: 14
По умолчанию

Вылезла такая ошибка, это может быть из-за того что слишком большой объём БД Access?

Лера.К вне форума Ответить с цитированием
Старый 05.05.2014, 11:00   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

зачем же вы всю базу в память пихаете?
eval вне форума Ответить с цитированием
Старый 05.05.2014, 11:08   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Возможно, а может и в проге супер-пупер массивы объявлены. А какой объем той таблицы? В мегабайтах. С помощью чего соединяетесь с базой?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.05.2014, 11:28   #6
Лера.К
Пользователь
 
Регистрация: 28.04.2014
Сообщений: 14
По умолчанию

Таблица очень большая 72,6 мб (более 300 тыс записей)
Соединение с помощью ADOConnection, ADOTable и DataSource.
Я только учусь работать с БД в Delphi , поэтому заранее извиняюсь за возможно глупые вопросы)
Лера.К вне форума Ответить с цитированием
Старый 05.05.2014, 11:31   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

ADOTable выбросить и забыть, использовать ADOCommand
пользователю показываьб только то что ему надо, 72,6 мб ему явно не надо, он пошлет куда подальше и будет прав
eval вне форума Ответить с цитированием
Старый 05.05.2014, 11:31   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
С помощью чего соединяетесь с базой?
Ну то, что ADOConnection, я догадался Строку соединения покажите. И 70Мб далеко не очень большая база. И про возможные массивы в памяти ни чего не ответили
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.05.2014, 12:17   #9
Лера.К
Пользователь
 
Регистрация: 28.04.2014
Сообщений: 14
По умолчанию

Я в общем просто всё от начала до конца кидаю, но тут наверняка много ошибок
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, DB, ADODB, StdCtrls, DBCtrls, Buttons;

type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ADOTable1: TADOTable;
    DataSource1: TDataSource;
    DBText1: TDBText;
    DBText2: TDBText;
    DBText3: TDBText;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    DBText4: TDBText;
    BitBtn1: TBitBtn;
    procedure Edit1Change(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);
begin
If Edit1.Text <> '' then
ADOTable1.Locate('Index', Edit1.Text,[loPartialKey, loCaseInsensitive]);
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if ADOTable1.Locate('Oblast;Gorod;Ulica',VarArrayOf([Edit2.Text, Edit3.Text, Edit4.Text]),[loPartialKey, loCaseInsensitive]) then
begin
ADOTable1.Locate('Index', Edit1.Text,[loPartialKey, loCaseInsensitive]);
end;
end;
end.
Ещё я добавляла Form2, тоже на всякий случай кидаю, вдруг что не так
Код:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Form2.Update;
  Form2.ShowModal;
  Application.Run;
end.

Последний раз редактировалось Stilet; 05.05.2014 в 13:33.
Лера.К вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск по нескольким полям soctellad PHP 8 02.09.2013 15:30
Фильтрация по нескольким полям Neksion Помощь студентам 12 07.06.2013 14:25
Поиск Locate по нескольким полям athleet Общие вопросы Delphi 5 22.05.2011 15:34
Осуществить поиск записей по двум символьным полям. Найденные записи отобразить на втором листе мария2507 Microsoft Office Excel 11 17.01.2010 15:36