isso.. o q eu quero fazer é exatamente isso eu nao queria usar autoincrement pq tipo.. posso ter uma situação de 2 pessoas estarem efetuando um cadastro ao mesmo tempo.. com isso elas reservam ID diferentes e sequenciais dentro do banco. porem se uma delas cancela fica aquele "buraco" na sequencia de ID.. se existir alguma forma melhor de fazer isso.. blz.. sinceramente ainda nao descobri.. kkk mais gostaria de saber.. :) e depois preciso pegar esse resultado de um sql e trazer de volta para uma variavel.. tipo.. fiz um select como q eu trago o resultado de um select para uma variavel usando ADO






País: Brasil
Estado: RS
Cidade: Caxias do Sul
Mensagens: 1574
EIdUsu.Text := 1 {: então este será o 1º registro}
else
EIdUsu.Text := IntToStr(DataModule1.ADOQCadUsu.Fields[0].AsInteger+1);
EIdUsu.Text := '1' {: então este será o 1º registro}
else
EIdUsu.Text := IntToStr(DataModule1.ADOQCadUsu.Fields[0].AsInteger+1);
deu o erro "List Index out of Bounds" com o codigo abaixo
o codigo inteiro esta assim
procedure LimpaCampos;
i : Word;
begin
for i := 0 to ComponentCount - 1 do
if (Components[i] is TEdit) then
TEdit(Components[i]).Clear
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls{Biblioteca que contém o componente Edit};
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure LimpaCampos;
end;
Form1: TForm1;
begin
LimpaCampos;
end;
procedure TForm1.LimpaCampos;
var
i : Word;
begin
for i := 0 to ComponentCount - 1 do
if (Components[i] is TEdit) then
TEdit(Components[i]).Clear
end;
var
I: Integer;
_rCompoSearch: TComponent;
begin
if Controle is TForm then
_rCompoSearch := Controle
else
_rCompoSearch := Controle.Owner;
with _rCompoSearch do
for I := 0 to ComponentCount - 1 do
begin
// Edit
if (Components[I] is TEdit) then
TEdit(Components[i]).Clear;
end;
end;
procedure TFCadUsu.EIdUsuExit(Sender: TObject);
begin
if (EIdUsu.Text<>'0') and (EIdUsu.Text<>'') then
begin
DataModule1.ADOQCadUsu.Close;
DataModule1.ADOQCadUsu.SQL.Clear;
DataModule1.ADOQCadUsu.SQL.Add('Select * from TCadUsu where codusu=' + EIdUsu.text);
DataModule1.ADOQCadUsu.Open;
if (DataModule1.ADOQCadUsu.IsEmpty) then
begin
TipOpr:=0;
Fprincipal.limpaCampos(FCadUsu);
EIdUsu.Text:='';
EIdUsu.SetFocus;
BInserir.Enabled:=True;
BAlterar.Enabled:=False;
DataModule1.AdoQCadUsu.Close;
DataModule1.ADOQCadUsu.SQL.Clear;
DataModule1.ADOQCadUsu.SQL.Add('Select MAX(CodUsu) CodUsu from TCadUsu');
DataModule1.ADOQCadUsu.Open;
if DataModule1.ADOQCadUsu.Fields[0].IsNull then {: se atabela está vazia, retornará nulo}
EIdUsu.Text := '1' {: então este será o 1º registro}
else
begin
EIdUsu.Text := IntToStr(DataModule1.ADOQCadUsu.Fields[0].AsInteger+1);
ENomUsu.SetFocus;
end;
end
else
begin
TipOpr:=1;
BInserir.Enabled:=False;
BAlterar.Enabled:=True;
ENomUsu.Text := DataModule1.ADOQCadUsu.Fields[1].AsString;
EPassUsu.Text := DataModule1.ADOQCadUsu.Fields[2].AsString;
TipNiv := DataModule1.ADOQCadUsu.Fields[3].AsInteger;
if (tipniv=1) then
ComboNivUsu.ItemIndex:=0
else
ComboNivUsu.ItemIndex:=1;
end;
end
else
if (EIdUsu.Text='0') or (EIdUsu.Text='') then
begin
TipOpr:=0;
BInserir.Enabled:=True;
BAlterar.Enabled:=False;
DataModule1.AdoQCadUsu.Close;
DataModule1.ADOQCadUsu.SQL.Clear;
DataModule1.ADOQCadUsu.SQL.Add('Select MAX(CodUsu) CodUsu from TCadUsu');
DataModule1.ADOQCadUsu.Open;
if DataModule1.ADOQCadUsu.Fields[0].IsNull then {: se atabela está vazia, retornará nulo}
EIdUsu.Text := '1' {: então este será o 1º registro}
else
begin
EIdUsu.Text := IntToStr(DataModule1.ADOQCadUsu.Fields[0].AsInteger+1);
ENomUsu.SetFocus;
end;
end;
end; //end procedure
funcionou certinho.. agora estou precisando substituir os meus edits por dbedits pq vou precisar te uma navigator bar <| < > |> so com esses itens para poder navegar nos registros.. porem o dbedit eu nao estou conseguindo digitar nenhum valor nele e ele ja traz automaticamente o primeiro registro.. isso se deve pelo fato de eu ter atribuido na propriedade dele o data field?
unit UCadUsu;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, StdCtrls, Buttons, Mask;
type
TFCadUsu = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
ENomUsu: TEdit;
EPassUsu: TEdit;
ComboNivUsu: TComboBox;
BInserir: TBitBtn;
BCancelar: TBitBtn;
DBNavigator1: TDBNavigator;
BSair: TBitBtn;
Button1: TButton;
BAlterar: TBitBtn;
BitBtn1: TBitBtn;
EIdUsu: TEdit;
procedure BSairClick(Sender: TObject);
procedure GroupBox1Enter(Sender: TObject);
procedure EIdUsuExit(Sender: TObject);
procedure BCancelarClick(Sender: TObject);
procedure BInserirClick(Sender: TObject);
procedure EIdUsuKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FCadUsu: TFCadUsu;
TipNiv,TipOpr,CanCad : integer;
implementation
uses dmos, DB, Uprincipal;
{$R *.dfm}
procedure TFCadUsu.BSairClick(Sender: TObject);
begin
FCadUsu.Close;
end;
procedure TFCadUsu.GroupBox1Enter(Sender: TObject);
begin
EIdUsu.SetFocus;
end;
procedure TFCadUsu.EIdUsuExit(Sender: TObject);
begin
if (EIdUsu.Text<>'0') and (EIdUsu.Text<>'') then
begin
DataModule1.ADOQCadUsu.Close;
DataModule1.ADOQCadUsu.SQL.Clear;
DataModule1.ADOQCadUsu.SQL.Add('Select * from TCadUsu where codusu=' + EIdUsu.text);
DataModule1.ADOQCadUsu.Open;
if (DataModule1.ADOQCadUsu.IsEmpty) then
begin
TipOpr:=0;
Fprincipal.limpaCampos(FCadUsu);
EIdUsu.Text:='';
BInserir.Enabled:=true;
BAlterar.Enabled:=false;
DataModule1.AdoQCadUsu.Close;
DataModule1.ADOQCadUsu.SQL.Clear;
DataModule1.ADOQCadUsu.SQL.Add('Select MAX(CodUsu) CodUsu from TCadUsu');
DataModule1.ADOQCadUsu.Open;
if DataModule1.ADOQCadUsu.Fields[0].IsNull then {: se atabela está vazia, retornará nulo}
EIdUsu.Text := '1' {: então este será o 1º registro}
else
begin
EIdUsu.Text := IntToStr(DataModule1.ADOQCadUsu.Fields[0].AsInteger+1);
ENomUsu.SetFocus;
end;
end
else
begin
TipOpr:=1;
BInserir.Enabled:=False;
BAlterar.Enabled:=True;
ENomUsu.Text := DataModule1.ADOQCadUsu.Fields[1].AsString;
EPassUsu.Text := DataModule1.ADOQCadUsu.Fields[2].AsString;
TipNiv := DataModule1.ADOQCadUsu.Fields[3].AsInteger;
if (tipniv=1) then
ComboNivUsu.ItemIndex:=1
else
ComboNivUsu.ItemIndex:=2;
end;
end
else
if (EIdUsu.Text='0') or (EIdUsu.Text='') then
begin
TipOpr:=0;
BInserir.Enabled:=True;
BAlterar.Enabled:=False;
DataModule1.AdoQCadUsu.Close;
DataModule1.ADOQCadUsu.SQL.Clear;
DataModule1.ADOQCadUsu.SQL.Add('Select MAX(CodUsu) CodUsu from TCadUsu');
DataModule1.ADOQCadUsu.Open;
if DataModule1.ADOQCadUsu.Fields[0].IsNull then {: se atabela está vazia, retornará nulo}
EIdUsu.Text := '1' {: então este será o 1º registro}
else
begin
EIdUsu.Text := IntToStr(DataModule1.ADOQCadUsu.Fields[0].AsInteger+1);
ENomUsu.SetFocus;
end;
end;
end; //end procedure
procedure TFCadUsu.BCancelarClick(Sender: TObject);
begin
Fprincipal.limpaCampos(FCadUsu);
ComboNivUsu.ItemIndex:=0;
EIdUsu.SetFocus;
BInserir.Enabled:=True;
BAlterar.Enabled:=True;
end;
procedure TFCadUsu.BInserirClick(Sender: TObject);
begin
TipNiv:=0;
Case ComboNivUsu.ItemIndex of
1 : TipNiv:=1;
2 : TipNiv:=2;
end;
if (ComboNivUsu.ItemIndex=-1) then
begin
ComboNivUsu.SetFocus;
ShowMessage('Favor selecionar um nível de Usuário');
end
else
begin
{ DataModule1.ADOTCadUsu.Open; //abrir a tabela
DataModule1.ADOTCadUsu.Edit; //permitir inserir dados na tabela
DataModule1.ADOTCadUsu.Insert; // iniciar a inserção dos dados
DataModule1.ADOTCadUsu.FieldByName('NomUsu').Value:=ENomUsu.Text;
DataModule1.ADOTCadUsu.FieldByName('PasUsu').Value:=EPassUsu.Text;
DataModule1.ADOTCadUsu.FieldByName('NivUsu').Value:=ComboNivUsu.ItemIndex;
DataModule1.ADOTCadUsu.Post; }
DataModule1.AdoQCadUsu.Close;
DataModule1.ADOQCadUsu.SQL.Clear;
DataModule1.ADOQCadUsu.SQL.Add('Insert into TCadUsu values(' +QuotedStr(ENomUsu.Text)+ ',' +QuotedStr(EPassUsu.Text)+ ','+ IntToStr(TipNiv) +')');
DataModule1.ADOQCadUsu.ExecSQL;
FPrincipal.limpacampos(FCadUsu);
EIdUsu.SetFocus;
end;
end;
procedure TFCadUsu.EIdUsuKeyPress(Sender: TObject; var Key: Char);
begin
if not( key in['0'..'9',#38,#13] ) then
begin
Key:= #0;
ShowMessage('Favor Insira Apenas Números');
end;
end;
end.
Se você só quer usar o DBNavigator para mostrar os registros inseridos faça assim:
Coloque um Datasource no form e ligue ao DataModule1.ADOQCadUsu.
Ligue o DBNavigator ao Datasource.
Deixe apenas os botoes de navegação do Datasource visiveis através da propriedade:
VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast]
No onclick do DBNavigator digite:
if not(DataModule1.ADOQCadUsu.Active) then
DataModule1.ADOQCadUsu.Open;
if not(DataModule1.ADOQCadUsu.IsEmpty) then
begin
ENomUsu.Text := DataModule1.ADOTCadUsu.FieldByName('NomUsu').Value;
EPassUsu.Text := DataModule1.ADOTCadUsu.FieldByName('PasUsu').Value;
ComboNivUsu.ItemIndex := DataModule1.ADOTCadUsu.FieldByName('NivUsu').Value;
EIdUsu.Text := DataModule1.ADOTCadUsu.FieldByName('CodUsu').AsString;
end;
No onShow do seu formulário, digite:
DataModule1.ADOQCadUsu.Close;
DataModule1.ADOQCadUsu.SQL.Clear;
DataModule1.ADOQCadUsu.SQL.Add('Select * from TCadUsu');
DataModule1.ADOQCadUsu.Open;
Atenção após inserir ou cancelar um registro, esta mesma instrução deve ser colocada:
Inserir:
FPrincipal.limpacampos(FCadUsu);
DataModule1.ADOQCadUsu.Close;
DataModule1.ADOQCadUsu.SQL.Clear;
DataModule1.ADOQCadUsu.SQL.Add('Select * from TCadUsu');
DataModule1.ADOQCadUsu.Open;
EIdUsu.SetFocus;
Cancelar:
Fprincipal.limpaCampos(FCadUsu);
ComboNivUsu.ItemIndex:=0;
DataModule1.ADOQCadUsu.Close;
DataModule1.ADOQCadUsu.SQL.Clear;
DataModule1.ADOQCadUsu.SQL.Add('Select * from TCadUsu');
DataModule1.ADOQCadUsu.Open;
EIdUsu.SetFocus;






