Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

.juuh

Tabelas

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

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

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, 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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.