Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #61  
Старый 06.12.2012, 13:49
Аватар для spawn-1212
spawn-1212 spawn-1212 вне форума
Прохожий
 
Регистрация: 03.12.2012
Сообщения: 25
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Нужно делать всё на чём-то одном. Если для запросов используешь BDE-шную TQuery, то и для простого открытия используй BDE-шную TTable. Только я не знаю, нужно ли тебе связываться с BDE только для того чтобы просто отфильтровать записи по дате.
А можно сделать запрос, без Qurey? т.е. с помощью чего можно ещё его сделать?
Ответить с цитированием
  #62  
Старый 06.12.2012, 14:37
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от spawn-1212
А можно сделать запрос, без Qurey? т.е. с помощью чего можно ещё его сделать?
Тогда обычными фильтрами.
Хотя я смотрю что компонент TDBF не поддерживает свойство Filter, но поддерживает обработчик OnFilterRecord - вот на него и нужно цеплять фильтр.
А ещё к тому же компонент TDBF не поддерживает Null в полях типа Дата/Время.
Ответить с цитированием
  #63  
Старый 07.12.2012, 12:16
Аватар для spawn-1212
spawn-1212 spawn-1212 вне форума
Прохожий
 
Регистрация: 03.12.2012
Сообщения: 25
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Тогда обычными фильтрами.
Хотя я смотрю что компонент TDBF не поддерживает свойство Filter, но поддерживает обработчик OnFilterRecord - вот на него и нужно цеплять фильтр.
А ещё к тому же компонент TDBF не поддерживает Null в полях типа Дата/Время.
А можешь по подробней объяснить, лучше на примере или в моём исходнике как его применить?
Ответить с цитированием
  #64  
Старый 07.12.2012, 14:34
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от spawn-1212
А можешь по подробней объяснить, лучше на примере или в моём исходнике как его применить?
Если бы компонент TDbf поддерживал свойство Filter и значение NULL в полях типа Дата/Время, то можно было бы сделать так:
Код:
procedure TForm1.ButtonClick(Sender: TObject);
begin
  FDBF.Filtered := False;
  FDBF.Filter := 'R069 IS NULL';
  FDBF.Filtered := True;
end;
Но так как это свойство TDbf не поддерживает, то приходится использовать событие OnFilterRecord:
Код:
procedure TForm1.FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
  Accept := not DataSet.Filtered or DataSet.FieldByName('R069').IsNull;
end;
Но это работать не будет, потому что TDbf не поддерживает значение NULL в полях типа Дата/Время, а вместо этого отображает их как '01.01.1900'.
Поэтому чтобы отобрать только те записи которые имеют "пустое" значение в поле 'R069' делаем так:
Код:
procedure TForm1.FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
  Accept := not DataSet.Filtered or (DataSet.FieldByName('R069').AsDateTime = EncodeDate(1900, 1, 1));
end;
Где вместо "EncodeDate(..." можно просто подставить константу 2.
Ответить с цитированием
  #65  
Старый 10.12.2012, 10:38
Аватар для spawn-1212
spawn-1212 spawn-1212 вне форума
Прохожий
 
Регистрация: 03.12.2012
Сообщения: 25
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Но это работать не будет, потому что TDbf не поддерживает значение NULL в полях типа Дата/Время, а вместо этого отображает их как '01.01.1900'.
Поэтому чтобы отобрать только те записи которые имеют "пустое" значение в поле 'R069' делаем так:
Код:
procedure TForm1.FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
  Accept := not DataSet.Filtered or (DataSet.FieldByName('R069').AsDateTime = EncodeDate(1900, 1, 1));
end;
Где вместо "EncodeDate(..." можно просто подставить константу 2.
Так в какой момент она мне будет фильтровать поля? В момент нажатия кнопки ФИЛЬТР, да? Как изменить код, чтобы фильтр работал при нажатии на кнопку2(Пуск), а лучше конечно чтобы при добавлении БД, нажатии кнопки1(Открыть БД) ?
И что означает вместо "EncodeDate(..." можно просто подставить константу 2?

Последний раз редактировалось spawn-1212, 10.12.2012 в 10:53.
Ответить с цитированием
  #66  
Старый 17.12.2012, 13:28
Аватар для spawn-1212
spawn-1212 spawn-1212 вне форума
Прохожий
 
Регистрация: 03.12.2012
Сообщения: 25
Репутация: 10
По умолчанию

Не получается у меня, даже кнопкой фильтр неправильно работает...
помогите плиз, на работе долбают нужно очеень
Ответить с цитированием
  #67  
Старый 20.12.2012, 09:04
Аватар для spawn-1212
spawn-1212 spawn-1212 вне форума
Прохожий
 
Регистрация: 03.12.2012
Сообщения: 25
Репутация: 10
По умолчанию

Переделал я программку, отказавшись от openDialog? но фильтр всё-равно не могу сделать подскажите пжл как (у меня список, нужно вывести все строки, в которых нет даты в столбце R069 + вывести столбы RFA(фамилия), RIM(имя) при нажатии кнопки1)
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ADODB, DB, Grids, DBGrids, StdCtrls;

type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    ADOConnection1: TADOConnection;
    ADOTable1: TADOTable;
    ADOQuery1: TADOQuery;
    ListBox1: TListBox;
    ComboBox1: TComboBox;
    Label1: TLabel;
    Button1: TButton;
    procedure ListBox1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  AppFolderPath: String;


implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
 var fs:TSearchRec;
 begin
  Label1.Caption:='Aua?aou aaco';
  AppFolderPath:=copy(ExtractFilePath(Application.ExeName),1,length(ExtractFilePath(Application.ExeName)))+'BD';
  ComboBox1.ItemIndex:=0;
  if FindFirst(AppFolderPath+'\*.dbf', faAnyFile, fs)=0 then
  repeat
     ListBox1.AddItem(fs.Name,nil);
  until FindNext(fs)<>0;
  FindClose(fs);
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
i: Integer;
begin
ADOTable1.Active:= false;
ADOConnection1.Connected:=false;
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source="' +AppFolderPath + '";Extended Properties="DBASE IV;";"';
    ADOConnection1.LoginPrompt:=False;
    ADOConnection1.Mode:=cmRead;
    ADOConnection1.Connected:=True;
    DataSource1.DataSet:=ADOTable1;
    ComboBox1.Items.Clear;
  ADOConnection1.Connected:=True;
    ADOTable1.TableName:=ListBox1.Items[ListBox1.ItemIndex];
    ADOTable1.Active:=True;
   ComboBox1.ItemIndex:=ADOTable1.FieldCount;
    for i:= 1 to (ADOTable1.FieldCount - 1) do
    //While not IntToStr(ADOTable1.FieldCount) do
    begin
       ComboBox1.Items.Add(ADOTable1.Fields[i].FieldName);
    //   ADOQuery1.Next;
    end;
    DBGrid1.DataSource:=DataSource1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ADOTable1.Active:=False;
  ADOQuery1.SQL.Text:= 'Select RFA From KADRY_.DBF Where R069 is null';
  ADOQuery1.Active:= True;
end;

end.

Последний раз редактировалось spawn-1212, 20.12.2012 в 14:35.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:44.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2020

ВКонтакте   Facebook   Twitter