Jump to content

Archived

This topic is now archived and is closed to further replies.

DOUGLASAP

Select - Insert - Upload ( SQL + DELPHI + ACCESS )

Recommended Posts

Bom Dia a todos.

Sou iniciante em delphi. . . .

 

Estou utilizando

ADOCONECTION

ADOQUERY

DATASOURCE

DBGRID

 

 

 

Esta tudo conectado certinho.

Na ADOQUERY coloquei

 

Select * from contrato
Até ai tudo bem.
Tenha 3 Edit
Contrato
Equipamento
Cliente
Preciso SALVAR os dados na tabela (access)

 

procedure TForm2.Button1Click(Sender: TObject);



begin


ADOquery1.SQL.Clear;
ADOquery1.SQL.Add('insert into contrato (contrato) values ('+''''+edit1.Text+''''+') ');
ADOquery1.ExecSQL;


end;


end.

 

Ele Salva o que foi digitado na EDIT1.TEXT no campo contrato da tabela contrato.
Não estou conseguindo fazer com que salve
o que foi digitado na EDIT2.TEXT , EDIT3.TEXT nos campos da tabela.
Tentei colocar assim :

 

procedure TForm2.Button1Click(Sender: TObject);



begin


ADOquery1.SQL.Clear;
ADOquery1.SQL.Add('insert into contrato (contrato) values ('+''''+edit1.Text+''''+') ');
ADOquery1.SQL.Add('insert into contrato (Cliente) values ('+''''+edit2.Text+''''+') ');
ADOquery1.SQL.Add('insert into contrato (Equipamento) values ('+''''+edit3.Text+''''+') ');
ADOquery1.ExecSQL;


end;


end.

 

dessa forma nao rola.
Alguem poderia me ajudar ?
Como faço para que seja atualizada a minha DBGRID em tempo de execução ?
Desde ja agradeço atenção de todos.

Share this post


Link to post
Share on other sites

Amigo, vamos por parte;

Para facilitar o processo de inserção, no lugar de usar Edit use o componente DBEdit que você encontra na aba 'Data Controls'. Dentro do DBEdit existe duas propriedades:

DataSource = Data Source que é linkada ao ADOquery1

DataField = Campo que aquele DBEdit representa no ADOQuery1

crie um botao chamado 'incluir' e dentro dele coloque:
ADOQuery1.Insert;

 

crie outro botão chamado 'salvar' ele salvará os dados depois de preenchido, coloque isso:

ADOQuery1.Post;

 

Depois você mexe um pouquinho também no componente DBNavigator é bom para isso que voce quer fazer.

 

MASSSSSSSSSSSSSSSSSSS

Se você quiser continuar pela maneira mais dificil, ou vamos dizer 'desnecessária' vou passar +- a ideia:

 

 

 

ADOquery1.Active := False;

