Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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~
hmm não entendi, o que seria o query?
um adoquery?
desculpe a burrice hehioeoi...
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 ...
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
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 !!
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..
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 !!
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 !!
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;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
>
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;é 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 !!!
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...
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 !!
se eu coloco o datasource do dblookup igual ao da dbgrid, da erro ><
.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
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;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);
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 ...
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 ^^
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 ...
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
se entendi direito, é mais ou menos esse caminho aí ...
abraço !!