Propriedade Filter de uma AdoTable em dois campos (s/ SQL)

21/09/2004

Caros,

Como faço para concatenar dois campos na string da propriedade Filter da minha tabela?
Uso AdoTable.

o seguinte funciona:

with dmExp.tblLancContas do
begin
    Filter:=´[NOMEBCO&93;=´+QuotEdStr(cbLancContasBancos.Text);
    Filtered := true;
end;



tentei fazer isso:


with dmExp.tblLancContas do
begin
    Filter:=´&91;NOMEBCO&93;=´+QuotEdStr(cbLancContasBancos.Text)+´&91;DATA&93;=´+DatetoStr(dtpLancContasData.Date);
    Filtered := true;
end;



que não funcionou e dá o seguinte erro:
´Arguments are of the wrong type, are of the acceptable range, or are in conflict with one another´


Alguem pode me ajudar?

Obrigado desde já.

Douglas


Drmoon

Respostas

21/09/2004

Drmoon

SOBE


Responder Citar

21/09/2004

Drmoon

SOBE (to enrascado) só com SQL??


Responder Citar

21/09/2004

Sandra

Douglas,

Experimente colocar um espaço entre o [b:92bdaf0d1e]+´[/b:92bdaf0d1e] e [b:92bdaf0d1e][DATA][/b:92bdaf0d1e]. Parece que, ao concatenar o 1º com o 2º parâmetro, eles estão ´emendados´.

Seria algo como:
with dmExp.tblLancContas do 
begin 
    Filter:=´[NOMEBCO&93;=´+QuotEdStr(cbLancContasBancos.Text)+´ &91;DATA&93;=´+DatetoStr(dtpLancContasData.Date); 
    Filtered := true; 
end; 


Ou então:
with dmExp.tblLancContas do 
begin 
    Filter:=´&91;NOMEBCO&93;=´+QuotEdStr(cbLancContasBancos.Text)+ ´ ´ +´&91;DATA&93;=´+DatetoStr(dtpLancContasData.Date); 
    Filtered := true; 
end; 


Faça o teste e veja se resolve. Boa sorte!


Responder Citar

21/09/2004

Drmoon

Olá Sandra,

infelizmente não funcionou.
´os arqumentos são incorretos, estão fora do intervalo aceitável ou estão em conflito´.

tentei assim tb e não funcionou:

Filter:=´[NOMEBCO&93;=´+QuotEdStr(cbLancContasBancos.Text)+ ´ and &91;DATA&93;=´+DatetoStr(dtpLancContasData.Date);



to lascado!


Responder Citar

21/09/2004

Sandra

Douglas,

O [NOMEBCO] e [DATA] são campos da tabela, certo?

E se tirar as chaves, será que funcionaria? Assim:
Filter:=´NOMEBCO = ´+QuotEdStr(cbLancContasBancos.Text)+ ´ and DATA = ´+DatetoStr(dtpLancContasData.Date); 



Responder Citar

21/09/2004

Drmoon

Sandra,

´O item não pode ser encontrado na coleção correspondente ao nome ou ao ordinal solicitado´

eu já li que não posso dar espaços entre o campo e o sinal de igualdade e a string, mas não consigo encontrar nada que fale de concatenar dois campos. eu to tentando fazer assim pra não ter que reescrever o código QUASE todo!!!


Responder Citar

26/09/2004

Drmoon

Caros,

Achei a seguinte solução para o meu problema com filtros.
Uma vez que não queria usar SQL para a realização de uma filtragem em dois campos de uma mesma tabela (a saber: data e nomebanco), encontrei a seguinte solução:

Apresento o código das units completo, inclusive do form de exemplo.
Exemplo retirado do livro Delphi 7 Curso completo.

//Filtro.dpr
program Filtro;

uses
  Forms,
  uFiltro in ´uFiltro.pas´ ;

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TFormFiltro, FormFiltro);
  Application.Run;
end.


//uFiltro.pas
unit uFiltro;

interface

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

type
  TFormFiltro = class(TForm)
    Table1: TTable;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    BotaoFechar: TBitBtn;
    ComboBox1: TComboBox;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    Table1EmpNo: TIntegerField;
    Table1LastName: TStringField;
    Table1FirstName: TStringField;
    Table1PhoneExt: TStringField;
    Table1HireDate: TDateTimeField;
    Table1Salary: TFloatField;
    procedure FormCreate(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
    procedure ComboBox1Change(Sender: TObject);
    procedure CheckBox2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormFiltro: TFormFiltro;

implementation

{$R *.dfm}

procedure TFormFiltro.FormCreate(Sender: TObject);
begin
    ComboBox1.ItemIndex := 0;
end;

procedure TFormFiltro.CheckBox1Click(Sender: TObject);
begin
    Table1.Filtered := CheckBox1.Checked;
end;

procedure TFormFiltro.Table1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
var
Dia, Mes, Ano : word;
begin
    DecodeDate(Table1.FieldByName(´HireDate´).AsDateTime,Ano,Mes,Dia);
    Accept := (Mes - ComboBox1.ItemIndex = 1) and (Table1Salary.Value = 25050);
    //este filtro funcionou para mais de um campo
end;

procedure TFormFiltro.ComboBox1Change(Sender: TObject);
begin
    Table1.Refresh;
end;

procedure TFormFiltro.CheckBox2Click(Sender: TObject);
begin
    Table1.IndexName := ´ByName´;
end;

end.


//FORMULÁRIO
object FormFiltro: TFormFiltro
  Left = 422
  Top = 656
  Width = 640
  Height = 260
  Caption = ´ Exemplo de definição de Filtros em Run-Time´
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = ´MS Sans Serif´
  Font.Style = [&93;
  OldCreateOrder = False
  Position = poScreenCenter
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object DBGrid1: TDBGrid
    Left = 6
    Top = 8
    Width = 619
    Height = 112
    DataSource = DataSource1
    TabOrder = 0
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = ´MS Sans Serif´
    TitleFont.Style = &91;&93;
  end
  object BotaoFechar: TBitBtn
    Left = 320
    Top = 150
    Width = 75
    Height = 25
    Caption = ´&Fechar´
    TabOrder = 1
    Kind = bkClose
  end
  object ComboBox1: TComboBox
    Left = 60
    Top = 144
    Width = 100
    Height = 21
    Style = csDropDownList
    ItemHeight = 13
    TabOrder = 2
    OnChange = ComboBox1Change
    Items.Strings = (
      ´Janeiro´
      ´Fevereiro´
      ´Março´
      ´Abril´
      ´Maio´
      ´Junho´
      ´Julho´
      ´Agosto´
      ´Setembro´
      ´Outubro´
      ´Novembro´
      ´Dezembro´)
  end
  object CheckBox1: TCheckBox
    Left = 184
    Top = 144
    Width = 97
    Height = 17
    Caption = ´Aplicar Filtro´
    TabOrder = 3
    OnClick = CheckBox1Click
  end
  object CheckBox2: TCheckBox
    Left = 184
    Top = 176
    Width = 97
    Height = 17
    Caption = ´CheckBox2´
    TabOrder = 4
    OnClick = CheckBox2Click
  end
  object Table1: TTable
    Active = True
    DatabaseName = ´DBDEMOS´
    OnFilterRecord = Table1FilterRecord
    TableName = ´employee.db´
    Left = 16
    Top = 192
    object Table1EmpNo: TIntegerField
      FieldName = ´EmpNo´
    end
    object Table1LastName: TStringField
      FieldName = ´LastName´
    end
    object Table1FirstName: TStringField
      FieldName = ´FirstName´
      Size = 15
    end
    object Table1PhoneExt: TStringField
      FieldName = ´PhoneExt´
      Size = 4
    end
    object Table1HireDate: TDateTimeField
      FieldName = ´HireDate´
    end
    object Table1Salary: TFloatField
      FieldName = ´Salary´
    end
  end
  object DataSource1: TDataSource
    DataSet = Table1
    Left = 48
    Top = 192
  end
end



[]s

Douglas.


Responder Citar