ADOquery1.SQL.Clear;
ADOquery1.SQL.Add('INSERT INTO contrato (contrato, cliente, equipamento) VALUES ('''+Edit1.Text+''', '''+Edit2.Text+''', '''+Edit3.Text+''')');
ADOquery1.ExecSQL;

 

Share this post


Link to post
Share on other sites

Humberto

Muito obrigado pela dica.

Da forma em você mencionou

 

ADOQuery1.Post;

 

codigo acima ira salvar o dado na tabela.

Consigo atualizar minha DBGRID em tempo de execução.

 

Esse aplicativo, só para você entender melhor o banco de dados ficará no servidor.

O aplicativo ira ser aberto e/ou consultado por uns 4 usuários na rede.

Não sei se tem alguma mudança.

E para atualizar a DBGRID em tempo de execução ?

 

Obrigado pela ajuda.

Share this post


Link to post
Share on other sites
Humberto,

Mais um vez muito obrigado pela ajuda.

Coloquei desta forma



ADOquery1.Active := False;

ADOquery1.SQL.Clear;

ADOquery1.SQL.Add('INSERT INTO contrato (contrato, cliente, equipamento) VALUES ('''+Edit1.Text+''', '''+Edit2.Text+''', '''+Edit3.Text+''')');

ADOquery1.ExecSQL;

ADOquery1.Refresh;


Como você mencionou ADOquery1.Refresh; iria alimentar minha DBGRID.

Mas assim não deu certo.



Obrigado pela atenção e pela paciência.

Share this post


Link to post
Share on other sites

Olá amigo.

 

Verifique se a propriedade DataSource do seu componente DBGrid está "Linkado" com a sua Query/Table "contrato". Caso não esteja faça a associação e os registros passaram a serem exibidos no seu DBGrid.

 

Até a próxima. :thumbsup:

Share this post


Link to post
Share on other sites

Olá

Creio que sim, pois os dados esta aparecendo na DBGRID.

Na propriedade SQL da DBGRID fiz o seguinte.

 

Select * from contrato

 

Os dados aparecem na DBGGRID quando salvo os dados somem da DBGRID para que os dados voltem atualizados preciso fechar o aplicativo todo e abri-lo novamente.

 

 

até

Share this post


Link to post
Share on other sites

Olá amigo!

 

Entendi. Por um acaso, como está definida a propriedade Attributes do seu objeto ADOConnection?

 

Até a próxima. :thumbsup:

Share this post


Link to post
Share on other sites

Olá amigo.

 

Essa situação que você descreve me lembra a situação de quando estamos trabalhando com transações em que comitamos nossas alterações, mas em seguida não "abrimos" novamente a tabela para realizar novas operações. O fato de você dar um refresh e resolver, faz basicamente um close e um open na sua query/table.

 

Eu não trabalho com o ADOConnection, mas experimente habilitar o xaCommitRetaining para true e faça um teste para ver no que dá.

 

Se não funcionar, vou ter que criar um exemplo semelhante ao seu pra ver se obtenho essa situação e poder descobrir como te ajudar.

 

Até a próxima. :thumbsup:

Share this post


Link to post
Share on other sites

Caro Eisenheim

Agradeço desde ja.

 

Fiz o que havia mencionado, mas infelizmente sem sucesso.

e se eu der um upload ?

Caso de certo, como ficaria o upload ?

 

Obrigado

Share this post


Link to post
Share on other sites

Olá amigo.

 

Certo!

 

Upload? você quer dizer um Refresh?

 

Vou elaborar um demo o mais próximo possível do seu projeto e ver se comigo acontece isso. Caso não aconteça a gente compara o que pode haver de diferente entre um e outro até chegarmos a conclusão desse problema.

 

Até a próxima. :thumbsup:

Share this post


Link to post
Share on other sites

Caro Eisenheim

 

Muito Obrigado pela atenção . .

 

Qual a diferença de salvar os dados através de

 

Insert into

 

 

e através de

DataModule1.ADOTable1.post

 

 

?

 

até mais :D

Share this post


Link to post
Share on other sites

Olá amigo.

 

Olha, acabei de fazer um exemplo bem simples aqui e não consegui simular a sua situação. Faça uma comparação com o seu e veja se existe alguma diferença entre alguma propriedade ou outra do componente ADOConnection/ADOQuery que possa estar diferente e ocasionando esse problema.

 

Segue o link: http://jrstefani.pyxisweb.com.br/zip/

 

Descompacte a pasta Exemplo1 dentro do C:\ e compile o projeto.

 

A diferença é que com insert into ... você fica responsável por alimentar as informações da(s) sua(s) tabela(s). Trabalhando com os componentes da aba DataControls, os mesmos já possuem um "encapsulamento" através dos métodos que citei alguns posts acima, o que facilita e agiliza o desenvolvimento de seu projeto.

 

Ambos vão realizar as ações que você espera, só cabe a você mesmo julgar qual se encaixa melhor na sua necessidade.

 

Até a próxima. :thumbsup:

Share this post


Link to post
Share on other sites

Consegui fazer o que estava querendo.

Fiz o seguinte . .

Utilizei o o componente SpeedButton1 localizado na guia additional.

Inseri nomes aos botoes.

utilizei

 

.insert ( para inserir)

.post (para salvar)

.Edit (Editar)

.Calcel (cancelar)

.refresh (atualizar)

 

Ficou bacana.

 

Minha dúvida é, consigo utilizar esse aplicativo na Rede ?

 

 

Como faço para os dados de uma tabela aparecer na minha DBCOMBOBOX ?

 

Como utilizo o componente DateTimePicker1? Preciso fazer com ele ele pegue a data que eu quiser e salvar na minha tabela.

 

 

Suas dicas me ajudaram . . . .

 

 

:D

Share this post


Link to post
Share on other sites

Olá amigo.

 

Fico feliz em poder ajudar.

 

Primeira dúvida:

 

Minha dúvida é, consigo utilizar esse aplicativo na Rede ?

 

Sim, pode utilizar sem problemas. A única ressalva é que você vai ter que configurar na propriedade ConnectionString a localização do seu arquivo de banco de dados, seguindo aquele exemplo que passei, seria o Exemplo1.mdb.

 

Segunda dúvida:

 

Como faço para os dados de uma tabela aparecer na minha DBCOMBOBOX

 

Nesse caso, você teria que utilizar o DBLookupComboBox, configurando as propriedades:

 

> ListSource

> ListField

> KeyField

> DataSource

> DataField

 

Terceira dúvida:

 

Como utilizo o componente DateTimePicker1? Preciso fazer com ele ele pegue a data que eu quiser e salvar na minha tabela.

 

Você experimentou algo como: DateTimePicker1.Date := Date;

 

Até a próxima. :thumbsup:

Share this post


Link to post
Share on other sites

Ola Amigo

Poderia me explicar melhor sobre como utilizar esse componentes ?

no form1 (tabela cadastro) eu faço cadastro de empresas e tals . .

no form2 eu preciso pegar os dados ta (tabela contrato) mostrar no form2 atravez de uma combobox ou algo do tipo e salvar em na (tabela contrato).

 

> ListSource

> ListField

> KeyField

> DataSource

> DataField

 

Terceira dúvida:

 

Como utilizo o componente DateTimePicker1? Preciso fazer com ele ele pegue a data que eu quiser e salvar na minha tabela.

 

Você experimentou algo como: DateTimePicker1.Date := Date;

 

Sim, fiz ele pega a data de hoje, mas preciso independente da data eu eu escolher. Seja armazenada na tabela

 

obrigado

 

 

:D

Share this post


Link to post
Share on other sites

Olá amigo.

 

Estou lhe enviando outro exemplo de como utilizar o componente DBLookupComboBox. Analise o banco de dados e perceba que criei uma nova tabela de nome cidades. Essa tabela é a utilizada para exibir as cidades no DBLookupComboBox. Na tabela de contrato, apenas adicionei uma nova coluna chamada cidade, cujo valor será o código do cadastro de cidade que será a chave do nosso DBLookupComboBox.

 

Segue exemplo: http://jrstefani.pyxisweb.com.br/zip/Exemplo1.1.zip

 

Referente ao DateTimePicker, eu particularmente não o utilizo, prefiro optar por componentes que já possuam a opção de serem vinculados diretamente a tabela que desejo manipular. Para trabalhar com datas eu costumo utilizar os componentes externos da biblioteca rxlib. Faça uma pesquisa e você irá encontrar muita coisa a respeito desse componente. Existem outros, eu particularmente prefiro os da rxlib.

 

Até a próxima. :thumbsup:

Share this post


Link to post
Share on other sites

Ola Amigo

 

Mais uma vez muito obrigado pela ajuda.

 

Consegui fazer através

 

 

> ListSource

> ListField

> KeyField

> DataSource

> DataField

 

e tambem consegui entrender o funcionamento de DBLookupComboBox . . .

 

 

Uma coisa,

em minha tabela existem dois campos

CANTRATO | CLIENTE

 

Pergunta 1

Através do DBLookupComboBox é possivel listar CONTRATO | CLINETE e quando for salvar, ele salvará apenas o CONTRATO

*LEMBRANDO QUE CONTRATO É APENAS NÚMEROS.

 

Pergunta 2

 

como faço para que o DBEdit := DateTimePicker ?

 

 

 

Agradeço pela atenção

Obrigado

Share this post


Link to post
Share on other sites

Olá amigo.

 

 

Pergunta 1

 

Através do DBLookupComboBox é possivel listar CONTRATO | CLINETE e quando for salvar, ele salvará apenas o CONTRATO

*LEMBRANDO QUE CONTRATO É APENAS NÚMEROS.

 

Sim, para isso vá até a propriedade ListField e coloque os campos separando-os com ;

 

No seu caso, o ListField ficaria assim: contrato;cliente

 

Obs: O que será gravado é o que estiver definido na propriedade KeyField, no seu caso a coluna contrato.

 

Pergunta 2

 

como faço para que o DBEdit := DateTimePicker ?

 

Na verdade, quando se trabalha diretamente com objetos do tipo: DBEdit;DBMemo;DBGrid;DBLookupComboBox, entre outros que existem, você vai alimentá-los referenciando diretamente sua query/table, da seguinte maneira:

 

Imagine que no seu DBEdit, a propriedade DataField está vinculada com o campo data da tabela de contrato. Se o campo data estiver na lista de fields da sua table/query, você pode se referenciar a ela da seguinte maneira:

 

ADOQuery1Data.AsDateTime := DateTimePicker.Date;

 

OU

 

ADOQuery1Data.Value := DateTimePicker.Date;

 

Caso o campo data exista na sua tabela, mas não esteja na lista de fields da sua table/query, você pode se referenciar a ela da seguinte maneira:

 

ADOQuery1.FieldByName('Data').AsDateTime := DateTimePicker.Date;

 

Obs: Reveja no post anterior a esse que sugeri a utilização de um componente externo para trabalhar não só com datas, mas também com outros tipos de informação que são decorrentes do dia a dia e que facilitariam nosso trabalho.

 

Até a próxima. :thumbsup:

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.