Array
(
)

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

Drmoon
   - 21 set 2004

Caros,

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

o seguinte funciona:
#Código



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



tentei fazer isso:

#Código


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:

Citação:
´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
   - 21 set 2004

SOBE


Drmoon
   - 21 set 2004

SOBE (to enrascado) só com SQL??


Sandra
   - 21 set 2004

Douglas,

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

Seria algo como:
#Código

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


Ou então:
#Código
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!


Drmoon
   - 21 set 2004

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:

#Código


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



to lascado!


Sandra
   - 21 set 2004

Douglas,

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

E se tirar as chaves, será que funcionaria? Assim:
#Código

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



Drmoon
   - 21 set 2004

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!!!


Drmoon
   - 26 set 2004

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.

#Código

//Filtro.dpr
program Filtro;

uses
Forms,
uFiltro in ´uFiltro.pas´ {FormFiltro};

{$R *.res}

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


#Código
//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.


#Código
//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.