Propriedade Filter de uma AdoTable em dois campos (s/ SQL)
21/09/2004
0
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:
Alguem pode me ajudar?
Obrigado desde já.
Douglas
Douglas Bitencourt
Posts
21/09/2004
Sandra
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!
21/09/2004
Douglas Bitencourt
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!
21/09/2004
Sandra
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);
21/09/2004
Douglas Bitencourt
´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!!!
26/09/2004
Douglas Bitencourt
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.
Clique aqui para fazer login e interagir na Comunidade :)