DOUGLASAP 0 Denunciar post Postado Janeiro 25, 2013 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. Compartilhar este post Link para o post Compartilhar em outros sites
Humberto Oliveira Pinto 8 Denunciar post Postado Janeiro 25, 2013 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; no mais acesse http://www.w3schools.com/sql/sql_insert.asp Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Janeiro 25, 2013 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. Compartilhar este post Link para o post Compartilhar em outros sites
Humberto Oliveira Pinto 8 Denunciar post Postado Janeiro 25, 2013 só dar um refresh no ADOQuery que alimenta o DBGrid ADOQuery.Refresh; Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Janeiro 28, 2013 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. Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Janeiro 28, 2013 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: Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Janeiro 28, 2013 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é Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Janeiro 28, 2013 Olá amigo! Entendi. Por um acaso, como está definida a propriedade Attributes do seu objeto ADOConnection? Até a próxima. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Janeiro 28, 2013 vamos la Attributes [ ] XaCommitRetaining = False XaAboutRetaining = false É isso ?? Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Janeiro 28, 2013 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: Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Janeiro 28, 2013 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 Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Janeiro 28, 2013 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: Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Janeiro 28, 2013 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 Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Janeiro 28, 2013 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: Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Janeiro 28, 2013 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 Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Janeiro 28, 2013 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: Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Janeiro 28, 2013 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 Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Janeiro 29, 2013 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: Compartilhar este post Link para o post Compartilhar em outros sites
DOUGLASAP 0 Denunciar post Postado Janeiro 29, 2013 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 Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Janeiro 29, 2013 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: Compartilhar este post Link para o post Compartilhar em outros sites