Fórum Criar procedures ou funções #405057

15/07/2011

0

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

Responder

Posts

15/07/2011

Alan Souza

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.
Responder

Gostei + 0

15/07/2011

Emerson Nascimento

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;


Responder

Gostei + 0

15/07/2011

Marcos Barbosa

Emerson, o resultado é mostrado no dbgrid.

Responder

Gostei + 0

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

Aceitar