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

21/09/2004

0

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]=´+QuotEdStr(cbLancContasBancos.Text);
    Filtered := true;
end;



tentei fazer isso:


with dmExp.tblLancContas do
begin
    Filter:=´[NOMEBCO]=´+QuotEdStr(cbLancContasBancos.Text)+´[DATA]=´+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


Douglas Bitencourt

Douglas Bitencourt

Responder

Posts

21/09/2004

Douglas Bitencourt

SOBE


Responder

21/09/2004

Douglas Bitencourt

SOBE (to enrascado) só com SQL??


Responder

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]=´+QuotEdStr(cbLancContasBancos.Text)+´ [DATA]=´+DatetoStr(dtpLancContasData.Date); 
    Filtered := true; 
end; 


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


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


Responder

21/09/2004

Douglas Bitencourt

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]=´+QuotEdStr(cbLancContasBancos.Text)+ ´ and [DATA]=´+DatetoStr(dtpLancContasData.Date);



to lascado!


Responder

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

21/09/2004

Douglas Bitencourt

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

26/09/2004

Douglas Bitencourt

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 = []
  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 = []
  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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar