Fórum Propriedade Filter de uma AdoTable em dois campos (s/ SQL) #251300
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
Curtir tópico
+ 0Posts
21/09/2004
Douglas Bitencourt
Gostei + 0
21/09/2004
Douglas Bitencourt
Gostei + 0
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!
Gostei + 0
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!
Gostei + 0
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);
Gostei + 0
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!!!
Gostei + 0
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.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)