Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML.
Sistema Datacar
Criação de um sistema completo com Delphi/Kylix
Parte IV – Veículo adquiridos, procuras e tratamento de erros
Dando continuidade ao nosso projeto Datacar, finalizaremos os módulos de cadastros construindo o formulário de Veículo Adquirido, que é muito semelhante ao cadastro de Veículo Atual. Faremos o tratamento dos erros de chaves estrangeiras impostas pelo SGBDR, construiremos nossa própria validação do lado do servidor e faremos uma procura personalizada.
Dados de veículos adquiridos
A tabela de Veículos Adquiridos guarda informações sobre os modelos de veículos comprados na revenda por determinado cliente. Este veículo adquirido obrigatoriamente deve pertencer a outro cliente (pois estamos desenvolvendo um controle de revendas), portanto há um relacionamento com o Veículo Atual. O cliente poderia já estar pretendendo tal modelo, de forma que também há um relacionamento com a tabela de Veículo Pretendido.
Para construir o cadastro, primeiro coloque no Data Module (DM) um componente SQLDataSet e dê a ele o nome de dst_veiculo_adquirido. Aponte a propriedade SQLConnection para SQLConnect. Na sua propriedade CommandText digite:
select VAD.*, M.NOME_MODELO, C.NOME_CLIENTE
from VEICULO_ADQUIRIDO VAD
inner join VEICULO_ATUAL VAT on
VAD.COD_VEICULO_ATUAL = VAT.COD_VEICULO_ATUAL
inner join CLIENTES C on
VAT.COD_CLIENTE = C.COD_CLIENTE
inner join MODELOS M on
M.COD_MODELO = VAT.COD_MODELO
where VAD.COD_VEICULO_ADQUIRIDO =:COD_VEICULO_ADQUIRIDO
Vá até a propriedade Params do SQLDataSet e configure DataType do único parâmetro como sendo do tipo ftInteger. Dê um duplo clique no SQLDataSet e pressione CTRL+F para adicionar os TFields.
Selecione todos os TFields (menos COD_VEICULO_ADQUIRIDO) e configure a propriedade ProviderFlags.pfInWhere como False. Selecione apenas o campo COD_VEICULO_ADQUIRIDO e configure seu ProvidersFlags.pfInkey para True. Selecione agora os campos NOME_MODELO e NOME_CLIENTE, configurando ProviderFlags.pfInUpdate para False (estes campos não pertencem à tabela em questão, são apenas utilizados para visualização, sem a necessidade de se fazer um lookup).
Coloque no DM um DataSetProvider com o nome de dsp_veiculo_adquirido, configurando suas propriedades UpdateMode para upWhereKeyOnly e DataSet para dst_veiculo_adquirido.
Coloque no DM um componente ClientDataSet com o nome de cds_veiculo_adquirido, configurando sua propriedade ProviderName para dsp_veiculo_adquirido. Dê um duplo clique neste ClientDataSet e no editor de campos aperte CTRL+F. Configure a propriedade DisplayLabel de cada componente TField adequadamente. Selecione o campo chave COD_VEICULO_ADQUIRIDO e configure sua propriedade Required para False (o valor para este campo é dado pelo sistema). Para o campo COD_VEICULO_ATUAL configure Required como True (um veículo adquirido deve pertencer a alguém).
No evento OnNewRecord do ClientDataSet digite:
cds_veiculo_adquiridoCOD_CLIENTE.Value:=
cds_clientesCOD_CLIENTE.Value;
E no evento BeforePost do ClientDataSet:
Incrementa(‘VEICULO_ADQUIRIDO’,
cds_veiculo_adquiridoCOD_VEICULO_ADQUIRIDO);
Lista de veículos adquiridos
No DM, acrescente um SQLClientDataSet (chame-o de cds_lista_veiculo_adquirido) para trazer a lista de veículos que o cliente adquiriu. Configure sua propriedade DBConnection e coloque o seguinte CommandText:
select M.NOME_MODELO, VAD.COD_VEICULO_ADQUIRIDO,
VAD.DATA_AQUISICAO, VAD.VALOR_DE_AQUISICAO
from VEICULO_ADQUIRIDO VAD
inner join VEICULO_ATUAL VAT on
VAD.COD_VEICULO_ATUAL = VAT.COD_VEICULO_ATUAL
inner join MODELOS M on
M.COD_MODELO = VAT.COD_MODELO
where VAD.COD_CLIENTE =:COD_CLIENTE
Configure o parâmetro COD_CLIENTE como ftInteger na propriedade Params do SQLClientDataSet. Adicione todos os campos no Field Editor, configurando a propriedade ...