buscar resultado sql

Delphi

13/08/2010

estou querendo pegar o resultado de uma consulta sql tipo tenho um edit ai queria q quando o kra passasse para o campo de baixo com tab ou enter e deixasse o valor dele vazio ou 0 ele buscasse no banco verificasse q é um novo registo pega o ultimo ID e cria elenovo..ai fiz assim.. 
if (EIdUsu.Text='0') or (EIdUsu.Text='') then     begin       DataModule1.AdoQCadUsu.Close;       DataModule1.ADOQCadUsu.SQL.Clear;       DataModule1.ADOQCadUsu.SQL.Add('Select MAX(CodUsu) from TCadUsu');       DataModule1.ADOQCadUsu.Open;       EIdUsu.Text:= DataModule1.ADOQCadUsu.FieldValues['CodUsu'];       EIdUsu.SetFocus;     end;

mais nao ta funcionando.. e eu coloco essa função em qual propriedade do edit.. onchange?
Fabio Sanches

Fabio Sanches

Curtidas 0

Respostas

Carlos Mazzi

Carlos Mazzi

13/08/2010

Nao entendi.. isso tudo ée pra fazer um Incremento na chave primaria, ou o que?
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010


  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
GOSTEI 0
Wilson Junior

Wilson Junior

13/08/2010

Que banco de dados você utiliza?
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

if (EIdUsu.Text='0') or (EIdUsu.Text='') then begin     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
       EIdUsu.Text := IntToStr(DataModule1.ADOQCadUsu.Fields[0].AsInteger+1);     EIdUsu.SetFocus; end;   Coloque no onExit do EIdUsu.   Atenciosamente   Eriley
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

Faltou as aspas if (EIdUsu.Text='0') or (EIdUsu.Text='') then begin     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
       EIdUsu.Text := IntToStr(DataModule1.ADOQCadUsu.Fields[0].AsInteger+1);     EIdUsu.SetFocus; end;   Coloque no onExit do EIdUsu.   Atenciosamente   Eriley
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010


  o q significa o field[0] é o primeiro registro do banco por exemplo no meu banco é ID,NOME se eu quisesse pegar o nome seria field[1] ??
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

o q eu estou testando baseado na pergunta q eu fiz é isso
 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=' +QuotedStr(EIdUsu.text) + ' ')   ENomUsu.Text := DataModule1.ADOQCadUsu.Fields[1].AsString;    end;
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

Quando você utiliza Select * from TCadUsu: DataModule1.ADOQCadUsu.Fields[1].AsString corresponde ao segundo campo criado na sua tabela.   Atenciosamente   Eriley
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

deu o erro "List Index out of Bounds"  com o codigo abaixo
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=' +QuotedStr(EIdUsu.text) + ' ');   ENomUsu.Text := DataModule1.ADOQCadUsu.Fields[1].AsString;    end;
GOSTEI 0
Tiago Melo

Tiago Melo

13/08/2010

Fabio, por estar usando auto-incremente deve estar utilizando SQL Server certo? ou não?...mas seguinte o identity do SQL Server só gera o Id Quando Grava o result set...então vc não terá esse problema de deixar intervalos entre os id`s, caso não esteja utilizando SQL Server, diga o banco que está usando que irá nos ajudar a te ajudar.     Quanto ao e depois preciso pegar esse resultado de um sql e trazer de volta para uma variavel.. eu não entendi o que vc quer colocar na variavel...é o valor da chave gerada???
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

deu o erro "List Index out of Bounds"  com o codigo abaixo

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 not (DataModule1.ADOQCadUsu.IsEmpty) then
     ENomUsu.Text := DataModule1.ADOQCadUsu.Fields[1].AsString;
end;
  Atenciosamente   Eriley
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

isso.. eu estou utilizando sql server mesmo.. e essas linhas ai eu nao vou inserir no banco depois o campo ID vou deixar no increment.. ela serve apenas para eu saber o numero do registro q ele vai selecionar..  e quanto a solução enviada o erro parou de dar.. porque? o q significa aquele erro? e porem ele so nao me trouxe o resultado.. mais eu vou analisar o banco e ver os registros...
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

testei aqui fiz o select com condição fixa where codusu=1 pq achei q ele pudesse nao estar buscando o valor do edit ja q esta no onexit dele.. mesmo assim nao funcionou
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

o codigo inteiro esta assim
procedure TFCadUsu.EIdUsuExit(Sender: TObject);begin  if (EIdUsu.Text='0') or (EIdUsu.Text='') then   begin    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       EIdUsu.Text := IntToStr(DataModule1.ADOQCadUsu.Fields[0].AsInteger+1);    ENomUsu.SetFocus;   end;  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);     if not (DataModule1.ADOQCadUsu.IsEmpty) then       begin        ShowMessage('certo');        ENomUsu.Text := DataModule1.ADOQCadUsu.Fields[1].AsString;       end;       ShowMessage('errado');    end;end;
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

Só vai retornar o nome do usuario, se o mesmo estiver gravado no banco de dados já, do contrario não retorna nada.   Atenciosamente   Eriley
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

esse é o problema.. ele ta gravado.. verifiquei ja.. mais nao esta retornando nada... 
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

o resultado da consulta SQl esta retornando vazio.. eu fiz o select na mao e funcionou normalmente.. porem nao retorna nada... dando o showmessage('errado');
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

o codigo inteiro esta assim

procedure TFCadUsu.EIdUsuExit(Sender: TObject);
begin
  if (EIdUsu.Text='0') or (EIdUsu.Text='') then
   begin
    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
       EIdUsu.Text := IntToStr(DataModule1.ADOQCadUsu.Fields[0].AsInteger+1);
    ENomUsu.SetFocus;
   end;
  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);
   ShowMessage(DataModule1.ADOQCadUsu.SQL.Text);
   DataModule1.ADOQCadUsu.Open;
     if not (DataModule1.ADOQCadUsu.IsEmpty) then
       begin
        ShowMessage('certo');
        ENomUsu.Text := DataModule1.ADOQCadUsu.Fields[1].AsString;
       end;
       ShowMessage('errado');
    end;
end;


Você não tinha colocado o Open, na query, por isso dava sempre em branco: DataModule1.ADOQCadUsu.Open;   Quando aparecer a mensagem na tela tecle ctrl + c e cole no sql server, retire as sujeiras e execute, se retornar alguma coisa pode apagar as linha que tem o showmessage, caso contrario poste o conteúdo do showmessage aqui.   Atenciosamente   Eriley
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

camarada.. estou com uma duvida sobre herança aqui que é a seguinte
tenho o seguinte codigo para limpeza dos edits
procedure limpaedit(Form: FPrincipal);vari:integerbeginwith Form do  for i:=0 to ComponentCount-1 do begin        if (Components[i]).ClassName = 'TEdit' then          Tedit(Components[i]).Clear;  end;end;

gostaria de colocar ele no frm principal e depois buscalo ou executar essa função em outros forms como q eu faço isso?
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

Na seção public coloque:     { Public declarations }
    procedure LimpaCampos;   Depois tecle Shift + Ctrl + C, para criar o corpo da procedure e digite:     var
  i : Word;
begin
  for i := 0 to ComponentCount - 1 do
    if (Components[i] is TEdit) then
       TEdit(Components[i]).Clear
end;   Depois para usar nos outros formulários basta declarar FPrincipal na clausula Uses e digitar: FPrincipal.LimpaCampos;   Atenciosamente   Eriley
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

eriley, 
     esta dando erro no TEDIT     if (Components[i] is TEdit) then  identificador nao declarado.. precisa declarar o TEDIT como variave?? tipo WORD tbn? ou STRING?
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

Declare StdCtrls na clausula uses.   Atenciosamente   Eriley
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

so por curiosidade.. o q seria isso?
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010


  e eu fiz a função.. ele fez a chamada de forma correta..  so q nao limpou campo nenhum.. eu tenho 3 edits e um combobox. nao limpou campo nenhum.. e eu coloquei a chamada da função no onclick do botao cancelar.
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

Fiz o teste aqui e funcionou, veja o código que utilizei: unit Unit1; interface uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls{Biblioteca que contém o componente Edit}; type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure LimpaCampos;
  end; var
  Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);
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; end.   Atenciosamente   Eriley
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

o meu esta assim, eu fiz um teste e coloquei para dar um show dentro do for ele apareceu o dentro do for e fora o show dentro do IF nao apareceu.. parece q ele nao esta entrando dentro do if nao, sendo q no cadusu tem componentes tedit.
form principal
unit Uprincipal;
interface
uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, Menus;
type  TFPrincipal = class(TForm)    MainMenu1: TMainMenu;    Cadastro1: TMenuItem;    Eventos1: TMenuItem;    Cadastro2: TMenuItem;    iposdeEventos1: TMenuItem;    ProdutoServio1: TMenuItem;    Operadores1: TMenuItem;    Estoques1: TMenuItem;    Movimentaes1: TMenuItem;    Movimentaes2: TMenuItem;    Produo1: TMenuItem;    Apontamentos1: TMenuItem;    Sair1: TMenuItem;    Ajuda1: TMenuItem;    Usurios1: TMenuItem;    procedure Operadores1Click(Sender: TObject);    procedure Sair1Click(Sender: TObject);    procedure Usurios1Click(Sender: TObject);
  private    { Private declarations }  public    { Public declarations }    procedure limpacampos;  end;
var  FPrincipal: TFPrincipal;
implementation
uses Ulogin, UCadOpr, UCadUsu, StdCtrls;
{$R *.dfm}
procedure TFPrincipal.limpacampos; var  i : Word;begin  for i := 0 to ComponentCount - 1 do    begin    ShowMessage('dentro for');    if (Components[i] isTEdit) then      begin       TEdit(Components[i]).Clear;        ShowMessage('dentro if');      end;     end;  ShowMessage('fora');end;
procedure TFPrincipal.Operadores1Click(Sender: TObject);begin   FCadOpr.ShowModal;end;
procedure TFPrincipal.Sair1Click(Sender: TObject);begin   FPrincipal.Close;   Flogin.Close;end;
procedure TFPrincipal.Usurios1Click(Sender: TObject);begin   FCadUsu.ShowModal;end;

end.

form cadusu
unit UCadUsu;
interface
uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ExtCtrls, DBCtrls, StdCtrls, Buttons;
type  TFCadUsu = class(TForm)    GroupBox1: TGroupBox;    Label1: TLabel;    Label2: TLabel;    Label3: TLabel;    Label4: TLabel;    EIdUsu: TEdit;    ENomUsu: TEdit;    EPassUsu: TEdit;    ComboNivUsu: TComboBox;    BitBtn1: TBitBtn;    BitBtn2: TBitBtn;    DBNavigator1: TDBNavigator;    BitBtn4: TBitBtn;    Button1: TButton;    procedure BitBtn4Click(Sender: TObject);    procedure GroupBox1Enter(Sender: TObject);    procedure EIdUsuExit(Sender: TObject);    procedure BitBtn2Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;
var  FCadUsu: TFCadUsu;  TipNiv : integer;implementation
uses dmos, DB, Uprincipal;
{$R *.dfm}
procedure TFCadUsu.BitBtn4Click(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') or (EIdUsu.Text='') then   begin    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       EIdUsu.Text := IntToStr(DataModule1.ADOQCadUsu.Fields[0].AsInteger+1);    ENomUsu.SetFocus;   end;  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 not (DataModule1.ADOQCadUsu.IsEmpty) then       begin        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;end;
procedure TFCadUsu.BitBtn2Click(Sender: TObject);begin   FPrincipal.limpacampos;end;
end.
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

form principal

unit Uprincipal;


interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls;


type
  TFPrincipal = class(TForm)
    MainMenu1: TMainMenu;
    Cadastro1: TMenuItem;
    Eventos1: TMenuItem;
    Cadastro2: TMenuItem;
    iposdeEventos1: TMenuItem;
    ProdutoServio1: TMenuItem;
    Operadores1: TMenuItem;
    Estoques1: TMenuItem;
    Movimentaes1: TMenuItem;
    Movimentaes2: TMenuItem;
    Produo1: TMenuItem;
    Apontamentos1: TMenuItem;
    Sair1: TMenuItem;
    Ajuda1: TMenuItem;
    Usurios1: TMenuItem;
    procedure Operadores1Click(Sender: TObject);
    procedure Sair1Click(Sender: TObject);
    procedure Usurios1Click(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
    procedure limpacampos(Controle: TWinControl);
  end;


var
  FPrincipal: TFPrincipal;


implementation


uses Ulogin, UCadOpr, UCadUsu;


{$R *.dfm}


procedure TFPrincipal.limpacampos(Controle: TWinControl);
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 TFPrincipal.Operadores1Click(Sender: TObject);
begin
   FCadOpr.ShowModal;
end;


procedure TFPrincipal.Sair1Click(Sender: TObject);
begin
   FPrincipal.Close;
   Flogin.Close;
end;


procedure TFPrincipal.Usurios1Click(Sender: TObject);
begin
   FCadUsu.ShowModal;
end;




end.

form cadusu

unit UCadUsu;


interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, DBCtrls, StdCtrls, Buttons;


type
  TFCadUsu = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    EIdUsu: TEdit;
    ENomUsu: TEdit;
    EPassUsu: TEdit;
    ComboNivUsu: TComboBox;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    DBNavigator1: TDBNavigator;
    BitBtn4: TBitBtn;
    Button1: TButton;
    procedure BitBtn4Click(Sender: TObject);
    procedure GroupBox1Enter(Sender: TObject);
    procedure EIdUsuExit(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  FCadUsu: TFCadUsu;
  TipNiv : integer;
implementation


uses dmos, DB, Uprincipal;


{$R *.dfm}


procedure TFCadUsu.BitBtn4Click(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') or (EIdUsu.Text='') then
   begin
    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
       EIdUsu.Text := IntToStr(DataModule1.ADOQCadUsu.Fields[0].AsInteger+1);
    ENomUsu.SetFocus;
   end;
  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 not (DataModule1.ADOQCadUsu.IsEmpty) then
       begin
        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;
end;


procedure TFCadUsu.BitBtn2Click(Sender: TObject);
begin
   FPrincipal.limpacampos(FCadUsu);
end;


end.
  Atenciosamente   Eriley
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

vou testar aqui.. na hora de fazer o meu insert.. é isso aqui mesmo?
      DataModule1.ADOQCadUsu.SQL.Add('Insert into TCadUsu values('','+ ENomUsu.Text +','+ EPassUsu.Text +','+ ComboNivUsu.ItemIndex')');
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

Este insert só funcionara se o número de campos da tabela for o mesmo que tu ta passando e se houverem campos string deverão ser passados dentro do comando QuotedStr   Atenciosamente   Eriley
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

ok.. e no caso do combobox por ser itemindex é integer certo? a quantidade de campos esta certa la 4 campos ai o primeiro por ser autoincrement fica '' certo?
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

Se o campo for integer é itemindex.   Atenciosamente   Eriley
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

estou com o codigo abaixo.. o q eu estou querendo fazer é o seguinte.
quando eu coloco valor VAZIO no meu Id era para ele entrar dentro do IF e fazer a verificação de novo codigo.. porem esta dando a seguinte mensagem de erro
"Projetc OS.exe raised exception class OEleException with message 'SINTAXE INCORRETA PROXIMA A '=' "
o codigo é o abaixo nao consegui entender o porque ainda.
procedure TFCadUsu.EIdUsuExit(Sender: TObject);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;   BInserir.Enabled:=True;   BAlterar.Enabled:=True;
  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;

  if (EIdUsu.Text<>'0') and (EIdUsu.Text<>'') then    begin    TipOpr:=1;    BInserir.Enabled:=False;    BAlterar.Enabled:=True;    DataModule1.ADOQCadUsu.Close;    DataModule1.ADOQCadUsu.SQL.Clear;    DataModule1.ADOQCadUsu.SQL.Add('Select * from TCadUsu where codusu=' + EIdUsu.text);    DataModule1.ADOQCadUsu.Open;     if not (DataModule1.ADOQCadUsu.IsEmpty) then       begin        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;
  end; //end procedure
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

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
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

camarada.. no insert aki eu tentei colocar o combobox.itemindex como parametro.. ele deu erro falando q é um parametro de lista ( ou algo assim ) entao eu tentei colocar o valor do combo em uma variave. ai quando eu coloquei a variavel no insert deu o erro "nome da coluna TipNiv inválido"
procedure TFCadUsu.BInserirClick(Sender: TObject);begin    TipNiv:=0;  Case ComboNivUsu.ItemIndex of    1 : TipNiv:=1;    2 : TipNiv:=2;  end;
  if (ComboNivUsu.ItemIndex=0) then    ShowMessage('Favor selecionar um nível de Usuário')     else      begin       DataModule1.AdoQCadUsu.Close;       DataModule1.ADOQCadUsu.SQL.Clear;       DataModule1.ADOQCadUsu.SQL.Add('Insert into TCadUsu values(' +QuotedStr(ENomUsu.Text)+ ',' +QuotedStr(EPassUsu.Text)+ ', TipNiv )');       DataModule1.ADOQCadUsu.Open;      end;end;
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

Pelo visto TipNiv é uma variavel inteira e você está tentando colocar um inteiro no meio de uma string sem converter no seu insert. Tente assim: DataModule1.ADOQCadUsu.SQL.Add('Insert into TCadUsu values(' +QuotedStr(ENomUsu.Text)+ ',' +QuotedStr(EPassUsu.Text)+ ', ' + IntToStr(TipNiv) + ')');        DataModule1.ADOQCadUsu.ExecSQL;   Para comandos que não retornam dados use ExecSql ao invés de open é só para ser usado com comando SELECT.   Atenciosamente   Eriley
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010


  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?
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

Ai vai dar problema com o código que fizemos, poi,s dbedit só funciona se a query estiver ativa, só assim você conseguira digitar alguma coisa no dbedit.
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

mais tem como eu trabalhar com a dbnavigator com edit simples?? nem q seja fazendo na unha?
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

Poste todo o código da sua unit aqui.
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

ta ai

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.

GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

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;
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

funcionou bem.. so me explique o que foi feito... qual o motivo de ter a selecionar sempre a tabela inteira??? tenho uns outros cadastros para fazer.. tela.. é melhor usar sempre o dbedit? ou usar o edit mesmo?
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

É para que se possa navegar pelos registros, pois, você está fazendo Insert na unha, logo sua query contem um Insert e não um select.   Outra coisa, quando você está navegando, ou consultando através do onexit  e deseja alterar um registro, como você faz, pois, pelo código que passou só ta fazendo insert e não Update?
GOSTEI 0
Fabio Sanches

Fabio Sanches

13/08/2010

entao é mais viavel usar sempre dbedit quando for efetuar essas transações com banco certo?
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

13/08/2010

Sim é melhor utilizar dbEdit.
GOSTEI 0
POSTAR