Navegação de registros perfeita usando ADODataSet
Olá galerinha,
Estou tentando fazer uma navegação de registros perfeita no delphi com sql server mas não estou conseguindo, alguem pode me ajudar?
Eu coloquei os paramentros de conexão certinho
ConnectionString := ConnStr;
CommandText := STR_SQL;
CursorLocation := clUseClient;
CursorType := ctKeyset;
Quanbdo eu faço as condições para saber se está em fim ou inicio de registro para mostrar os dados, mas ele sempre no final ou no inicio eu tenho que clicar duas vezes para navegar.
Alguem pode me ajudar??????????????
Grato
Estou tentando fazer uma navegação de registros perfeita no delphi com sql server mas não estou conseguindo, alguem pode me ajudar?
Eu coloquei os paramentros de conexão certinho
ConnectionString := ConnStr;
CommandText := STR_SQL;
CursorLocation := clUseClient;
CursorType := ctKeyset;
Quanbdo eu faço as condições para saber se está em fim ou inicio de registro para mostrar os dados, mas ele sempre no final ou no inicio eu tenho que clicar duas vezes para navegar.
Alguem pode me ajudar??????????????
Grato
Levisants
Curtidas 0
Respostas
Bon Jovi
05/11/2005
Usando Prior/Next nem precisa tratar BOF/EOF. Mostre o código que vc está fazendo...
GOSTEI 0
Levisants
05/11/2005
if lbl_edtCodigo.Text = ´´ Then begin {Caso não tenha nenhum registro selecionado, irá mostrar o primeiro}
ADODataSetCadTransp.Recordset.MoveFirst;
end else begin
if Not ADODataSetCadTransp.Recordset.BOF Then ADODataSetCadTransp.Recordset.MovePrevious;
end;
if Not ADODataSetCadTransp.Recordset.BOF Then exibedados; //mostra os dados no campo
ADODataSetCadTransp.Recordset.MoveFirst;
end else begin
if Not ADODataSetCadTransp.Recordset.BOF Then ADODataSetCadTransp.Recordset.MovePrevious;
end;
if Not ADODataSetCadTransp.Recordset.BOF Then exibedados; //mostra os dados no campo
GOSTEI 0
Bon Jovi
05/11/2005
Nao acesse direto os métodos do Recordset, e sim os métodos da VCL, como DataSet.First/.Prior/.Next/.Last.
Nao entendi seu objetivo em relacao a esse código. Mas pegue exemplo aqui: http://rapidshare.de/files/7248897/Project1.zip.html (No final da pagina clica no botao [Free] e na prox pagina no final clica em Download: Project1.zip)
Nao entendi seu objetivo em relacao a esse código. Mas pegue exemplo aqui: http://rapidshare.de/files/7248897/Project1.zip.html (No final da pagina clica no botao [Free] e na prox pagina no final clica em Download: Project1.zip)
GOSTEI 0
Levisants
05/11/2005
Ae funciona sem usar o recordset.
Mas num tem como vc me ajudar a fazer usando o recordset?
E porque existe duas opções de uso, a sem o recordset e com o recordset...
Mas num tem como vc me ajudar a fazer usando o recordset?
E porque existe duas opções de uso, a sem o recordset e com o recordset...
GOSTEI 0
Bon Jovi
05/11/2005
Ok, veja abaixo:
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, ADODB, StdCtrls; type TForm1 = class(TForm) btnPrimeiro: TButton; btnAnterior: TButton; btnProximo: TButton; btnUltimo: TButton; Edit1: TEdit; procedure FormDestroy(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btnPrimeiroClick(Sender: TObject); procedure btnAnteriorClick(Sender: TObject); procedure btnProximoClick(Sender: TObject); procedure btnUltimoClick(Sender: TObject); private { Private declarations } ADOConexao: _connection; ADORecordSet: _Recordset; procedure Mostra; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses ADOInt; procedure TForm1.FormCreate(Sender: TObject); begin ADOConexao := CoConnection.Create; ADORecordSet := CoRecordSet.Create; ADOConexao.CursorLocation := adUseClient; ADORecordSet.CursorLocation := adUseClient; ADORecordSet.CursorType := adOpenStatic; ADORecordSet.LockType := adLockOptimistic; end; procedure TForm1.FormDestroy(Sender: TObject); begin ADORecordSet.Close; ADORecordSet := nil; ADOConexao.Close; ADOConexao := nil; end; procedure TForm1.FormShow(Sender: TObject); begin ADOConexao.Open(´Provider=Microsoft.Jet.OLEDB.4.0;Data Source=bd1.mdb;Persist Security Info=False´, ´´, ´´, 0); ADORecordSet.Open(´select nome from tabela´, ADOConexao, adOpenStatic, adLockOptimistic, -1); if ADORecordSet.RecordCount > 0 then Mostra; end; procedure TForm1.Mostra; begin Edit1.Text := VarToStr(ADORecordSet.Fields[´nome´].Value); end; procedure TForm1.btnPrimeiroClick(Sender: TObject); begin if ADORecordSet.AbsolutePosition <= 1 then Exit; ADORecordSet.MoveFirst; Mostra; end; procedure TForm1.btnAnteriorClick(Sender: TObject); begin if ADORecordSet.AbsolutePosition <= 1 then Exit; ADORecordSet.MovePrevious; Mostra; end; procedure TForm1.btnProximoClick(Sender: TObject); begin if (ADORecordSet.AbsolutePosition = ADORecordSet.RecordCount) or (ADORecordSet.AbsolutePosition = -1) then Exit; ADORecordSet.MoveNext; Mostra; end; procedure TForm1.btnUltimoClick(Sender: TObject); begin if (ADORecordSet.AbsolutePosition = ADORecordSet.RecordCount) or (ADORecordSet.AbsolutePosition = -1) then Exit; ADORecordSet.MoveLast; Mostra; end; end.
GOSTEI 0
Levisants
05/11/2005
Cara eu sei que já estou enchendo né, mas tem uma coisa que ainda não consegui fazer funcionar...
Eu tentei de diversas maneiras de fazer associar o recordset com o dbgrid e até agora não consegui.
Eu tentei de diversas maneiras de fazer associar o recordset com o dbgrid e até agora não consegui.
GOSTEI 0
Bon Jovi
05/11/2005
Acho q ou vc usa plenamente a VCL ou faz tudo na mão, ou ainda.. eca.. usar alguma grid ActiveX. Pra usar TDBGrid de forma automatica esqueça recordset..., qual o pq de usa-lo?? Se ainda assim quer mesmo usar recordset, então varra o recordset e vá jogando num ClientDataSet.
GOSTEI 0