.juuh 0 Denunciar post Postado Junho 8, 2009 Olá. Eu tenho um banco com duas tabelas, uma com uma lista de cidades, cada uma com seu codigo, e outra com uma lista de erros, cada um com seu código. Cada cidade pode ter um erro... a tabela das cidades tem uma propriedade chamada statusdeerro; Ok, qero fazer um programa que me permita alterar a propriedade 'statusdeerro' da tabela cidades. Eu fiz numa DBGrid, que exibe o código, nome da cidade, e o status de erro, e entao fiz um botão "Inserir Erro". Fiz esse botão chamar uma form q tem outra DBGrid que mostra a tabela de erros, com o código e a descrição do erro. mas n sei como fazer pra associar que a cidade selecionada na tabela é a cidade que tenho de inserir o erro! http://forum.imasters.com.br/public/style_emoticons/default/pinch.gif n sei se deu pra entender mt bem..mas minha duvida seria essa, como pega um item selecionado de uma tabela e alterar apenas um atributo da mesma. Bjs~ Compartilhar este post Link para o post Compartilhar em outros sites
Daniel Sanches 0 Denunciar post Postado Junho 8, 2009 olha !! vamos ver se entendi ... por exemplo, você tem 2 querys ... query_cidade (ligada à tabela cidades) query_erros (ligada à tabela erros) você tem um form com um grid, onde está exibindo os dados da query_cidade .... você seleciona a cidade e clica em um botao (Adicionar Erro), que envia para outro form com outro grid, este ligado na query_erros ... no form com a grid de erros, você tem um botão (Add), que clicando nele você vai adicionar na tabela de cidades ... pra isso você teria que fazer algo como: *botao_AddClick query_cidade.edit; query_cidade.FieldbyName('statusdeerro').value:= query_erros.FieldByName('codigo').value; query_cidade.post; query_cidade.applyupdates; se entendi direito, é mais ou menos esse caminho aí ... abraço !! Compartilhar este post Link para o post Compartilhar em outros sites
.juuh 0 Denunciar post Postado Junho 9, 2009 hmm não entendi, o que seria o query? um adoquery? desculpe a burrice hehioeoi... Compartilhar este post Link para o post Compartilhar em outros sites
Daniel Sanches 0 Denunciar post Postado Junho 9, 2009 pode ser .. existem vários componentes com a função "query"... o adoquery é um deles ... se você está acostumada com o ADO, pode utilizá-lo ... Compartilhar este post Link para o post Compartilhar em outros sites
.juuh 0 Denunciar post Postado Junho 9, 2009 na realidade n estou acostuamda com nenhum, é a primeira vez que mexo com isso! x.x to usando o lookupcombobox pra selecionar a cidade e o erro, mas como posso fazer pra usar comandos sql no delphi? eh por esse tal de query não? x.x Compartilhar este post Link para o post Compartilhar em outros sites
Daniel Sanches 0 Denunciar post Postado Junho 10, 2009 a QUERY simplesmente envia um comando para o banco de dados e guarda os resultados (registros) para consulta ... um exemplo simples de como utilizar: ADOQuery1.SQL.Text:= 'select * from TABELA where CAMPO1=:DADO'; ADOQuery1.Parameters.ParamByName('DADO').Value:= 'INFORMAÇÃO'; ADOQuery1.Open; esse exemplo de cima, a query envia a solicitação ao banco de dados, que retorna todos os registros da TABELA quando o CAMPO1 = 'INFORMAÇÃO' ... ligando essa ADOQuery1 a um DBGrid, com um DataSource, você exibe esses registros aos usuários ... deu pra ter uma noção ?? abraços !! Compartilhar este post Link para o post Compartilhar em outros sites
.juuh 0 Denunciar post Postado Junho 10, 2009 Hmm, então, se eu fizer isso essa consulta apareceria da db grid? Mas a minha dbgrid ja mostra toda a tabela.. n entendi, qual a utilidade disso? =S E no caso, eu queria dar um update na tabela de cidades em statusdeerro... e depois exibir esse resultado na dbgrid @edit Diretamente, eu quero saber como faço para pegar uma informação do nslookupcombobox e colocar num campo de uma tabela, atualizando o banco.. Compartilhar este post Link para o post Compartilhar em outros sites
Daniel Sanches 0 Denunciar post Postado Junho 10, 2009 pelo jeito você está usando uma TABELA e não uma QUERY ... a utilidade da QUERY você vai perceber conforme for desenvolvendo seu sistema, mas um motivo básico disso é a manipulação dos dados do banco de dados ... com a TABLE você visualiza, inclui, edita e exclui dados de uma TABELA no banco de dados ... pode até fazer filtros simples com a propriedade Filter e Filtered ... com a QUERY você visualiza, inclui, edita e exclui como a TABLE ... porém para consultas ela é muito melhor que a table ... por exemplo: tenho as seguintes tabelas e (campos): VENDA (CODIGO, COD_CLI) CLIENTE (CODIGO, NOME) com a query você pode fazer uma consulta exibindo no GRID, inclusive o nome do cliente, como se fosse um campo da TABELA VENDA ... 'select VENDA.*, CLIENTE.NOME as from VENDA,CLIENTE where CLIENTE.CODIGO = VENDA.COD_CLI' com o select acima, você exite uma grid completa ... CODIGO | COD_CLI | NOME deu pra ter uma noção ?? rsrsrs agora, se sua dúvida for outra, favor postar ... abraços !! Compartilhar este post Link para o post Compartilhar em outros sites
Daniel Sanches 0 Denunciar post Postado Junho 10, 2009 mais uma dica: de uma lida neste artigo, que foi postado pelo nosso amigo Jonas pra você ter uma idéia melhor sobre SQL: Usando SQL com Delphi Veja o capitulo 12 desta apostila para entender melhor http://br.geocities.com/profwagnerberto/delphibd.htm abraço http://br.geocities.com/profwagnerberto/delphibd.htm abraço !! Compartilhar este post Link para o post Compartilhar em outros sites
.juuh 0 Denunciar post Postado Junho 10, 2009 Entendi! Estou começando a usar Query e está até mais fácil XD.. n sabia como usar sql no delphi, portanto achei esse link muito bom, muito obrigada!! Porém, agora estou com um problema, o código está assim procedure TfrmInsere.OkClick(Sender: TObject); var cidade,erro :string; begin cidade:= frmPrincipal.DBLookupComboBox1.Text; erro:= DBLookupComboBox1.Text; //alterar dm.ADOQuery.sql.Clear; dm.ADOQuery.Open; dm.ADOQuery.sql.Text:='update TBCidades SET codigoerro = erro WHERE nomecidade = cidade'; dm.ADOQuery.ExecSQL; Porém está dando um erro... :T fiz algo errado? Compartilhar este post Link para o post Compartilhar em outros sites
.juuh 0 Denunciar post Postado Junho 10, 2009 O erro diz "missing connection or connection string" @edit ok arrumei isso, agora o erro diz que a var string CIDADE eh invalida..x.x Compartilhar este post Link para o post Compartilhar em outros sites
Daniel Sanches 0 Denunciar post Postado Junho 10, 2009 Entendi! Estou começando a usar Query e está até mais fácil XD.. n sabia como usar sql no delphi, portanto achei esse link muito bom, muito obrigada!! Porém, agora estou com um problema, o código está assim procedure TfrmInsere.OkClick(Sender: TObject); var cidade,erro :string; begin cidade:= frmPrincipal.DBLookupComboBox1.Text; erro:= DBLookupComboBox1.Text; //alterar dm.ADOQuery.sql.Clear; dm.ADOQuery.Open; dm.ADOQuery.sql.Text:='update TBCidades SET codigoerro = erro WHERE nomecidade = cidade'; dm.ADOQuery.ExecSQL; Porém está dando um erro... :T fiz algo errado? é um erro simples ... só corrigindo seu código: dm.ADOQuery.sql.Text:='update TBCidades SET codigoerro = :P_erro WHERE nomecidade = :P_cidade'; dm.ADOQuery.Parameters.parambyname('P_erro').value:= erro; dm.ADOQuery.Parameters.parambyname('P_cidade').value:= cidade; dm.ADOQuery.ExecSQL; *eu exclui a linha (dm.ADOQuery.sql.Clear;) porque não havia necessidade desta linha, pois, você utilizando "sql.text=" você já está substituindo todo o texto pelo atual ... *eu exclui a linha (dm.ADOQuery.Open;) porque nesse caso você não precisa abrir a query neste momento... *você não pode referenciar uma variável diretamente no código SQL (erro / cidade) você tem que utilizar parametros ... utilizando :P_erro, você já está criando um parametro no código e com parambyname você está definindo esses valores ... você utiliza o comando OPEN apenas quando a query vai retornar registros pra você ... você utiliza o comando ExecSQL apenas quando você não tiver retorno de registros na query ... qq dúvida post novamente ... abraço !!! Compartilhar este post Link para o post Compartilhar em outros sites
.juuh 0 Denunciar post Postado Junho 10, 2009 Hmm entendi muito obrigada.. Acho que pra matar de vez com esse tópico, mais uma pergunta.. Eu queria que quando a pessoa clicar no campo da dbgrid, o dbLookupCombobox apontasse para o campo selecionado.. Por exemplo se a pessoa clicar no código de cidade 50 na dbgrid, o dbLookUpComboBox tem que mostrar 50 também. O dblookupcombobox está com os códigos das cidades... Compartilhar este post Link para o post Compartilhar em outros sites
Daniel Sanches 0 Denunciar post Postado Junho 10, 2009 no DBLookupComboBox1 existem algumas propriedades: DataSource = datasource da tabela ao qual ele receberá/enviará os dados DataField = campo ligado à tabela referente ao DataSource ListSource = datasource ao qual ele listará os dados ListField = campo ao qual listará KeyField = campo de retorno ao DataSource se o DataSource estiver apontado para o mesmo DataSource da sua DBGRID, ele automaticamente exibirá a informação referente ao campo em DataField ... clicando no dbgrid, ou seja, mudando o registro, ele automaticamente exibirá o registro atual ... abraço !! Compartilhar este post Link para o post Compartilhar em outros sites
.juuh 0 Denunciar post Postado Junho 10, 2009 se eu coloco o datasource do dblookup igual ao da dbgrid, da erro >< Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Junho 10, 2009 .juuh, seja mais clara nas suas dúvidas... não temos como adivinhar qual é o erro que ocorre na sua aplicação não concorda? []'s Compartilhar este post Link para o post Compartilhar em outros sites
.juuh 0 Denunciar post Postado Junho 10, 2009 hmm ok, desculpem :( eu resolvi fazer isso aqui oh: procedure TfrmInsere.DBGrid1CellClick(Column: TColumn); var oi :string; begin oi:= DBGrid1.SelectedField.AsString; if DBGrid1.SelectedField.FieldName = 'Codigoerro' then DBLookupComboBox1.KeyValue:= oi; end; solucionou o problema mas me deu outro, pq se o usuario clicar no nome da cidade, da erro.. dai pensei em fazer akele if ali, que só fosse funfar caso o q a pessoa clicou seja um código.. Porém não estou sendo muito feliz... Se eu coloco no datasource dos dois, dá um erro "Circular datalinks are not allowed". (OBS:eu n estava conseguindo mudar diretamente na propriedade, portanto os datasources eu selecionei por código); Compartilhar este post Link para o post Compartilhar em outros sites
Daniel Sanches 0 Denunciar post Postado Junho 10, 2009 se o DBLookupcompobox estiver devidamente configurado como informei alguns posts atrás, você não precisa dessa rotina pra exibir o campo no dblookup ... ele fará isso automaticamente ... Compartilhar este post Link para o post Compartilhar em outros sites
.juuh 0 Denunciar post Postado Junho 10, 2009 Sim, mas quando eu coloco o datasource diretamente na propriedade, ele da aquele erro do circular link are not allowed... =T Acho que vou deixar aquela rotina mesmo, mas n sei como fazer esse teste, o que estaria errado nele? @edit modifiquei, em vez de ser pelo nome, pedi pela posição da coluna, e resolveu ^^ Compartilhar este post Link para o post Compartilhar em outros sites
Daniel Sanches 0 Denunciar post Postado Junho 10, 2009 você está colocando o DataSource igual ao ListSource ??? se estiver está errado ... o DataSource é ligado à Tabela o qual ele irá gravar e ler os dados e o ListSource à tabela a qual ele irá apresentar os dados ... Compartilhar este post Link para o post Compartilhar em outros sites