Как сделать поиск по заданой цифре в StringGrid и файловой базой?

Всем привет.

Есть две задачи:
1. Найти список сотрудников, чьи телефоны начинаются с заданной цифры;
2. Найти адрес сотрудника по номеру его телефона.

Вторую задачу решил таким образом:

unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TForm4 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Label3: TLabel;
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm4.BitBtn2Click(Sender: TObject);
begin
  Close;
end;

procedure TForm4.BitBtn1Click(Sender: TObject);
begin
  label3.Caption := '';
  i := 0;
  if Kol <> 0 then
  while i <> Form1.StringGrid1.RowCount do
  begin
    if Edit1.Text = Form1.StringGrid1.Cells[2,i] then
        label3.Caption:=Form1.StringGrid1.Cells[3,i];
    inc(i);
  end;
  if label3.Caption = '' then ShowMessage('Такого телефона не существует!');
end;

end.


Помогите пожалуйста с решением первой задачи, не могу сделать, попытался что то вроде такого, но ошибки при компиляции не выдает, при этом не работает:

unit Unit6;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids;

type
  TForm6 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Label3: TLabel;
    StringGrid2: TStringGrid;
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form6: TForm6;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm6.BitBtn2Click(Sender: TObject);
begin
  Close;
end;

procedure TForm6.BitBtn1Click(Sender: TObject);
var
 i : integer;
begin
 for i := Form1.StringGrid1.FixedRows to Form1.StringGrid1.RowCount - 1 do
 if Form1.StringGrid1.Cells[2, i] = Edit1.Text
  then begin
        StringGrid2.Rows[StringGrid2.RowCount - 1].CommaText := Form1.StringGrid1.Rows[i].CommaText;
        StringGrid2.RowCount := StringGrid2.RowCount + 1;
       end;
end;

end.
  • Вопрос задан
  • 334 просмотра
Пригласить эксперта
Ответы на вопрос 2
@kalapanga
Судя по коду Вы хотите вывести результат в StringGrid2. Во-первых, у Вас не определено исходное состояние этого грида - есть в нём что-то или нет. Я бы его для начала очистил. Далее поменяйте строчки местами - сначала увеличивайте количество строк, а затем только пишите в новую строку содержимое. Сейчас не могу проверить, но по-моему, обращение по несуществующему номеру строки ошибки не вызывает, но и практического результата не даёт, что у Вас скорее всего и происходит.
Ну и то, что написано, не совсем отражает задачу. Вы пишете о поиске по первой цифре, а проверяете на равенство строк. Возможно Вы это ещё просто не сделали.
Ответ написан
Комментировать
tsklab
@tsklab
Здесь отвечаю на вопросы.
Для Delphi существует универсальный ответ: используйте компонент, который может делать то, что вам нужно ("всё уже украдено до вас").
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы