Fórum buscar resultado sql #383616

13/08/2010

0

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

Responder

Posts

15/08/2010

Carlos Mazzi

Nao entendi.. isso tudo ée pra fazer um Incremento na chave primaria, ou o que?
Responder

Gostei + 0

15/08/2010

Fabio Sanches


  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
Responder

Gostei + 0

16/08/2010

Wilson Junior

Que banco de dados você utiliza?
Responder

Gostei + 0

16/08/2010

Eriley Barbosa

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
Responder

Gostei + 0

16/08/2010

Eriley Barbosa

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
Responder

Gostei + 0

16/08/2010

Fabio Sanches


  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] ??
Responder

Gostei + 0

16/08/2010

Fabio Sanches

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;
Responder

Gostei + 0

17/08/2010

Eriley Barbosa

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

Gostei + 0

17/08/2010

Fabio Sanches

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;
Responder

Gostei + 0

17/08/2010

Tiago Melo

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???
Responder

Gostei + 0

17/08/2010

Eriley Barbosa

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
Responder

Gostei + 0

17/08/2010

Fabio Sanches

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...
Responder

Gostei + 0

17/08/2010

Fabio Sanches

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
Responder

Gostei + 0

17/08/2010

Fabio Sanches

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;
Responder

Gostei + 0

17/08/2010

Eriley Barbosa

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar