conexao TADOQuery em uma dbgrid
03/10/2024
0
faço a consulta no botão pesquisar mas, quando dois cliques na dbrigd pra capturar os campos e lançar nos edits não reconhece mais a conexão.
tenho que toda vez criar uma variável no botão em questão, dar um create pra que seja reconhecida. Ao dar o create a pesquisa anterior realizada já não existe mais, tendo que fazer uma nova consulta.
gostaria de saber se tem alguma forma de não precisar criar variável de conexão toda hora e aproveitar a consulta anteriormente realizada.
Cristiane
Posts
03/10/2024
Raimundo Pereira
faço a consulta no botão pesquisar mas, quando dois cliques na dbrigd pra capturar os campos e lançar nos edits não reconhece mais a conexão.
tenho que toda vez criar uma variável no botão em questão, dar um create pra que seja reconhecida. Ao dar o create a pesquisa anterior realizada já não existe mais, tendo que fazer uma nova consulta.
gostaria de saber se tem alguma forma de não precisar criar variável de conexão toda hora e aproveitar a consulta anteriormente realizada.
Boa tarde Cristiane,
Post a rotina para analisarmos
03/10/2024
Cristiane
var conexao:TFrmConexao;
begin
conexao := TFrmConexao.Create(self);
conexao.PesquisaLancamento.Close;
conexao.PesquisaLancamento.SQL.Clear;
conexao.PesquisaLancamento.SQL.Add('select l.*, t.descricao as tipo, fp.descricao as forma, d.descricao as despesa from lancamento l ' +
'inner join tipomovimento t on t.tipoId = l.tipoId ' +
'inner join formapagamento fp on fp.formaId = l.formaId ' +
'left join despesa d on d.despesaId = l.despesaId');
conexao.PesquisaLancamento.SQL.Add(' where data between ' + QuotedStr(MaskEdit2.Text) + ' and ' + QuotedStr(MaskEdit3.Text) + ' order by data desc' );
conexao.PesquisaLancamento.Open;
end;
procedure TFrmLancamento.carregarCampos;
var conexao:TFrmConexao;
begin
conexao := TFrmConexao.Create(self);
MaskEdit1.Text := DateToStr(conexao.PesquisaLancamentodata.Value);
Edit2.Text := CurrToStr(conexao.PesquisaLancamentovalor.Value);
Memo1.Text := conexao.PesquisaLancamentomotivo.AsString;
ComboBox2.ItemIndex := ComboBox2.Items.IndexOfName(conexao.PesquisaLancamentotipo.AsString);
ComboBox1.ItemIndex := ComboBox2.Items.IndexOfName(conexao.PesquisaLancamentoforma.AsString);
ComboBox3.ItemIndex := ComboBox2.Items.IndexOfName(conexao.PesquisaLancamentodespesa.AsString);
Button2.Visible:= False;
MaskEdit1.SetFocus;
end;
se eu não faço conexao := TFrmConexao.Create(self); no carregar campos, dá erro de acesso violado.
09/10/2024
Cristiane
esse trecho que postei anteriormente é referente à unit Lancamento onde faço uses da unit conexao como implementation:
unit lancamento;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.DBCtrls,
Data.DB, Data.FMTBcd, Data.SqlExpr, Data.DBXInterBase, FireDAC.Stan.Intf,
FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS,
FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt,
FireDAC.Comp.DataSet, FireDAC.Comp.Client, Vcl.Grids, Vcl.DBGrids, Vcl.Mask,
Vcl.ComCtrls;
type
TFrmLancamento = class(TForm)
Panel1: TPanel;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
Label3: TLabel;
Label5: TLabel;
Button2: TButton;
Button5: TButton;
DBGrid1: TDBGrid;
Button6: TButton;
Button7: TButton;
Button8: TButton;
RadioGroup1: TRadioGroup;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
Memo1: TMemo;
Label4: TLabel;
Label6: TLabel;
ComboBox3: TComboBox;
ComboBox4: TComboBox;
Label7: TLabel;
Label8: TLabel;
MaskEdit1: TMaskEdit;
MaskEdit2: TMaskEdit;
MaskEdit3: TMaskEdit;
DataSource1: TDataSource;
procedure Button5Click(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Button2Click(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure DBGrid1DblClick(Sender: TObject);
private
{ Private declarations }
procedure carregarCampos;
public
{ Public declarations }
procedure limparPesquisa;
end;
var
FrmLancamento: TFrmLancamento;
implementation
{$R *.dfm}
uses conexao;
//uses conexao;
gostaria de ver como deixar essa unit usada: Conexao, como glogal, sem precisar estar criando variável e reiniciando ela toda vez a cada botão ou procedure criada que for necessário fazer consulta, dar um insert, delete ou update.
10/10/2024
Raimundo Pereira
esse trecho que postei anteriormente é referente à unit Lancamento onde faço uses da unit conexao como implementation:
unit lancamento;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.DBCtrls,
Data.DB, Data.FMTBcd, Data.SqlExpr, Data.DBXInterBase, FireDAC.Stan.Intf,
FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS,
FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt,
FireDAC.Comp.DataSet, FireDAC.Comp.Client, Vcl.Grids, Vcl.DBGrids, Vcl.Mask,
Vcl.ComCtrls;
type
TFrmLancamento = class(TForm)
Panel1: TPanel;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
Label3: TLabel;
Label5: TLabel;
Button2: TButton;
Button5: TButton;
DBGrid1: TDBGrid;
Button6: TButton;
Button7: TButton;
Button8: TButton;
RadioGroup1: TRadioGroup;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
Memo1: TMemo;
Label4: TLabel;
Label6: TLabel;
ComboBox3: TComboBox;
ComboBox4: TComboBox;
Label7: TLabel;
Label8: TLabel;
MaskEdit1: TMaskEdit;
MaskEdit2: TMaskEdit;
MaskEdit3: TMaskEdit;
DataSource1: TDataSource;
procedure Button5Click(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Button2Click(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure DBGrid1DblClick(Sender: TObject);
private
{ Private declarations }
procedure carregarCampos;
public
{ Public declarations }
procedure limparPesquisa;
end;
var
FrmLancamento: TFrmLancamento;
implementation
{$R *.dfm}
uses conexao;
//uses conexao;
gostaria de ver como deixar essa unit usada: Conexao, como glogal, sem precisar estar criando variável e reiniciando ela toda vez a cada botão ou procedure criada que for necessário fazer consulta, dar um insert, delete ou update.
Olá Cris, bom dia!
Eu geralmente, realizo a conexão com a base de dados no inicio da aplicação.
Cada tela, trabalhando individualmente com sua respectiva query.
Acredito que o erro que está enfrentando pode está relacionado ao evento:
procedure DBGrid1DblClick(Sender: TObject);
Caso queira, podemos fazer uma call, e tento analisar e auxiliar melhor.
Discord @oficialrcp
10/10/2024
Raimundo Pereira
esse trecho que postei anteriormente é referente à unit Lancamento onde faço uses da unit conexao como implementation:
unit lancamento;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.DBCtrls,
Data.DB, Data.FMTBcd, Data.SqlExpr, Data.DBXInterBase, FireDAC.Stan.Intf,
FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS,
FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt,
FireDAC.Comp.DataSet, FireDAC.Comp.Client, Vcl.Grids, Vcl.DBGrids, Vcl.Mask,
Vcl.ComCtrls;
type
TFrmLancamento = class(TForm)
Panel1: TPanel;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
Label3: TLabel;
Label5: TLabel;
Button2: TButton;
Button5: TButton;
DBGrid1: TDBGrid;
Button6: TButton;
Button7: TButton;
Button8: TButton;
RadioGroup1: TRadioGroup;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
Memo1: TMemo;
Label4: TLabel;
Label6: TLabel;
ComboBox3: TComboBox;
ComboBox4: TComboBox;
Label7: TLabel;
Label8: TLabel;
MaskEdit1: TMaskEdit;
MaskEdit2: TMaskEdit;
MaskEdit3: TMaskEdit;
DataSource1: TDataSource;
procedure Button5Click(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Button2Click(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure DBGrid1DblClick(Sender: TObject);
private
{ Private declarations }
procedure carregarCampos;
public
{ Public declarations }
procedure limparPesquisa;
end;
var
FrmLancamento: TFrmLancamento;
implementation
{$R *.dfm}
uses conexao;
//uses conexao;
gostaria de ver como deixar essa unit usada: Conexao, como glogal, sem precisar estar criando variável e reiniciando ela toda vez a cada botão ou procedure criada que for necessário fazer consulta, dar um insert, delete ou update.
Olá Cris, bom dia!
Eu geralmente, realizo a conexão com a base de dados no inicio da aplicação.
Cada tela, trabalhando individualmente com sua respectiva query.
Acredito que o erro que está enfrentando pode está relacionado ao evento:
procedure DBGrid1DblClick(Sender: TObject);
Caso queira, podemos fazer uma call, e tento analisar e auxiliar melhor.
Discord @oficialrcp
Em relação a unit global, geralmente uso DataModule mantendo todas as conexões e query nele.
em cada form que usará a conexão declaro em uses udm
10/10/2024
Cristiane
10/10/2024
Arthur Heinrich
Eventualmente terá que mudar o nome da sua variável para não conflitar com o nome da unit, mas é apenas um detalhe técnico.
Você pode, inclusive, criar a rotina que efetua a conexão com o banco dentro da unit "conexao", chamando-a na seção "initialization" da unit. Desta forma, sempre que você criar uma aplicação e adicionar a unit "conexão", a conexão será aberta automaticamente.
Depois disso, é só não declarar a variável em outros lugares, em que o escopo seja mais relevante. Do contrário, acessará a variável errada.
Ao final da aplicação, caso você abra a conexão na sessão initialization, poderá encerrar a conexão na seção finalization, também.
Clique aqui para fazer login e interagir na Comunidade :)