Criar procedures ou funções

Delphi

15/07/2011

Galera, tenho uma instrução de consulta que se repetem várias vezes ao longo do sistema e até mesmo dentro de um mesmo formulário, então gostaria de colocar isso dentro de funções ou procedures. Dá forma que estou fazendo dá dando sempre erro.
Dentro do mesmo formulário eu criei uma procedure. Segue como estou fazendo:
....
private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frm_consulta_MG: Tfrm_consulta_MG;

   procedure Seleciona_MG;

implementation

uses U_DM_MG;

private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frm_consulta_MG: Tfrm_consulta_MG;

   procedure Seleciona_MG;

implementation

uses U_DM_MG, U_Funcoes;

{$R *.dfm}

procedure Tfrm_consulta_MG.nomeChange(Sender: TObject);
begin
  Seleciona_MG();
End;

// AKI Acontece o erro -> Undeclared idetifier  CDS_Consulta_MG.

procedure Seleciona_MG;
  Begin
   CDS_Consulta_MG.Active:=False;

   QR_Consulta_MG.Close;
   QR_Consulta_MG.SQL.Clear;
   QR_Consulta_MG.SQL.Add('SELECT e.ID, e.IDPACIENTE, e.DATA, e.HORA, e.NUMEROEXAME, e.ID_INTERNO, e.LAUDO , p.ID,  p.NOME');
   QR_Consulta_MG.SQL.Add('FROM EXAMES e, PACIENTES p');
   QR_Consulta_MG.SQL.Add('WHERE e.IDPACIENTE = p.ID');
   QR_Consulta_MG.SQL.Add('AND UPPER(p.nome) LIKE '''+'' + nome.Text +'%''');
   QR_Consulta_MG.SQL.Add('AND data BETWEEN :data_ini AND :data_fim');

   QR_Consulta_MG.SQL.Add('ORDER BY e.DATA, e.HORA, p.nome');

   QR_Consulta_MG.Params.ParamByName('data_ini').AsString := FormatDateTime('MM/DD/YYYY', dtp_Data_ini.Date);
   QR_Consulta_MG.Params.ParamByName('data_fim').AsString := FormatDateTime('MM/DD/YYYY', dtp_Data_fim.Date);

   QR_Consulta_MG.Open;
   CDS_Consulta_MG.Active:=True;
  End;


Se alguém puder me ajudar eu agradeço
Marcos Barbosa

Marcos Barbosa

Curtidas 0

Respostas

Alan Souza

Alan Souza

15/07/2011

procura declara assim:
procedure Tfrm_Consulta_MG.Seleciona_MG;

parece que o erro está no escopo, pq ele não consegue acessar o CDS_Consulta_MG.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

15/07/2011

sugiro a você criar esta função dentro do seu DM, visto que os forms que farão a consulta deverão acessá-lo.

procedure TDM_MG.Seleciona_MG;
begin
   CDS_Consulta_MG.Close;
   CDS_Consulta_MG.CommandText :=
     'SELECT e.ID, e.IDPACIENTE, e.DATA, e.HORA, e.NUMEROEXAME, e.ID_INTERNO, e.LAUDO , p.ID,  p.NOME'+
     'FROM EXAMES e, PACIENTES p'+
     'WHERE e.IDPACIENTE = p.ID'+
     ' AND UPPER(p.nome) LIKE '+QuotedStr(nome.Text +'%')+
     ' AND data BETWEEN :data_ini AND :data_fim'+
     ' ORDER BY e.DATA, e.HORA, p.nome';
   CDS_Consulta_MG.Params.ParamByName('data_ini').AsString := FormatDateTime('MM/DD/YYYY', dtp_Data_ini.Date);
   CDS_Consulta_MG.Params.ParamByName('data_fim').AsString := FormatDateTime('MM/DD/YYYY', dtp_Data_fim.Date);
   CDS_Consulta_MG.Open;
end;

você precisará instanciar o componente CDS_Consulta_MG no seu DM ou na própria procedure, em tempo de projeto.

mas não entendi qual o resultado disso... será exibido numa grade?

se você explicar o que vai fazer com o resultado desta pesquisa poderemos te dar uma resposta mais objetiva.



de qualquer forma achei estranho seu fonte. deveria ser algo como (note que não há repetições de implementation ou das declarações private, public...):

....
private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frm_consulta_MG: Tfrm_consulta_MG;

procedure Seleciona_MG;

implementation

uses U_DM_MG, U_Funcoes;

{$R *.dfm}

procedure Tfrm_consulta_MG.nomeChange(Sender: TObject);
begin
  Seleciona_MG();
End;

// AKI Acontece o erro -> Undeclared idetifier CDS_Consulta_MG.

procedure Seleciona_MG;
  Begin
   CDS_Consulta_MG.Active:=False;

   QR_Consulta_MG.Close;
   QR_Consulta_MG.SQL.Clear;
   QR_Consulta_MG.SQL.Add('SELECT e.ID, e.IDPACIENTE, e.DATA, e.HORA, e.NUMEROEXAME, e.ID_INTERNO, e.LAUDO , p.ID,  p.NOME');
   QR_Consulta_MG.SQL.Add('FROM EXAMES e, PACIENTES p');
   QR_Consulta_MG.SQL.Add('WHERE e.IDPACIENTE = p.ID');
   QR_Consulta_MG.SQL.Add('AND UPPER(p.nome) LIKE '''+'' + nome.Text +'%''');
   QR_Consulta_MG.SQL.Add('AND data BETWEEN :data_ini AND :data_fim');

   QR_Consulta_MG.SQL.Add('ORDER BY e.DATA, e.HORA, p.nome');

   QR_Consulta_MG.Params.ParamByName('data_ini').AsString := FormatDateTime('MM/DD/YYYY', dtp_Data_ini.Date);
   QR_Consulta_MG.Params.ParamByName('data_fim').AsString := FormatDateTime('MM/DD/YYYY', dtp_Data_fim.Date);

   QR_Consulta_MG.Open;
   CDS_Consulta_MG.Active:=True;
  End;


GOSTEI 0
Marcos Barbosa

Marcos Barbosa

15/07/2011

Emerson, o resultado é mostrado no dbgrid.

GOSTEI 0
POSTAR