Jump to content
Fórum Script Brasil
  • 0

Comparar informações de uma tabela e colocar em DBEdit


anabon

Question

Olá pessoa boa tarde....

Mais uma vez peço a ajuda de vocês , como já dissi em outro post, eu programava em vb, mas estou tentando passar meus sistema para delphi... Enfim... é o seguinte tenho um form com 6DBEdit, 1 ADOQuery onde no select dele eu coloquei assim:

Select telefone, nome, endereço, complemento, bairro, cidade From cliente
oque quero fazer é filtrar o telefone se este telefone estiver no cadastro então os dados automaticamente é preenchido nos outro DBEdit, caso não exista ele retorna uma label "Cliente não cadastro pressione a tecla f1 do seu teclado para o cadastro". Tenho algo parecido em vb e uso o codigo:
Set RS = New ADODB.Recordset
Set con = New ADODB.Connection
con.Open (cnSQL)
On Error Resume Next

RS.Open "Select * from cliente where telefone = '" & Me.txtfone & "'", con, adOpenKeyset, adLockOptimistic
If txtfone.Text <> RS!telefone Then
labelinfo.Caption = "ATENÇÃO CLIENTE NÃO CADASTRADO, PRESSIONE A TECLA F1 PARA CADASTRO!!!", 
txtnome.Text = ""
txtendereço.Text = ""
txtbairro.Text = ""
txtcidade.Text = ""
cmdincluir.Enabled = True
cmdpedido.Enabled = False
txtnome.SetFocus


Else
RS.Close
RS.Open "Select * from cliente where telefone = '" & Me.txtfone & "'", con, adOpenKeyset, adLockOptimistic
txtnome.Text = RS!nome
txtendereço.Text = RS!endereço
txtbairro.Text = RS!bairro
txtcidade.Text = RS!cidade
cmdincluir.Enabled = False
cmdpedido.Enabled = True
cmdalterar.Enabled = True
End If
RS.Close

ENFIM... a pegunta é... como faço isso em delphi?

desde já agradeço que puder me ajudar.....

abraço!!!!

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

- Voce precisará adicionar a cláusula where na sua query inicial;

- no form, o campo onde você digita o telefone para a consulta, não poderá ser um DBEdit - terá que ser um componente não data-aware (aqueles sem o DB...), ou seja, um TEdit ou TMaskEdit,...;

- quando o número for informado, a ação ocorrerá de algum modo que você tenha em mente: quando todos os dígitos forem preenchidos, ou pressionando um botão, ou avançando ao outro campo (TAB),...

- esta ação será inicializar sua consulta com o parâmetro informado. Caso não saiba, você define parametros na query ustilizando o ":". Dê uma pesquisada no forum que tem exemplos;

- inicializado o parâmetro, você abre a consulta/query;

- se ela não retornar qualquer registro, então voce mostra a mensagem. Eu sugiro que voce use uma mensagem do tipo "pergunta" (MessageDlg) ao invés de informar ao usuário para teclar F1 - vai simplificar as coisas;

. - Se o usuário responder Sim, você coloca a tabela em mode inserção (Insert ou Append) e inicializa o campo de busca (telefone) com aquele informado no edit inicial; Os demais são data-aware (DB...) e estão vinculados ao dataset - serã automaticamente gravados no post.

- se ela retornar o registro, automaticamente todos os outros DB...'s serão preenchidos.

Lembrando que quando o DataSource tem a propriedade AutoEdit = true, ao digitar qualquer coisa nestes DB... o dataset será colocado em modo de edição.

É mais ou menos isto

Abraços

Link to comment
Share on other sites

  • 0

Oi amigo .... obrigada pela dica ... mas o problema é que to passando o parametro assim:

select * from cliente
where telefone =:Ptelefone
Depois to tentando busca o resultado no evento OnExit do Tedit
procedure TFormDisk_Entregas.txtfoneExit(Sender: TObject);
begin
Query_Pedido.Close;
Query_Pedido.ParamByName('Ptelefone').Value :=(txtfone.text);
Query_Pedido.Open;
end;

end.
Só que da erro na linha:
Query_Pedido.ParamByName('Ptelefone').Value :=(txtfone.text);

[Error] UnitDisk_Entregas.pas(133): Undeclared identifier: 'ParamByName'

Desde já agradeço quem puder me ajudar......

Link to comment
Share on other sites

  • 0

anabon, voce deve estar usando componentes ADO no Delphi também, não é?! (Nunca deixe de informar)

No caso dos componentes ADO, o "caminho" é um pouquinho mais longo:

Query_Pedido.Parameters.ParamByName('Ptelefone').AsString := txtfone.text;

observações:

- Voce não precisa daqueles parênteses em torno do txtfone.text;

- sempre que você passar um texto como parâmetro, é boa "conduta" usar o método AsString para passar o parâmetro para a consulta porque eventualmente o parâmetro é de um tipo diferente (inteiro, float,...) e isto lhe evitará dor de cabeças, já que o próprio driver do componente irá se preocupar em fazer qualquer conversão necessária.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...