quarta-feira, 9 de setembro de 2015
segunda-feira, 7 de setembro de 2015
quinta-feira, 20 de agosto de 2015
Adicionar o evento OnClick no DBGrid
Problema:
Meu programa precisa processar algo quando o usuário clicar no DBGrid em um determinado form. O problema é que o DBGrid não possui o evento OnClick. É possível adicionar este evento no DBGrid?
Solução:
É possível sim. Afinal é muito simples. Siga os passos abaixo para resolver seu problema:
- Monte seu form normalmente, colocando o DBGrid e demais componentes;
- Vá na seção "private" da unit e declare a procedure abaixo:
private
procedure DBGridClick(Sender: TObject);
- Logo após a palavra "implementation", escreva a procedure:
implementation
{$R *.DFM}
procedure TForm1.DBGridClick(Sender: TObject);
begin
ShowMessage('Clicou no DBGrid.');
end;
- Coloque as instruções abaixo no evento OnCreate do Form:
procedure TForm1.FormCreate(Sender: TObject);
begin
DBGrid1.ControlStyle :=
DBGrid1.ControlStyle + [csClickEvents];
TForm(DBGrid1).OnClick := DBGridClick;
end;
- E pronto. Execute e teste.
Observações
O segredo principal desta dica está OnCreate do Form. A primeira instrução ativa o evento OnClick. A segunda instrução acessa o manipulador do evento OnClick. Para isto precisamos tratar o DBGrid como se fosse Form, pois o evento OnClick está declarado como protegido (protected) na classe TDBGrid.
segunda-feira, 17 de agosto de 2015
Consultando entre datas utilizando SQL
Coloque no formulário dois componentes TDateTimePicker, um TDbgrid e um TButton. Ligue seu TDbgrid a tabela do teu banco que queres aplicar a consulta, e no evento onclic do compoenente TButton adicione o código abaixo.
If DateTimePicker2.Date < DateTimePicker1.Date Then
begin
ShowMessage('Intervalo de datas inválido, a data inicial é maior que a data final!');
DateTimePicker2.Date := DateTimePicker1.Date;
end
Else
begin
Inicio := DateToStr(DateTimePicker1.Date);
Final := DateToStr(DateTimePicker2.Date);
Query1.Close;
Query1.SQL.Clear;
//Campos utilizados somente para exemplo. Utilize os campos que achar necessário apresentação
//em seu Dbgrid
Query1.SQL.Text := 'SELECT Nome,Empresa,FoneRes,FoneCom,Mala FROM Contatos
WHERE Data >=:pInicial and Data<=:pFinal ORDER BY Nome';
Query1.ParamByName('pInicial').AsDateTime := StrToDate(Inicio);
Query1.ParamByName('pFinal').AsDateTime := StrToDate(Final);
Query1.Prepare;
Query1.Open;
DBGrid.SetFocus;
end;
Label3.Caption := 'Total de contatos: ' + IntToStr(Query1.RecordCount) ;
If DateTimePicker2.Date < DateTimePicker1.Date Then
begin
ShowMessage('Intervalo de datas inválido, a data inicial é maior que a data final!');
DateTimePicker2.Date := DateTimePicker1.Date;
end
Else
begin
Inicio := DateToStr(DateTimePicker1.Date);
Final := DateToStr(DateTimePicker2.Date);
Query1.Close;
Query1.SQL.Clear;
//Campos utilizados somente para exemplo. Utilize os campos que achar necessário apresentação
//em seu Dbgrid
Query1.SQL.Text := 'SELECT Nome,Empresa,FoneRes,FoneCom,Mala FROM Contatos
WHERE Data >=:pInicial and Data<=:pFinal ORDER BY Nome';
Query1.ParamByName('pInicial').AsDateTime := StrToDate(Inicio);
Query1.ParamByName('pFinal').AsDateTime := StrToDate(Final);
Query1.Prepare;
Query1.Open;
DBGrid.SetFocus;
end;
Label3.Caption := 'Total de contatos: ' + IntToStr(Query1.RecordCount) ;
Consulta SQL que usa a data do sistema
Problema:
Preciso fazer uma consulta com SQL que me retorne todos os registros em que o valor de um campo do tipo data seja igual ou anterior à dada do sistema. Como fazer?
Solução:
Query.Close;
Query.SQL.Text := 'select * from Tabela where CampoData <= :Hoje';
Query.ParamByName('Hoje').AsDate := Date;
Query.Open;
Bloco PL/SQL para inserção de dados
Pergunta
Criar um bloco pl/sql que insira um novo dep na tabela s_dept
- use a sequencia s_dept_id para o campo id da tabela
- solicite ao usuario o nome do dep
- insira valores nulos p/ o campo region_id
Resposta
-> no banco de dados...
create or replace
procedure insere_departamento (v_nome char) is
v_id number;
begin
SELECT sequenciaID.NEXTVAL INTO v_id FROM DUAL;
insert into tabela (id,dep,region_id)
values (v_id,v_nome,null);
end insere_departamento;
-> no delphi...
- coloque o objeto TStoredProc dentro do formulario que ira disparar esta procedure;
- no evento que voce quiser que dispare coloque o seguinte codigo:
var
v_nome : String[50];
begin
{caso vc queira informar o nome do departamento atraves de uma caixa de dialogo}
V_nome := inputbox('Informe o nome do departamento.','Depto:','');
{caso vc queira buscar o nome atraves de um TEdit já preenchido}
end;
Assinar:
Comentários (Atom)
-
function GetIP:string;//--> Declare a Winsock na clausula uses da unit var WSAData: TWSAData; HostEnt: PHostEnt; Name:string; begin...